【问题标题】:Excel VBA: Can't create sheets on called another Excel fileExcel VBA:无法在调用另一个 Excel 文件上创建工作表
【发布时间】: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 =吗?
  • 是,但结果相同 - 未创建工作表。

标签: vba excel


【解决方案1】:

问题出在Application.Run...这一行 语法是

Application.Run "'b.xlsm'!ReadParams", par1, par2

你的参数连接到第一个参数

【讨论】:

  • 完美!谢谢你,山姆!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-19
  • 2019-06-19
相关资源
最近更新 更多