我们有一个 xlsm 文件,它处理一些数据并最终将文件作为 xlsx 保存在不同的文件夹中。
之前保存为非宏工作簿时的保存提示有 3 个选项:“是”、“否”和“帮助”,默认是“是”意味着我们保存并丢弃代码,但现在提示有 4 个选项“返回” " 作为默认值,因此 vba 代码失败
?那么我们如何恢复旧的提示版本呢?
?或者,新提示中的默认选项可以是“保存和丢弃功能”吗?
(抱歉,我只有该提示的丹麦语版本,所以我的翻译可能不准确)
?你们中有人知道这个新提示来自哪里吗?它是否在 Application.Dialogs 集合中?如果是,它叫什么?
请注意,我不是在谈论第一个提示,而是在谈论第二个提示 - 在按“保存”按钮后
“以下功能无法保存在无宏工作簿中”(见下图)
这是从 3 个按钮改为 4 个按钮的按钮,默认选项为“后退”
该代码已运行多年,但现在 - 对于某些用户 - Excel 在尝试另存为无宏工作簿时显示不同的提示。 因此,设置 Application.DisplayAlerts = False 不起作用,因为它选择默认选项,在出现新提示的情况下会返回,然后代码中会出现错误
在出现此提示的计算机上,VBA 代码可以正常工作,因为“是”是默认选择:
在出现此提示的计算机上,VBA 代码会失败,因为“Gå tilbage”(=“返回”)是默认选择:
失败的保存部分的示例代码:
Sub saveas()
Dim fil As String, path As String
Dim wb As Workbook
Dim Nyfil As String
Set wb = ThisWorkbook
fil = wb.Name
path = wb.path
Nyfil = Replace(fil, ".xlsm", ".xlsx", , , vbTextCompare)
wb.Save
Application.DisplayAlerts = False
wb.saveas Filename:=path & "\" & Nyfil, FileFormat:=xlOpenXMLWorkbook
Application.DisplayAlerts = True
End Sub
仅当您的工作表模块中没有代码时,以下内容才有效,但也许它对您或其他人有帮助。该代码会将所有工作表复制到新工作簿中并保存该新工作簿。但是,复制工作表也会复制工作表中的代码,因此如果工作表包含代码,您将再次面临同样的问题。
如果您的工作簿包含隐藏工作表并且您也想复制它们,则必须暂时将它们设为可见,否则它们将不会被复制。
Sub copyAsMacrofreeWB()
Dim i As Long
ReDim sheetsVisible(1 To ThisWorkbook.Sheets.Count) As XlSheetVisibility
' Unhide all sheets
For i = 1 To ThisWorkbook.Worksheets.Count
sheetsVisible(i) = ThisWorkbook.Worksheets(i).Visible
Dim ws As Worksheet
ThisWorkbook.Worksheets(i).Visible = xlSheetVisible
Next
Dim newName As String
newName = Replace(ThisWorkbook.FullName, ".xlsm", "macrofree.xlsx")
ThisWorkbook.Sheets.Copy
Dim newWB As Workbook
Set newWB = ActiveWorkbook
newWB.SaveAs newName, FileFormat:=xlOpenXMLWorkbook
' Hide sheets
For i = 1 To ThisWorkbook.Worksheets.Count
ThisWorkbook.Worksheets(i).Visible = sheetsVisible(i)
newWB.Worksheets(i).Visible = sheetsVisible(i)
Next
End Sub