VBA Excel实例没有';从MS Access打开时无法关闭-后期绑定仍然存在相同错误

VBA Excel实例没有';从MS Access打开时无法关闭-后期绑定仍然存在相同错误,excel,vba,Excel,Vba,这是我的原稿 它被回答了,当我接受答案时,我没有意识到xlsm文件仍然没有关闭 这是一个巨大问题的原因,因为当有一个打开的ghost.xlsm文件时,打开的下一个.xlsm文件不会运行启动宏。因此,我所有的自动操作都失败了,因为以前的.xlsm存储在内存中。 所以,我计划运行许多自动装置。它们的相似之处在于运行MS Access程序,然后从MS Access程序打开.xlsm,然后MS Access程序通过电子邮件发送结果。可以同时运行多个自动化,因此,有时打开.xlsm时,可能会打开其他exc

这是我的原稿 它被回答了,当我接受答案时,我没有意识到xlsm文件仍然没有关闭

这是一个巨大问题的原因,因为当有一个打开的ghost.xlsm文件时,打开的下一个.xlsm文件不会运行启动宏。因此,我所有的自动操作都失败了,因为以前的.xlsm存储在内存中。

所以,我计划运行许多自动装置。它们的相似之处在于运行MS Access程序,然后从MS Access程序打开.xlsm,然后MS Access程序通过电子邮件发送结果。可以同时运行多个自动化,因此,有时打开.xlsm时,可能会打开其他excel文件或其他.xlsm文件,或者根本没有

由于某种原因,使用下面的代码,.xlsm文件无法完全关闭。它在任务栏中不可见,我知道它仍然在某处打开的唯一原因是进入VBA项目窗口(参见下面的屏幕截图)

这是一个屏幕截图,显示了我的任务栏上的内容以及VBA项目中的内容。

而且,由于某些原因,当文件像这样被重影时,下一个.xlsm文件不会运行启动宏。如果我关闭Excel,然后打开.xlsm文件,启动宏运行正常

以下是我正在使用的代码

这就是从MS Access打开excel文件的原因

Set ExcelApp = CreateObject("Excel.Application")
Set ExcelWbk = ExcelApp.Workbooks.Open(CurPath & "CurrentProjects.xlsm", True)
ExcelApp.Visible = False
ExcelApp.Quit
Set ExcelWbk = Nothing
Set ExcelApp = Nothing
这是启动宏。这将放置在“此工作簿”模块中

Private Sub Workbook_Open()
    CreateReporting
End Sub
这是excel文件中的代码

Option Explicit

Public Sub CreateReporting()

    Dim MonthlyPath As String, CurPath As String, ProjectDate As String, FullName As String, CurLastRow As Long, CurRowNum As Long
    Dim i     As Range, CurCell As Variant, CurRange As Range
    Dim wbkM  As Workbook, wbkNewFile   As Workbook, wksReportDates As Worksheet, wksCopyFrom   As Worksheet, wksCopyTo   As Worksheet, wks3  As Worksheet
    Dim rngCopyFrom As Range, rngCopyTo As Range

    CurPath = ThisWorkbook.Path & "\"
    
    With ThisWorkbook.Sheets("QReportDates")
        MonthlyPath = .Range("A2").Value
        ProjectDate = .Range("B2").Value
    End With
    
    FullName = ProjectDate & " Current Projects.xlsx"

    Set wbkM = Workbooks("CurrentProjects.xlsm")
    Set wksReportDates = wbkM.Sheets("QReportDates")
 
    If Dir(MonthlyPath, vbDirectory) = "" Then
        MkDir (MonthlyPath)
    End If

    Set wbkNewFile = Workbooks.Add
    wbkNewFile.SaveAs MonthlyPath & FullName

    Set wbkNewFile = Workbooks(FullName)

    wbkM.Sheets("TEMPLATEReporting").Copy after:=wbkNewFile.Sheets(1)
    wbkNewFile.Sheets(2).Name = "Current Projects"

    With wbkNewFile
        .Sheets("Sheet1").Delete
    End With

    Set wksCopyFrom = wbkM.Sheets("QCurrentProjects")
    Set wksCopyTo = wbkNewFile.Sheets("Current Projects")
                                                           
    With wksCopyFrom
        CurLastRow = .Cells(Rows.Count, "A").End(xlUp).Row
        Set rngCopyFrom = .Range("A2:K" & CurLastRow)
    End With
                         
    With wksCopyTo
        Set rngCopyTo = .Range("A2:K" & CurLastRow)
    End With
                        
    rngCopyTo.Value = rngCopyFrom.Value
    
    For Each i In wksCopyTo.Range("F2:F" & CurLastRow)
        With Worksheets(1)
            .Hyperlinks.Add Anchor:=Range("F" & i.Row), Address:=Range("F" & i.Row), TextToDisplay:=Range("C" & i.Row).Value
        End With
    Next
      
    wbkNewFile.Save
    wbkNewFile.Close
    Set wbkNewFile = Nothing
    Set wksCopyTo = Nothing
    Set rngCopyTo = Nothing
    Set wksCopyFrom = Nothing
    Set rngCopyFrom = Nothing
     
    wbkM.Worksheets("QReportDates").Delete
    wbkM.Worksheets("QCurrentProjects").Delete
    wbkM.Save
    wbkM.Close
    
    Set CurCell = Nothing: Set CurRange = Nothing: Set wbkM = Nothing: Set wbkNewFile = Nothing: Set wksReportDates = Nothing:  Set wksCopyFrom = Nothing: Set wksCopyTo = Nothing
End Sub
请注意,在此版本中,我将关闭excel中的.xlsm文件

wbkM.Close
但我也尝试过从MS Access中关闭它,并从Excel中删除wbkM.Close。同样的结果

Set ExcelApp = CreateObject("Excel.Application")
Set ExcelWbk = ExcelApp.Workbooks.Open(CurPath & "CurrentProjects.xlsm", True)
ExcelApp.Visible = False 
ExcelWbk.Close 
ExcelApp.Quit    
Set ExcelWbk = Nothing
Set ExcelApp = Nothing
在@Parfait的帮助下(或者说,他用3个线程为我解决了这个问题),现在一切都变得完美了。张贴代码以供参考

这就是打开xlsm文件、运行宏然后关闭xlsm文件的过程


使用此代码,我不再有MS Access代码中的ghost xlsm文件

,您不会关闭Excel工作簿。另外,您不运行Excel宏。我不是在Excel中关闭它吗?但我尝试了两种方法,我尝试将您的行保留在ms access中,并从excel中删除wbkm.close。一样。这个宏是在这个工作簿中调用的,我没有发布那个部分。但它工作正常,它会自动打开并运行,只是不会关闭并保存在内存中。那么下一个宏不会自动运行。但是,如果我从task manager中删除excel并打开该工作簿,则宏将在Startup上运行。请使用Access/excel之间的逐步过程编辑您的帖子。一开始什么是打开的还是关闭的?我假设MS Access是在所有Excel工作簿和应用程序关闭的情况下打开的。完成,请立即查看:)实际上,底层工作簿挂起宏的一个原因是提示等待用户,例如警告工作簿将替换现有工作簿。为此,请在宏内部尝试关闭并结束将其重新打开。甚至为了提高效率而关机。
Set ExcelApp = CreateObject("Excel.Application")
Set ExcelWbk = ExcelApp.Workbooks.Open(CurPath & MainProjectName & ".xlsm", True)
ExcelApp.Visible = False
ExcelApp.Run "MainProcedure"
ExcelWbk.Close
ExcelApp.Quit
Set ExcelWbk = Nothing
Set ExcelApp = Nothing