尝试使用VBS运行Excel子时找不到宏

时间:2015-04-17 15:24:41

标签: excel vba vbscript

我在网上找到以下代码来尝试自动化Excel宏。

 ' Create a WshShell to get the current directory
Dim WshShell
Set WshShell = CreateObject("WScript.Shell")

' Create an Excel instance
Dim myExcelWorker
Set myExcelWorker = CreateObject("Excel.Application") 


Dim strSaveDefaultPath
Dim strPath
strSaveDefaultPath = myExcelWorker.DefaultFilePath
strPath = WshShell.CurrentDirectory
myExcelWorker.DefaultFilePath = strPath

' Open the Workbook specified on the command-line 
Dim oWorkBook
Dim strWorkerWB
strWorkerWB = strPath & "\Excel Report Creator.xlsm"

Set oWorkBook = myExcelWorker.Workbooks.Open(strWorkerWB,0, true)

' Build the macro name with the full path to the workbook
Dim strMacroName
strMacroName = "'" & strPath & "\Excel Report Creator" & "!ReferenceSheet.CommandButton1_Click"

on error resume next 
    myExcelWorker.Run strMacroName
   if err.number <> 0 Then
   MsgBox "errerr: " & err.Description
   End If
   err.clear
on error goto 0 

oWorkBook.Save 

myExcelWorker.DefaultFilePath = strSaveDefaultPath

    ' Clean up and shut down
        Set oWorkBook = Nothing
        myExcelWorker.Quit
        Set myExcelWorker = Nothing
        Set WshShell = Nothing

运行时,我收到以下错误。

The macro may not be available in this workbook or all macros may be disabled. 

我的电子表格称为Excel Report Creator.xlsm,工作表名为ReferenceSheet,子程序名为CommandButton1_Click。我在这里错过了什么吗?可能是Excel中的设置?

谢谢, 比尔

1 个答案:

答案 0 :(得分:2)

当工作簿名称包含空格时,您需要将其包装在单引号中。如果工作簿处于打开状态,则不需要完整路径:

' Build the macro name with the full path to the workbook
Dim strMacroName
strMacroName = "'Excel Report Creator.xlsm'" & _
               "!ReferenceSheet.CommandButton1_Click"

on error resume next 
    myExcelWorker.Run strMacroName
   if err.number <> 0 Then
   MsgBox "errerr: " & err.Description
   End If
   err.clear
on error goto 0 

并确保您调用的Sub为Public