在Access中使用嵌入的Excel工作表运行宏
我的问题很简单,但到目前为止我还没有找到解决办法 我在Access中创建了一个名为Form1的表单。 在此表单中,我插入了一个“未绑定对象框架”,这是一个新的启用宏的Excel工作表。 在Excel工作表中,我创建了一个宏,我们可以称之为“ExcelMacro” 我想知道如何从Access运行此Excel工作表中的宏,例如,在我的Access宏中,运行“ExcelMacro” 我不想将Excel工作表链接到外部Excel工作簿 你有什么想法吗 非常感谢你的帮助 编辑: 如果您需要一些其他信息: 未绑定对象帧的名称:xlObject OLE类:已启用Microsoft Excel宏12 类别:Excel.SheetMacroEnabled.12在Access中使用嵌入的Excel工作表运行宏,excel,ms-access,vba,Excel,Ms Access,Vba,我的问题很简单,但到目前为止我还没有找到解决办法 我在Access中创建了一个名为Form1的表单。 在此表单中,我插入了一个“未绑定对象框架”,这是一个新的启用宏的Excel工作表。 在Excel工作表中,我创建了一个宏,我们可以称之为“ExcelMacro” 我想知道如何从Access运行此Excel工作表中的宏,例如,在我的Access宏中,运行“ExcelMacro” 我不想将Excel工作表链接到外部Excel工作簿 你有什么想法吗 非常感谢你的帮助 编辑: 如果您需要一些其他信息:
图纸名称:图纸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应用程序。如果是另一个,它将失败
此外,工作表需要打开,否则将失败(在运行此操作之前,可以添加以下任一代码段以打开它)
或
确保没有其他Excel实例正在运行,如果有可能,请退出它们(注意:这些实例使用运行时错误和错误处理程序)
非常感谢您的回复!!我曾尝试使用您的代码,但出现错误429:“ActiveX组件无法创建对象”。所以我想我遇到了你的问题。。。如何打开Excel工作表?您所说的是什么意思:这需要是运行嵌入式工作表的Excel应用程序。如果是另一个,它将失败。请参阅编辑后的答案。我的意思是,如果您有多个打开的Excel应用程序,代码可能会绑定错误的应用程序,那么它将无法工作。我可以提供一些代码,以便在Excel正在运行时生成错误消息,或者关闭所有打开的Excel应用程序。只需添加以下行:Me.xlObject.Action=acOLEActivate,即可正常工作。谢谢你抽出时间!我可以提供一些代码,以便在Excel正在运行时生成错误消息,或者关闭所有打开的Excel应用程序。=>我对这两个动作也很感兴趣!非常感谢你的努力!!!在过去的两天里,我一直在寻找解决方案,你救了我的命!再次感谢!
Me.MyOLEUnbound.Verb = 0 'vbOLEPrimary
Me.MyOLEUnbound.Action = 7
Me.MyOLEUnbound.AutoActivate = 1 'vbOLEActivateGetFocus
Me.MyOLEUnbound.SetFocus
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