使用“As String”variables填充“As Workbook”variables

我的VBA项目有一个dynamic名称,因为它包含例如“版本号”。 但是我想参考其他工作簿中的工作簿(该工作簿是由我的项目创build的,以便在那里完成工作)。

我有这个代码,这是有效的,但它不是dynamic的:

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 

你能帮我吗?

所有的帮助非常感谢!

我假设迭代数字在项目名称的末尾。 可以说,目前的迭代被称为“myProject_1234”。 您可以通过Windows集合遍历所有打开的工作簿并查找该关键字:

 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函数,请改用Instr函数 ,原理相同。

感谢您的帮助,它使我走上正轨! 我去了Rory说的,因为已经工作了“Set wbDeltaWorks = Workbooks(ProjectFileName)应该工作,假设名字是正确的,它包括扩展名”。 我只是在另一本工作手册活跃的阶段才使用它。 所以我得到了错误的项目名称。

再次感谢!