我的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
你能帮我解决这个问题吗?
非常感谢所有帮助!
答案 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)可以正常工作,假设名称正确并且包含扩展名。"。 我只在其他工作簿处于活动状态的阶段使用它。因此我得到了错误的项目名称。
再次感谢!