Excel 2016/2013运行SaveAs方法2次崩溃
我想创建几个新的工作簿。下面的VBA代码在Excel 365和2010中运行良好。但对于Excel 2013或2016,它第一次运行良好(并创建文件)。。。在第二次运行时,Excel崩溃,没有任何错误消息 如果我一步一步地运行它,我会发现是Excel 2016/2013运行SaveAs方法2次崩溃,excel,vba,Excel,Vba,我想创建几个新的工作簿。下面的VBA代码在Excel 365和2010中运行良好。但对于Excel 2013或2016,它第一次运行良好(并创建文件)。。。在第二次运行时,Excel崩溃,没有任何错误消息 如果我一步一步地运行它,我会发现是SaveAs行导致了崩溃 我也试图在保存之前删除该文件。要使用计时器 我试图修复Office,重新命名HKEY(身份),我试图在两个不同的窗口(7或10)上运行它。没有任何帮助:/ Sub ExtraireType() Dim shVentes As Work
SaveAs
行导致了崩溃
我也试图在保存之前删除该文件。要使用计时器
我试图修复Office,重新命名HKEY(身份),我试图在两个不同的窗口(7或10)上运行它。没有任何帮助:/
Sub ExtraireType()
Dim shVentes As Worksheet
Dim rngVentes As Range
Dim rngTypes As Range
Dim shNew As Worksheet
Dim wkbNew As Workbook
Dim strPath As String
Dim zaza As Range
Application.DisplayAlerts = False
Set shVentes = ThisWorkbook.Worksheets("Ventes")
Set rngVentes = shVentes.Range("A1").CurrentRegion
Set rngTypes = ThisWorkbook.Worksheets("Liste").Range("A2:A4")
strPath = ThisWorkbook.Path
For Each zaza In rngTypes
rngVentes.AutoFilter
rngVentes.AutoFilter field:=3, Criteria1:=zaza.Value
rngVentes.Copy
Set shNew = ThisWorkbook.Worksheets.Add
shNew.Paste
Application.CutCopyMode = False
shNew.Move
Set wkbNew = ActiveWorkbook
wkbNew.SaveAs strPath & "\Type" & zaza.Value & Format(Date, "yyyymmdd")
wkbNew.Close
Set shNew = Nothing
Set wkbNew = Nothing
Next zaza
Set rngVentes = Nothing
Set shVentes = Nothing
Set rngTypes = Nothing
Application.DisplayAlerts = False
End Sub
此代码在Excel 2010或2019/365中运行良好。但我必须在2013年或2016年使用它:(
我做错了什么?感谢您的帮助!您的代码崩溃的原因之一(在我的例子中,它崩溃了,Excel 2016),可能是因为您没有在结尾添加文件扩展名:
wkbNew.SaveAs strPath&“\Type”和zaza.Value和Format(日期,“yyyyymmdd”)
所以可能是这样:
wkbNew.SaveAs strPath&“\Type”和zaza.Value和Format(日期,“yyyymmdd”)和“.xlsx”
希望能有所帮助。您的代码崩溃(在我的例子中,Excel 2016崩溃)的原因之一可能是因为您没有在结尾添加文件扩展名:
wkbNew.SaveAs strPath&“\Type”和zaza.Value和Format(日期,“yyyyymmdd”)
所以可能是这样:
wkbNew.SaveAs strPath&“\Type”和zaza.Value和Format(日期,“yyyymmdd”)和“.xlsx”
希望能有所帮助。我也遇到了这个问题,并找到了一个解决方法-改用.SaveCopyAs 在下面的示例中,.SaveAs如果我一直打开Excel电子表格并删除结果文件,则会每秒崩溃一次Excel,而.SaveCopyAs则不考虑每次都保存。两者之间的唯一区别是.SaveAs具有更多的保存选项,而.SaveCopyAs的唯一选项是文件名
Private Sub SaveAsExcelFile(TempExcelFile As Workbook, _
NewFullFileName as string, _
Optional FileFormat As XlFileFormat = xlOpenXMLWorkbook, _
Optional CreateBackup As Boolean = False)
'
' created & last edited 2020-03-06 by Timothy Daniel Cox
'
' For this example it is assumed the new file name is valid and in .xlsx format
'
Dim NewFullFileName2 as string
NewFullFileName2 = Replace(NewFullFileName, ".xlsx", "2.xlsx")
Application.EnableEvents = False
TempExcelFile.SaveCopyAs Filename:=NewFullFileName 'doesn't crash here on 2nd run
TempExcelFile.SaveAs Filename:=NewFullFileName2, FileFormat:=FileFormat, _
CreateBackup:=False 'will crash here on 2nd run
Application.EnableEvents = true
End Sub
我仍然认为Excel中关于.SaveAs的问题存在缺陷,但是:
- 有一根长长的线 在蜿蜒之后,它有一个明显的分辨率,即链接但具有 下载文件以查看所做的更改-仅限他 似乎已更改输出目录并删除了 设置的文件格式冲突。IMO未解析 问题。
- 还有另一个类似的未解决的线程没有有用的答案
Private Sub SaveAsExcelFile(TempExcelFile As Workbook, _
NewFullFileName as string, _
Optional FileFormat As XlFileFormat = xlOpenXMLWorkbook, _
Optional CreateBackup As Boolean = False)
'
' created & last edited 2020-03-06 by Timothy Daniel Cox
'
' For this example it is assumed the new file name is valid and in .xlsx format
'
Dim NewFullFileName2 as string
NewFullFileName2 = Replace(NewFullFileName, ".xlsx", "2.xlsx")
Application.EnableEvents = False
TempExcelFile.SaveCopyAs Filename:=NewFullFileName 'doesn't crash here on 2nd run
TempExcelFile.SaveAs Filename:=NewFullFileName2, FileFormat:=FileFormat, _
CreateBackup:=False 'will crash here on 2nd run
Application.EnableEvents = true
End Sub
我仍然认为Excel中关于.SaveAs的问题存在缺陷,但是:
- 有一根长长的线 在蜿蜒之后,它有一个明显的分辨率,即链接但具有 下载文件以查看所做的更改-仅限他 似乎已更改输出目录并删除了 设置的文件格式冲突。IMO未解析 问题。
- 还有另一个类似的未解决的线程没有有用的答案
shNew.Move
和Set wkbNew=ActiveWorkbook
之间,需要给一些外部代码运行的机会。请尝试在shNew.Move
指令之后添加DoEvents
,看看是否有帮助。谢谢Mathieu,但仍然崩溃:(strPath和“\Type”的值是多少&zaza.Value和格式(日期,“yyyymmdd”)崩溃时。在该行之前使用Msgbox
查看值c:\Users\Philippe\Desktop\typegrossiste20191111在shNew.Move
和Set wkbNew=ActiveWorkbook
之间,需要给一些外部代码运行的机会。请尝试在shNew.Move之后添加DoEvents
代码>指令,看看是否有用。谢谢Mathieu,但仍然崩溃:(strPath&“\Type”&zaza.value和Format(Date,“yyyymmdd”)的值是多少
崩溃时。在该行之前使用Msgbox
查看值c:\Users\Philippe\Desktop\typegrossiste20191111,因此我尝试了shNew.Move'DoEvents Set wkbNew=ActiveWorkbook'Debug.Print strPath&“\Type”&zaza.Value&Format(Date,“yyyyymmdd”)'wkbNew.SaveAs strPath&\Type”&zaza.Value和Format(日期,“yyyymmdd”),FileFormat:=51
或wkbNew.SaveAs strPath&“\Type”&zaza.Value和Format(日期,“yyyymmdd”)&.xlsx”
但是……没有什么更好的,它在第二次运行时仍然崩溃。因此我尝试了shNew.Move'DoEvents Set wkbNew=ActiveWorkbook'Debug.Print strPath&“\Type”&zaza.Value&Format(Date,“yyyyymmdd”)'wkbNew.SaveAs strPath&“\Type”&zaza.Value&Format(Date,“yyyyymmdd”),FileFormat:=51
或wkbNew.SaveAs strPath&“\Type”&zaza.Value&Format(Date,“yyyyymmdd”)&.xlsx”
但是……没有更好的,它在第二次运行时仍然崩溃。它有帮助!仍然是文件格式的问题(xlsm=>xlsx),但它是什么;)ThxIt有帮助!仍然是文件格式的问题(xlsm=>xlsx)但事实就是这样;)Thx