如何修复从内部Access关闭Excel
我想使用VBA代码从Access内部关闭Excel工作簿。以下代码打开工作簿并正确运行工作簿中的VBA模块。关闭工作簿时,会出现我希望避免的标准保存对话框提示 我尝试将语句如何修复从内部Access关闭Excel,excel,vba,ms-access,Excel,Vba,Ms Access,我想使用VBA代码从Access内部关闭Excel工作簿。以下代码打开工作簿并正确运行工作簿中的VBA模块。关闭工作簿时,会出现我希望避免的标准保存对话框提示 我尝试将语句.Workbooks.Close修改为.Workbooks.Close SaveChanges:=True,但这实际上使代码崩溃 Public Function Open_Share_Price_Excel() ' Change Cursor to Hourglass Screen.MousePointer = 11 Di
.Workbooks.Close
修改为.Workbooks.Close SaveChanges:=True
,但这实际上使代码崩溃
Public Function Open_Share_Price_Excel()
' Change Cursor to Hourglass
Screen.MousePointer = 11
Dim Expath, ModName As String
Dim XLApp As Object
Set XLApp = CreateObject("Excel.Application")
'
'Define where the Excel Spreadsheet is and the module to run
'
Expath = "C:\Users\peter\Documents\Financial Affairs\Shares\Share Price Bing.xlsm"
ModName = "Combined_Module"
With XLApp
.Application.Visible = True
.Application.DisplayAlerts = False
.UserControl = True
.Workbooks.Open Expath
.Run ModName
.Workbooks.Close
End With
XLApp.Quit
Set XLApp = Nothing
'Change Cursor back and display finished message
Screen.MousePointer = 0
MsgBox ("Price Update Finished - OK to Continue")
End Function
我尝试将语句.Workbooks.Close
修改为.Workbooks.Close SaveChanges:=True
,但这实际上使代码崩溃
Public Function Open_Share_Price_Excel()
' Change Cursor to Hourglass
Screen.MousePointer = 11
Dim Expath, ModName As String
Dim XLApp As Object
Set XLApp = CreateObject("Excel.Application")
'
'Define where the Excel Spreadsheet is and the module to run
'
Expath = "C:\Users\peter\Documents\Financial Affairs\Shares\Share Price Bing.xlsm"
ModName = "Combined_Module"
With XLApp
.Application.Visible = True
.Application.DisplayAlerts = False
.UserControl = True
.Workbooks.Open Expath
.Run ModName
.Workbooks.Close
End With
XLApp.Quit
Set XLApp = Nothing
'Change Cursor back and display finished message
Screen.MousePointer = 0
MsgBox ("Price Update Finished - OK to Continue")
End Function
欢迎任何建议
其次,我希望确保关闭所有excel工作簿,因为我知道工作簿Personal.xlsx也可能处于打开状态。当我手动关闭Excel电子表格时,它会关闭,但Excel会立即以空白工作簿重新打开
请帮帮这个新手
set OpenedWb=.Workbooks.Open(Expath)
,这样您就可以准确地访问该工作簿以关闭它OpenedWb.close SaveChanges:=True
.Workbooks.Close
不起作用,因为工作簿
重新发送所有工作簿,而不是特定的工作簿(但必须单独关闭每个工作簿)
Dim Expath,ModName作为字符串
仅声明ModName作为字符串
,而Expath作为变量
。在VBA中,您需要为每个变量指定一个类型,否则默认为变量。因此,必须使用:Dim Expath作为字符串,ModName作为字符串
,使它们都成为字符串
函数不返回任何内容。因此,它应该是一个过程,而不是一个函数
Public Sub Open_Share_Price_Excel()
' Change Cursor to Hourglass
Screen.MousePointer = 11
'
'Define where the Excel Spreadsheet is and the module to run
'
Dim Expath As String
Expath = "C:\Users\peter\Documents\Financial Affairs\Shares\Share Price Bing.xlsm"
Dim ModName As String
ModName = "Combined_Module"
Dim XLApp As Object
Set XLApp = CreateObject("Excel.Application")
With XLApp
.Application.Visible = True
.Application.DisplayAlerts = False
.UserControl = True
Dim OpenedWb As Object
Set OpenedWb = .Workbooks.Open(Expath)
.Run ModName
OpenedWb.Close SaveChanges:=True
End With
XLApp.Quit
Set XLApp = Nothing
'Change Cursor back and display finished message
Screen.MousePointer = 0
MsgBox ("Price Update Finished - OK to Continue")
End Sub
谢谢,我改变了,但这并不能解决我的问题。上帝编程提示。Dim OpenedWb as工作簿会产生用户定义类型not definedAh的编译错误,因为您使用了后期绑定。对不起,我错过了。如果延迟绑定,您必须使用
Dim OpenedWb作为对象
谢谢!!!!现在真是魅力四射!这完美地解决了这个问题。顺便说一句,我无法从窗体上的控件(按钮)将其作为子控件运行。运行代码事件似乎只作为函数运行,不是sub。我尝试使用事件RunMacro,但在输入宏名称的字段最右侧的下拉列表中找不到宏。只要Open\u Share\u Price\u Excel
是Public
,并且在一个模块中,它应该可以通过按钮运行。如果这回答了您的问题,请将其标记为已解决: