Excel应用程序未从Outlook VBA功能关闭

时间:2014-06-23 20:28:28

标签: excel outlook-vba

我在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

我在这里做错了什么吗?我的问题类似于here,但我已禁用DisplayAlerts ...我该怎么做才能解决这个问题?

1 个答案:

答案 0 :(得分:3)

尝试从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