我正在Outlook VBA中为自己编写一种自行开发的票务系统,并且正在使用Excel存储所有持久性数据。我有一个用Outlook编写的函数,可以从.csv中获取一些数据并返回。一切正常,但是在关闭工作簿,退出应用程序并将该应用程序设置为空后,我仍然有一个Excel进程正在运行!这是我的代码:
Private Function GetNewTicketNumber() As Integer
Dim xlApp As Excel.Application
Set xlApp = New Excel.Application
With xlApp
.Visible = False
.EnableEvents = False
.DisplayAlerts = False
End With
Dim FileStr As String
Dim NumberBook As Workbook
Dim TheRange As Range
FileStr = "C:\OMGITSAPATH.csv"
Set NumberBook = Workbooks.Open(FileStr)
Set TheRange = NumberBook.Worksheets(1).Range("A1")
GetNewTicketNumber = TheRange.Value
TheRange.Value = TheRange.Value + 1
NumberBook.Save
NumberBook.Close
xlApp.Quit
With xlApp
.Visible = True
.EnableEvents = True
.DisplayAlerts = True
End With
Set xlApp = Nothing
End Function
我在这里做错什么了吗?我的问题类似于此处的问题,但我已禁用DisplayAlerts ...我该怎么做才能解决此问题?
尝试从xl_doesnt_quit完全限定对Excel的引用
这里提出的问题正是您所遇到的。此
Range("a1").Value = Range("a1").Value + 1
行使xl实例保持打开状态
该问题的最常见原因是对自动化应用程序的“全局”引用。不幸的是,在某些情况下,有可能直接引用自动化对象的实体(属性/方法/对象)。该引用实际上是调用应用程序的全局引用。因此,只要调用程序处于活动状态,参考就保持不变。因此,在调用者处于活动状态时,操作系统将不会结束自动化应用程序。
重新剪切下面的代码(它也使用后期绑定-排除了不合格的可能性)。
请改变您适合的道路。
码
Private Function GetNewTicketNumber() As Long
Dim xlApp As Object
Dim objWB As Object
Dim objWs As Object
Dim FileStr As String
FileStr = "C:\temp\test.xlsx"
Set xlApp = CreateObject("excel.application")
With xlApp
.EnableEvents = False
.DisplayAlerts = False
End With
Set objWB = xlApp.Workbooks.Open(FileStr)
Set objWs = objWB.Sheets(1)
GetNewTicketNumber = objWs.Range("A1")
objWs.Range("A1") = objWs.Range("A1") + 1
objWB.Save
objWB.Close
Set objWB = Nothing
xlApp.Quit
Set xlApp = Nothing
End Function
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句