Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何修复从内部Access关闭Excel_Excel_Vba_Ms Access - Fatal编程技术网

如何修复从内部Access关闭Excel

如何修复从内部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

我想使用VBA代码从Access内部关闭Excel工作簿。以下代码打开工作簿并正确运行工作簿中的VBA模块。关闭工作簿时,会出现我希望避免的标准保存对话框提示

我尝试将语句
.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
    ,并且在一个模块中,它应该可以通过按钮运行。如果这回答了您的问题,请将其标记为已解决: