我在整个组织中运行着多个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
答案 0 :(得分:2)
如错误提示所示,变量不是正确的类型。 Windows()对象需要一个字符串变量时,这是一个范围。
请尝试这种方式,告诉我是否可行
Sub Engineering()
Dim FileName As String
FileName = Worksheets("Info").Range("A1").Value
Windows(FileName).Activate