从.vbs文件调用VBA宏会引发800A03EC错误

时间:2014-04-29 08:57:56

标签: vba excel-vba vbscript excel

我试图通过.VBS文件运行VBA宏(文件名:Check_final.vbs)。这是代码

Option Explicit

run_macro

Sub run_macro()
    Dim xl1
    Dim sCurPath
    Dim xlBook
    Dim FolderFromPath
    Set xl1 = CreateObject("Excel.application")

    sCurPath =Wscript.ScriptFullName                                                                            
    Set xlBook = xl1.Workbooks.Open(sCurPath, 0, True)
    xl1.DisplayAlerts = False
    FolderFromPath = Left(sCurPath, InStrRev(sCurPath, "\"))
    xl1.Application.run FolderFromPath & "Changed_chk.xlsm!Check"

    Set xlBook = Nothing
End Sub

当我运行此.vbs文件时,我收到此弹出窗口' Changed_chk.xlsm已被锁定以进行编辑'使用只读和通知选项。如果我使用只读或通知选项确认它,则以Check_final的名称(该.vbs文件的文件名)打开Excel工作表,并且上述代码显示在该excel文件中。然后我得到一个Windows脚本主机错误(代码:800A03AC),说宏可能不可用或所有宏都被禁用。(虽然我已经启用了这里提到的宏。[http://www.addictivetips.com/windows-tips/enable-all-macros-in-excel-2010/)]。 对此有任何帮助非常感谢。提前谢谢。

3 个答案:

答案 0 :(得分:2)

您打开vbs文件而不是excel文件...还要确保您的function / sub是公共的。在下面的示例中,我在模块" YourModuleName"中创建了一个Public Sub Check,我从vbs文件中调用它。

Option Explicit

run_macro

Sub run_macro()
    Dim xl1
    Dim xlBook
    Dim FolderFromPath
    Set xl1 = CreateObject("Excel.application")

    FolderFromPath = Replace(WScript.ScriptFullName, WScript.ScriptName, "") 
    set xlBook = xl1.Workbooks.Open(FolderFromPath & "Changed_chk.xlsm")
    xl1.Application.run "'" & xlBook.Name & "'!YourModuleName.Check"
    xl1.Application.Quit
End Sub

答案 1 :(得分:1)

试试这个简单的代码(UNTESTED)

Dim oXlApp, oXLWb, sCurPath

Set oXlApp = CreateObject("Excel.application")

sCurPath = Replace(WScript.ScriptFullName, WScript.ScriptName, "")

Set oXLWb = oXlApp.Workbooks.Open(sCurPath & "Changed_chk.xlsm")

oXlApp.DisplayAlerts = False

oXlApp.Run "Check"

'~~> Close the file here. Save or discard the changes as per your requirement 
'oXLWb.Close (True)
'oXLWb.Close (False)
oXLWb.Close
oXlApp.Quit

Set oXLWb = Nothing
Set oXlApp = Nothing

你的宏在哪里?在一张纸或一个模块中?您可能希望看到THIS

答案 2 :(得分:0)

我认为调用run_macro语句可能有问题。从我在excel VBA中创建的测试中,如果我尝试在另一个子

之外调用sub,则会出现错误
Option Explicit
test

Sub test()
    MsgBox ("Test")
End Sub

我想你可能想要

Option Explicit
Sub Start
    run_macro
End Sub

Sub run_macro()
    'code here
End Sub

或完全删除run_macro行?