使用'As String'变量填充'As Workbook'变量

时间:2017-11-10 15:39:18

标签: excel vba excel-vba

我的VBA项目有一个动态名称,因为它包含例如'版本号'。 但是我想从另一个工作簿中引用其中的一个工作表(该工作簿是由我的项目创建的,用于在那里完成工作)。

我有这个代码并且有效,但它不是动态的:

   Dim ProjectPathName As String
    Dim ProjectPathNameLength As Integer
    Dim ProjectFileName As String
    Dim PosLastBackSlash As Integer
    Dim RDXX As Workbook

    ProjectPathName = Application.VBE.ActiveVBProject.FileName
    ProjectPathNameLength = Len(ProjectPathName)
    PosLastBackSlash = InStrRev(ProjectPathName, "\")
    ProjectFileName = Right(ProjectPathName, (ProjectPathNameLength - PosLastBackSlash))

    Set RDXX = Workbooks("RDXX 2017-10_2_DEV.xlam")    

这是我到目前为止所尝试的:

'    Set wbDeltaWorks = Workbooks(FileName:=ProjectFileName)
    '   Set wbDeltaWorks = Workbooks(FileName = ProjectFileName)
    '    Set wbDeltaWorks = Workbooks(ProjectFileName)
    '    Set wbDeltaWorks = Workbooks("ProjectFileName")
    '    Set wbDeltaWorks = Workbooks("" & ProjectFileName & "")
    '    Set wbDeltaWorks = Workbooks(""" & ProjectFileName & """)
    '    Set wbDeltaWorks = Workbooks(ProjectFileName.Value)
    '    Set wbDeltaWorks = Workbooks(1)
    '    Set wbDeltaWorks = ProjectFileName

你能帮我解决这个问题吗?

非常感谢所有帮助!

2 个答案:

答案 0 :(得分:1)

我假设迭代编号位于项目名称的末尾。让我们说当前的迭代被称为" myProject_1234"。您可以通过Windows collection遍历所有打开的工作簿并查找该关键字:

For Each Window In Application.Windows

    If Left(Window.Caption, 9) = "myProject" Then
        Set myWorkbook = Application.Workbooks(Window.Caption)
        Exit For
    End If

Next Window

如果数字不在最后,或者您不想使用Left function而使用Instr function,则原则是相同的。

答案 1 :(得分:0)

感谢您的帮助,它让我走上正轨!我去了Rory所说的,因为已经有效了#34; Set wbDeltaWorks = Workbooks(ProjectFileName)可以正常工作,假设名称正确并且包含扩展名。"。 我只在其他工作簿处于活动状态的阶段使用它。因此我得到了错误的项目名称。

再次感谢!