从另一个工作簿运行Excel宏。

8

我有一个存放在服务器上的宏,需要能够从连接到该服务器的不同工作站上运行。

目前我正在执行以下操作:

Application.Run ("L:\database\lcmsmacro\macro1.xlsm!macro_name") 

我收到的错误信息是“在此工作簿中可能无法使用该宏#1004”。
我已经确保我的安全设置处于最低水平。
我如何从托管在不同服务器上的另一个工作簿运行宏?
使用加载项是否有帮助?
4个回答

18

我认为您的语法缺少单引号:

Application.Run ("'L:\database\lcmsmacro\macro1.xlsm'!macro_name") 

如果你需要向它传递参数,语法将是这样的:

Application.Run ("'L:\database\lcmsmacro\macro1.xlsm'!macro_name","param1","param2") 

5
这是链接任何关闭的Excel工作簿的标准语法。例如,如果您要将一个单元格链接到另一个关闭的工作簿中的单元格,则语法如下所示:'C:\ Documents and Settings \ mnbtjf01 \ Desktop \ [myWorkbook.xls] Sheet1'!$F $15如果您需要更多对网络电子表格的控制,还可以进一步操作。这是一个好资源: http://www.vbaexpress.com/kb/getarticle.php?kb_id=279 - Fink
如果有SheetName变量,那么我们可以使用 - Application.Run "'"&ExcelSheetName&"'!MacroName"。 - Paresh

1
这个错误也会在远程工作簿中存在重复的宏名称时出现,例如两个名为"macro_name"的宏。我花了一些时间才找到这个问题!

0
通常在名称中,如果有空格或标点符号,则需要单引号,以便Excel不会混淆认为空格是故意分隔符,例如在将参数与方法分离时。在某些情况下,Excel会坚持使用它们。通常即使不需要它们,也不会有任何损害,例如当名称中不存在空格时。有时,如果不需要它们,Excel会将它们删除。 http://www.eileenslounge.com/viewtopic.php?f=27&t=25599

0
如果您需要通过使用运行宏的工作簿路径来查找相关宏路径,并且您需要从数组列表中运行多个宏,则下面的代码将会有所帮助:
Dim relativePath As String, programFileName As String
Dim selectedProgramsFiles() As String, programsArrayLastIndex As Byte, I As Byte

For I = 0 To programsArrayLastIndex 'Loop through all selected programs
    programFileName = selectedProgramsFiles(I)
    relativePath = ThisWorkbook.Path & "\" & programFileName
    Workbooks.Open Filename:=relativePath

    Application.Run ("'" & relativePath & "'!ModuleName.Main")

    Workbooks(programFileName).Activate
    ActiveWorkbook.Close SaveChanges:=False
Next I 'For I = 0 To programsArrayLastIndex 'Loop through all selected program

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接