使用可变文件名在工作簿之间切换

Use a variable filename to switch between workbooks

我的组织中有多个 Excel VBA 应用程序 运行。

我在应用程序中硬编码了所有员工姓名,但这意味着我必须自己更改它。为了摆脱这种依赖,我创建了一个包含所有员工姓名的 Excel 文件。当新人添加到此列表时,所有应用程序中的宏都可以 运行 更新名称。这个宏有效。

问题

文件名可能随着时间的推移而改变(并且随着版本的改变),但我仍然希望应用程序在文件名改变时能够正常工作。这是一个问题,因为我引用这个文件名是因为我多次在工作簿之间切换。

所以我编码将文件名(可变的)复制到另一个文件。然后我 Dim Filename as Range,因此 Set Filename=Range("A1")。我想在 Windows(FileName).Activate 中使用它,但收到错误 13 类型不匹配。我不明白为什么这不起作用,因为当我调试时我发现它正确设置了文件名。

Sub Engineering()
Dim FileName As Range

Sheets("Info").Select
Set FileName = Range("A1")

Windows(FileName).Activate
'Here I get error 13 type mismatch


Sheets("Engineering").Select
Range("Tabel3[[#All],[Kolom1]]").Select
Application.CutCopyMode = False
Selection.ClearContents
Application.CutCopyMode = False

Windows("Personeelsnamen.xlsx").Activate
Sheets("Engineering").Select
Range("Tabel3[[#All],[Kolom1]]").Select
Application.CutCopyMode = False
Selection.Copy

Windows(FileName).Activate
'Range("Tabel14[@Kolom1]").Select
ActiveSheet.Range("A1").Select
ActiveSheet.Paste

End Sub

以下是在两个工作簿之间切换以将表格从一个复制到另一个的最终代码。

Sub Knop17081_Klikken()
Dim myData As Workbook
Dim BestandsNaam As String

Sheets("RD & LTE").Visible = True
Sheets("CAM & LTE").Visible = True
Sheets("Engineering").Visible = True
Sheets("CAM").Visible = True
Sheets("LTE").Visible = True


Sheets("Input").Select
Range("L1").Value = ActiveWorkbook.Name

Range("L1").Select

Application.CutCopyMode = False
Selection.Copy

Set myData = Workbooks.Open("HyperlinkDirectlyToFile")

ActiveWindow.ActivatePrevious

Application.CutCopyMode = False
Selection.Copy
Windows("Personeelsnamen.xlsm").Activate
Sheets("Info").Select
ActiveSheet.Range("A1").Select
ActiveSheet.Paste

Call Engineering
Call CAM
Call LTE
myData.Close
Call CombineerCAMenLTE
Call CombineerRDenLTE

Sheets("RD & LTE").Visible = False
Sheets("CAM & LTE").Visible = False
Sheets("Engineering").Visible = False
Sheets("CAM").Visible = False
Sheets("LTE").Visible = False

End Sub

如错误提示,变量类型不正确。它是一个范围,而 Windows() 对象需要一个字符串变量。

请试试这个方法,告诉我是否可行

Sub Engineering()
Dim FileName As String

FileName = Worksheets("Info").Range("A1").Value

Windows(FileName).Activate