【问题标题】:Run a macro with embedded Excel sheet in Access在 Access 中运行带有嵌入式 Excel 工作表的宏
【发布时间】:2017-12-17 17:05:43
【问题描述】:

我的问题很简单,但是目前还没有找到解决办法……

我在 Access 中创建了一个名为 Form1 的表单。 在这个表单中,我插入了一个“未绑定对象框架”,这是一个新的启用宏的 Excel 工作表。 在 Excel 工作表中,我创建了一个可以称为“ExcelMacro”的宏。

我想知道如何通过 Access 在此 Excel 工作表中运行宏,例如在我的 Access 宏中,运行“ExcelMacro”

我不想将我的 Excel 工作表链接到外部 Excel 工作簿。

你有什么想法吗?

非常感谢您的帮助!

编辑:

如果您需要一些额外的信息:

未绑定对象框架的名称:xlObject

OLE 类:Microsoft Excel 启用宏 12

类:Excel.SheetMacroEnabled.12

工作表名称:Sheet1

【问题讨论】:

    标签: excel ms-access vba


    【解决方案1】:

    您可以在 Access 中使用以下内容:

    Public Sub RunExcelMacro()
        Dim excelApp As Object
        Set excelApp = GetObject(, "Excel.Application")
        excelApp.Run "HelloWorld"
    End Sub
    

    其中“HelloWorld”是 Excel 宏的名称。

    GetObject(, "Excel.Application") 获取最新打开的 Excel 应用程序。这需要是运行嵌入式工作表的 Excel 应用程序。如果是另一个,它将失败。

    此外,工作表需要打开,否则会失败(您可以在运行之前添加以下任一代码段将其打开)。

    Me.MyOLEUnbound.Verb = 0 'vbOLEPrimary
    Me.MyOLEUnbound.Action = 7 
    

    Me.MyOLEUnbound.AutoActivate = 1 'vbOLEActivateGetFocus
    Me.MyOLEUnbound.SetFocus
    

    为了确保没有其他 Excel 实例正在运行,如果有,则可能退出它们(注意:这些使用运行时错误和错误处理程序)

    Public Function IsExcelRunning() As Boolean
        IsExcelRunning = True
        On Error GoTo ReturnFalse:
        Dim obj As Object
        Set obj = GetObject(, "Excel.Application")
        Exit Function
    ReturnFalse:
        IsExcelRunning = False
    End Function
    
    Public Sub CloseAllExcel()
        Dim obj As Object
        On Error GoTo ExitSub
        Dim i As Integer
        'There shouldn't be more than 10000 running Excel applications
        'Can use While True too, but small risk of infinite loop
        For i = 0 To 10000
            Set obj = GetObject(, "Excel.Application")
            obj.Quit
        Next i
    ExitSub:
    End Sub
    

    【讨论】:

    • 非常感谢您的回复!!我尝试使用您的代码,但收到错误 429:“ActiveX 组件无法创建对象”。所以我想我遇到了你的问题......如何打开 Excel 工作表?你说的是什么意思:这需要是运行嵌入式工作表的 Excel 应用程序。如果是另一个,它将失败。
    • 查看编辑后的答案。最后一条评论的意思是,如果您有多个打开的 Excel 应用程序,代码可能会绑定错误的应用程序,然后它就无法工作。如果 Excel 正在运行,我可以提供一些代码来生成错误消息,或者关闭所有打开的 Excel 应用程序。
    • 只需要添加一行: Me.xlObject.Action = acOLEActivate 就可以了。感谢您的宝贵时间!
    • 我可以提供一些代码来在 Excel 正在运行时生成错误消息,或者关闭所有打开的 Excel 应用程序。 => 我对这两个动作也很感兴趣!
    • 非常感谢您的努力!!!最近两天我一直在寻找解决方案,你救了我的命!再次感谢!
    猜你喜欢
    • 2020-05-09
    • 2015-10-11
    • 1970-01-01
    • 2021-09-05
    • 2022-11-25
    • 1970-01-01
    • 1970-01-01
    • 2019-03-10
    • 1970-01-01
    相关资源
    最近更新 更多