【问题标题】:Macro gets disabled if called using a vb script如果使用 vb 脚本调用宏将被禁用
【发布时间】:2012-05-18 19:22:13
【问题描述】:

我正在尝试使用 vbs 调用我的 excel 宏。这是我的代码的 sn-p。

Set objExcel = CreateObject("Excel.Application")
Set objWorkbook = objExcel.Workbooks.Open("C:\Folder\Test_PO.xls")
objExcel.Application.Visible = True
objExcel.Application.Run "C:\Folder\Test_PO.xls!Data_Analysis"
objExcel.ActiveWorkbook.Close
objExcel.Application.Quit
WScript.Echo "Finished."
WScript.Quit

现在的问题是我可以打开文件,但是宏在这里被禁用并显示'macro may not be present or may be disabled'。我确定我正在调用正确的宏名称,但是一旦打开文件,我已将宏配置为从中运行的加载项选项卡就会消失。如果我手动打开文件,这不会打开,我可以看到选项卡并从选项卡本身运行宏。有什么建议我可以克服这个问题并让宏运行吗?

【问题讨论】:

  • 如果您的宏在插件中,则需要加载插件。

标签: vba vbscript


【解决方案1】:

试试这个

Dim objExcel, objWorkbook 

Set objExcel = CreateObject("Excel.Application")
Set objWorkbook = objExcel.Workbooks.Open("C:\Folder\Test_PO.xls")
objExcel.Visible = True
objExcel.Run "Data_Analysis"
objWorkbook.Close
objExcel.Quit

Set objWorkbook = Nothing
Set objExcel = Nothing

WScript.Echo "Finished."
WScript.Quit

编辑

如果宏在模块中,那么上面的内容会有所帮助。如果宏在工作表中,例如 Sheet1,则替换该行

objExcel.Run "Data_Analysis"

objExcel.Run "sheet1.Data_Analysis"

跟进

试试这个代码。

Dim objExcel, objWorkbook, ad, FilePath

Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = True

For Each ad In objExcel.AddIns
    If ad.Name = "Converteam.xla" Then
        FilePath = ad.Path & "\Converteam.xla"
        Exit For
    End If
Next

objExcel.Workbooks.Open (FilePath)

Set objWorkbook = objExcel.Workbooks.Open("C:\Folder\Test_PO.xls")

objExcel.Run "Data_Analysis_Converteam"
objWorkbook.Close
objExcel.Quit

Set objWorkbook = Nothing
Set objExcel = Nothing

WScript.Echo "Finished."
WScript.Quit

解释

当您使用CreateObject 时,默认情况下不会安装加载项。请查看此链接。

主题:在 Excel 中使用 CreateObject 命令时加载项不加载

链接http://support.microsoft.com/kb/213489/

您必须加载加载项,然后调用相关宏。此外,您的宏的名称不是Data_Analysis,而是Data_Analysis_Converteam

HTH

【讨论】:

  • 我再次面临同样的问题。文件被打开,但我收到消息宏可能不存在或可能在此文件中被禁用。如果我只是尝试使用此代码打开文件,插件选项卡也会消失 sumhow。通过 vbs 打开文件时,宏会被禁用 sumhow
  • 宏在哪里?是在Sheet代码区还是Module Code区?
  • 模块代码区。我已经创建了它,以便可以从插件选项卡中调用它
  • 你用的是哪个excel版本?
  • Excel 2010。即使我删除宏行的调用并使用 vbs 打开文件,宏也会消失
【解决方案2】:

要添加到 Siddhart 的答案 - 您可以像这样在 VBScript 中加载所需的插件:

objExcel.RegisterXLL("analys32.xll") 'For XLL addins
objExcel.Workbooks.Open(objExcel.LibraryPath & "\analysis\atpvbaen.xla") 'For standard XLA addins
objExcel.Workbooks.Open("C:\Program Files\MyAddins\MyAddin.xla") 'for custom XLA addins

【讨论】:

  • 是的,这就是我在链接中提到的内容,但那不是正确的方法 :) 原因是,您的加载项并不总是位于 xl.LibraryPath跨度>
  • 很公平 - 我会删除然后;-)
  • 好吧 - 让我们留给后代吧
  • 如果您看到我发布的代码,我使用for loop 来获取实际路径。我之前用objExcel.LibraryPath 测试过它;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-26
  • 2020-05-10
  • 2019-09-21
  • 1970-01-01
  • 2018-04-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多