我创建了一个xlam
(Excel 2007加载项)文件来处理各种文件的操作。我试图在xlam
文件中编写一个过程,从已打开的xlsm
文件中删除一些工作表,并将其保存为xlsx
(即没有宏)。
到目前为止,我唯一可靠的做法就是在我到达.SaveAs
电话时崩溃Excel。崩溃来自Windows对话框,声明:
Microsoft Office Excel已停止工作,Windows可以尝试恢复您的信息并重新启动该程序。 [重新启动程序] [调试程序]
在我保存到的文件夹中,每次崩溃后,我都会在它尝试保存到的文件夹中留下一个临时文件(例如文件名: 7A275000 ,大小为:0)。 / p>
对于后人来说,我尝试了一些事情,但都导致了同样的崩溃:
wb.SaveAs
后跟wb.Activate
ActiveWorkbook.SaveAs
。
FileFormat:=xlOpenXMLWorkbook
和FileFormat:=xlWorkbookNormal
.SaveAs
调用周围添加了一个错误捕获语句(它没有捕获任何错误,并且崩溃的Excel也是如此)最后一个奇怪的是当我尝试在ws.delete
调用之后对文件执行手动“另存为”(即自己导航到“另存为”菜单)时,Excel会以相同的方式崩溃。如果我自己手动删除工作表,那么请手动保存,它保存得很好。
以下是有问题的代码:
Public Sub ConvertToStagingFile(ByRef wb As Workbook)
Dim reWS As Object, reFILE As Object
Dim ws As Worksheet
Set reWS = CreateObject("VBScript.regexp")
reWS.IgnoreCase = True: reWS.Global = False: reWS.MultiLine = False
Set reFILE = CreateObject("VBScript.regexp")
reFILE.IgnoreCase = True: reFILE.Global = False: reFILE.MultiLine = False
reWS.Pattern = "^(home|location settings|date reference|[\w\s]{1,8} (rating|inquire) data|pkl data - \w{1,8}|verbs - \w{1,8})"
reFILE.Pattern = "\.xlsm$"
For Each ws In wb.Worksheets
If (ws.Visible = xlSheetHidden) Or (ws.Visible = xlSheetVeryHidden) Then
ws.Visible = xlSheetVisible
End If
Select Case True
Case reWS.test(ws.name)
'// Do Nothing
Case Else
Application.DisplayAlerts = False
ws.Delete
Application.DisplayAlerts = True
End Select
Next ws
ActiveWindow.TabRatio = 0.75
If (reFILE.test(Cached.getAdhocReportFull)) Then
Dim newName As Variant
newName = Application.GetSaveAsFilename(reFILE.Replace(Cached.getAdhocReportFull, ""), "*.xlsx")
If newName = False Then Exit Sub
wb.Activate
Application.EnableEvents = False
'// CODE RELIABLY CRASHES HERE
wb.SaveAs _
FileName:=newName, _
FileFormat:=xlOpenXMLWorkbook, _
CreateBackup:=False
Application.EnableEvents = True
End If
End Sub
非常感谢有关此问题的任何帮助。
答案 0 :(得分:0)
我有一个看似完全相同的问题:
由于我们的目的是替换工作表,以下工作原理:重命名旧工作表,创建新工作表(与旧工作表同名),删除旧工作表。似乎为我们工作。它为什么有效?不知道。