VBA Excel实例没有';从MS Access打开时无法关闭-后期绑定仍然存在相同错误
这是我的原稿 它被回答了,当我接受答案时,我没有意识到xlsm文件仍然没有关闭 这是一个巨大问题的原因,因为当有一个打开的ghost.xlsm文件时,打开的下一个.xlsm文件不会运行启动宏。因此,我所有的自动操作都失败了,因为以前的.xlsm存储在内存中。 所以,我计划运行许多自动装置。它们的相似之处在于运行MS Access程序,然后从MS Access程序打开.xlsm,然后MS Access程序通过电子邮件发送结果。可以同时运行多个自动化,因此,有时打开.xlsm时,可能会打开其他excel文件或其他.xlsm文件,或者根本没有 由于某种原因,使用下面的代码,.xlsm文件无法完全关闭。它在任务栏中不可见,我知道它仍然在某处打开的唯一原因是进入VBA项目窗口(参见下面的屏幕截图) 这是一个屏幕截图,显示了我的任务栏上的内容以及VBA项目中的内容。 而且,由于某些原因,当文件像这样被重影时,下一个.xlsm文件不会运行启动宏。如果我关闭Excel,然后打开.xlsm文件,启动宏运行正常 以下是我正在使用的代码 这就是从MS Access打开excel文件的原因VBA Excel实例没有';从MS Access打开时无法关闭-后期绑定仍然存在相同错误,excel,vba,Excel,Vba,这是我的原稿 它被回答了,当我接受答案时,我没有意识到xlsm文件仍然没有关闭 这是一个巨大问题的原因,因为当有一个打开的ghost.xlsm文件时,打开的下一个.xlsm文件不会运行启动宏。因此,我所有的自动操作都失败了,因为以前的.xlsm存储在内存中。 所以,我计划运行许多自动装置。它们的相似之处在于运行MS Access程序,然后从MS Access程序打开.xlsm,然后MS Access程序通过电子邮件发送结果。可以同时运行多个自动化,因此,有时打开.xlsm时,可能会打开其他exc
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