1

我最近学习了如何在 VBA 中编程,并通过阅读本网站上先前提出的问题和答案获得了一些非常有用的帮助。但是,我在我的一个程序中遇到了一个似乎没有得到非常直接解决的问题。所以我会在这里问。

我正在制作一个 Powerpoint 宏,它将使用新数据自动更新一些幻灯片。对于包含 excel 表格的一张幻灯片,我希望宏打开一个 excel 文件,在 excel 文件中运行现有宏以用新数据填充电子表格,最后将表格复制到 powerpoint 幻灯片。到目前为止,我的代码(没有复制部分)是这样的:

Private Sub GetProposals()
    Dim myXL As Excel.Application
    Dim myXLS As Excel.Workbook
    Dim ws As Excel.Worksheet

    Set myXL = New Excel.Application
    Set myXLS = GetObject("K:\Jackson\Proposal Summary Master.xlsm")
    Set ws = myXLS.Sheets(1)
    ws.Visible = xlSheetVeryHidden

    myXLS.Sheets("VLOOKUP").Range("J1").Value = "EPL"
    myXL.Run ("'K:\Jackson\Proposal Summary Master.xlsm'!BABox_Change")
End Sub

它运行正常,直到我到达“myXL.Run ...”行。我收到一条消息说“运行时错误'1004':无法运行宏“K:\Jackson\Proposal Summary Master.xlsm'!BABox_Change'。该工作簿中的宏可能不可用,或者所有宏都可能被禁用。"

当我直接打开文件并以这种方式启动时,excel 宏运行良好。我有点坚持下一步应该做什么。有人有什么建议吗?

4

2 回答 2

0

问题可能是因为您没有打开工作簿。不过,关键是要确保在代码执行后释放对象;这样,文件不会被您的 powerpoint 文件“锁定”,或者 Excel 的额外“隐藏”进程/实例保持打开状态。

Private Sub GetProposals()
    Dim myXL As Excel.Application
    Dim myXLS As Excel.Workbook
    Dim ws As Excel.Worksheet

    Set myXL = New Excel.Application
    Set myXLS = myXL.Workbooks.Open("K:\Jackson\Proposal Summary Master.xlsm")
    myXLS.Application.DisplayAlerts = False
    Set ws = myXLS.Sheets(1)
    ws.Visible = xlSheetVeryHidden

    myXLS.Sheets("VLOOKUP").Range("J1").Value = "EPL"
    myXLS.Application.Run ("BABox_Change")

    myXLS.Application.DisplayAlerts = True
    myXLS.Close(true) ' Change to false if you don't want to save Changes


    Set myXLS = Nothing
    Set myXL = Nothing
    Set ws = Nothing
End Sub
于 2013-08-15T01:46:45.367 回答
0

杰出的。这也对我有用。我刚刚调整了这部分

   myXLS.Sheets("VLOOKUP").Range("J1").Value = "EPL"
        myXLS.Application.Run ("BABox_Change")

到我的文件

于 2016-07-01T02:12:07.477 回答