i具有一个VBA功能,该功能将在我运行时碰撞Excel(" Microsoft Excel已停止工作"),但是如果我跨越编辑器中的每一行,则可以正常工作。我想打开另一个功能的工作簿,更改给定表上的切片机,找到一个值,然后在不保存的情况下关闭新工作簿。我拥有的功能如下:
Function ValueLookup()
Dim Check As Boolean
Dim NewBook As Workbook
Check = IsWorkBookOpen("C:LocationFilename")
If Check = False Then
Set NewBook = Workbooks.Open("C:LocationFilename")
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 Workbook是否已经打开的,并且似乎没有任何问题)。
似乎试图关闭新工作簿是引起问题的原因,如果在我运行功能之前打开了工作簿,则没有问题。调用该函数的子例程通常会在excel崩溃之前直接执行该行(为用户输入打开MSGBOX)。我尝试在每行之后添加睡眠1000,并在最后一行之后添加doevents,而结果没有变化。我尝试更改
NewBook.Close savechanges:= False
to
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
to
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
关闭之前。