在Access中运行带有嵌入Excel表的宏

时间:2017-07-13 05:01:22

标签: excel vba ms-access access-vba

我的问题很简单但到目前为止我还没有找到解决方案......

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

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

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

你有什么想法吗?

非常感谢你的帮助!

修改

如果您需要一些其他信息:

未绑定对象框的名称:xlObject

OLE类:Microsoft Excel启用宏12

类:Excel.SheetMacroEnabled.12

工作表名称:Sheet1

1 个答案:

答案 0 :(得分:0)

您可以在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