【发布时间】:2017-07-25 13:37:11
【问题描述】:
目标是使用第一个/主文件中的参数打开另一个 Excel 文件并调用宏,该宏使用数据库中的数据创建 1 或 n 个新工作表,但 Excel 不会在第二个文件中创建新工作表,然后所有其他逻辑都失败.
您可以在下面找到两个文件的示例代码。当手动打开 B 文件并调用 tst() sub 时,此方法有效,但在第一个文件打开第二个文件时无效。工作簿不受保护,我使用的是 MS Excel 2010。
A_file.xlsm 是用户调用 GetFile 打开另一个文件并运行 ReadParams 宏的主文件。代码位于模块中。
Sub GetFile(fileName As String)
Dim filePath, par1, par2, currentUser As String
Dim targetFile As Workbook
currentUser = CreateObject("WScript.Network").UserName
filePath = "C:\Users\" & currentUser & "\Documents\Excel_APPS\"
par1 = "USE_R_one"
par2 = "some_val"
Application.ScreenUpdating = False
Set targetFile = Workbooks.Open(filePath & "B_file.xlsm")
Application.Run "'" & targetFile.Name & "'!ReadParams(" & Chr(34) & par1 & Chr(34) & ", " & Chr(34) & par2 & Chr(34) & ")"
targetFile.Activate
Application.ScreenUpdating = True
End Sub
B_file.xlsm 宏:
Sub ReadParams(s_uno As String, s_duo As String)
If IsNull(s_uno) Or IsNull(s_duo) Then
MsgBox "Error occurred.", vbExclamation, "Error"
Else
MsgBox "All params are ok, new sheet is coming right after this msg"
ThisWorkbook.Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = "Sheet_Data" '<-- THIS WON'T WORK
End If
End Sub
Sub tst()
ReadParams "USE_R", "test"
End Sub
【问题讨论】:
-
你试过
ThisWorkbook.Worksheets.Add(After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)).Name =吗? -
是,但结果相同 - 未创建工作表。