[英]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.