簡體   English   中英

Excel在workbook.close上崩潰?

[英]Excel crashes on workbook.close?

我有一個VBA函數,當我運行它時會使其崩潰(“ Microsoft Excel已停止工作”),但是如果我在編輯器中逐行瀏覽,則可以正常工作。 我想用該功能打開另一個工作簿,更改給定工作表上的切片器,找到一個值,然后關閉新工作簿而不保存它。 我具有的功能如下:

Function ValueLookup()

Dim Check As Boolean
Dim NewBook As Workbook

Check = IsWorkBookOpen("C:\Location\Filename")
If Check = False Then
    Set NewBook = Workbooks.Open("C:\Location\Filename")
Else
    Set NewBook = Workbooks("Filename")
End If

NewBook.Activate
Worksheets("Sheetname").Activate

ActiveSheet.PivotTables("pivottable1")ManualUpdate = True

With ActiveWorkbook.SlicerCaches("Slicer_SlicerName")
    .ClearManualFilter
    .VisibleSlicerItemsList = Array("[Tablename].[Columnname].&[MyValue]")
End With

ActiveSheet.PivotTables("pivottable1").ManualUpdate = False

ValueLookup = ActiveSheet.Cells.Find(What:="*", _
                                     After:=Range("A1"), _
                                     LookAt:=xlPart, _
                                     LookIn:=xlFormulas, _
                                     searchorder:=xlByRows, _
                                     searchdirection:=xlPrevious, _
                                     MatchCase:=False)

If Check = False Then NewBook.Close savechanges:=False

End Function

(IsWorkBookOpen()來自檢測Excel工作簿是否已經打開 ,並且似乎沒有出現任何問題)。

似乎試圖關閉新工作簿是導致此問題的原因,並且如果在運行功能之前打開工作簿就沒有問題。 調用該函數的子例程通常會在excel崩潰(打開MsgBox供用戶輸入)之前,在函數之后執行該行。 我嘗試在每行之后添加Sleep 1000,並在最后一行之后添加DoEvents,但結果沒有變化。 我嘗試改變

NewBook.Close savechanges:= False

Application.Windows("NewBook").Close

沒有任何區別。 我也嘗試過用

If Check = False Then
    Cancel = True
    Application.OnTime Now, "Close_Xls"
End If

End Function

Sub Close_Xls()
    ThisWorkBook.Close savechanges:=False
End Sub

但這會在我的子程序完成后關閉錯誤的工作簿(我希望從中運行宏的原始工作簿)。 但是,它似乎確實可以在關閉錯誤的工作簿之前成功執行代碼,並且不會導致excel崩潰。

有什么建議么?

編輯:

現在看來可以正常工作了。 我更改了以下內容:

If Check = False Then NewBook.Close savechanges:=False

End Function

NewBook.Saved = True
    If Check = False Then
        Cancel = True
        Application.OnTime Now, "Close_Xls"
    End If

End Function

Sub Close_Xls()

    Workbooks("Filename").Close savechanges:=False

End Sub

謝謝!

Close_Xls()子項更改為以下內容將鎖定正確的工作表:

Sub Close_Xls()
    Workbooks("Filename").Close savechanges:=False
End Sub

關閉工作簿而不保存的另一種可行方法是使用:

NewBook.Saved = True

在關閉之前。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM