VBA:回答 "save as - overwrite" 提示(和其他)不使用默认选项
VBA: Answer "save as - overwrite" prompt (and others) NOT with default option
我有一个 .xlsm 文件,我需要从中以非宏文件格式 (.xlsx) 保存一些工作表。
为此,我创建了以下代码。
第一部分将名为 "CombinedRaw" 的活动工作表保存为单独的文件 "DATATRY.xlsx"。这将关闭活动文件,即我们不再在文件 "data retrieve 9.xlsm" 中,而是在 "DATATRY.xlsx" 中,因此在删除新 DATATRY 文件中不需要的工作表后,我打开工作簿数据检索 9.xlsm 我最初在其中重新开始,并关闭 DATATRY,这样在宏的末尾我就回到了之前的位置。否则,VBA window 将关闭,我必须手动关闭新文件,打开另一个文件,然后再次打开 VBA developer。
您注意到我设法覆盖了 Delete-Worksheet-Confirmation 提示;但是,还有其他提示我无法以这种方式覆盖,因为我不想用默认答案回答:
第一个是"the following features cannot be saved in Macro-free workbooks: ... to continue saving, click yes"。在这里我需要是,它也是默认答案。
但是,"A file named ... already exists in this location, do you want to replace?"需要是,但默认是否。
删除工作表后出现 "This workbook contains links to other data sources",因为它包含从 Thomson Reuters 数据库获取数据的公式。默认是 "Update",但我想要 "Don't update".
然后又是"cannot be saved in macro-free workbooks",这里我需要默认的是。
是否有方法可以预定义应针对多个连续提示给出的不同答案?
Sub Speichern()
ChDir ThisWorkbook.Path
'save as DATATRY.xlsx without macros
Worksheets("CombinedRaw").SaveAs Filename:= _
ThisWorkbook.Path & "\DATATRY.xlsx", FileFormat:=51, _
CreateBackup:=False
'delete other sheets in the new file, then close
Application.DisplayAlerts = False
Worksheets("Codes").Delete
Application.DisplayAlerts = True
'open "this" book again
Workbooks.Open Filename:=ThisWorkbook.Path & "\data retrieve 9.xlsm"
Workbooks("DATATRY.xlsx").Close SaveChanges:=True
End Sub
或者,从文件夹中删除以前存在的文件然后保存它在我看来是一种粗暴的解决方法,但如果有帮助,也许更好?但是这样还是解决不了非默认"update"提示的问题。
你在这里做了一件非常错误的事情,自然会在此过程中收到警告。
这是你应该做的。
Sub Speichern()
Dim w As Workbook
Set w = Workbooks.Add
ThisWorkbook.Worksheets("CombinedRaw").Copy Before:=w.Sheets(1)
Dim i As Long
Application.DisplayAlerts = False
For i = w.Sheets.Count To 2 Step -1
w.Sheets(i).Delete
Next
Application.DisplayAlerts = True
w.Close SaveChanges:=True, Filename:=ThisWorkbook.Path & "\DATATRY.xlsx"
End Sub
如果 CombinedRaw
的代码模块中没有代码,您将不会收到 xlsm 警告。如果这样做,您可能希望将其移出到一个模块中。
您仍然会收到覆盖警告,但只有那个警告。
如果您想抑制该警告,请将 Application.DisplayAlerts = True
移动到 w.Close
.
之后
我有一个 .xlsm 文件,我需要从中以非宏文件格式 (.xlsx) 保存一些工作表。 为此,我创建了以下代码。 第一部分将名为 "CombinedRaw" 的活动工作表保存为单独的文件 "DATATRY.xlsx"。这将关闭活动文件,即我们不再在文件 "data retrieve 9.xlsm" 中,而是在 "DATATRY.xlsx" 中,因此在删除新 DATATRY 文件中不需要的工作表后,我打开工作簿数据检索 9.xlsm 我最初在其中重新开始,并关闭 DATATRY,这样在宏的末尾我就回到了之前的位置。否则,VBA window 将关闭,我必须手动关闭新文件,打开另一个文件,然后再次打开 VBA developer。
您注意到我设法覆盖了 Delete-Worksheet-Confirmation 提示;但是,还有其他提示我无法以这种方式覆盖,因为我不想用默认答案回答:
第一个是"the following features cannot be saved in Macro-free workbooks: ... to continue saving, click yes"。在这里我需要是,它也是默认答案。
但是,"A file named ... already exists in this location, do you want to replace?"需要是,但默认是否。
删除工作表后出现 "This workbook contains links to other data sources",因为它包含从 Thomson Reuters 数据库获取数据的公式。默认是 "Update",但我想要 "Don't update".
然后又是"cannot be saved in macro-free workbooks",这里我需要默认的是。
是否有方法可以预定义应针对多个连续提示给出的不同答案?
Sub Speichern()
ChDir ThisWorkbook.Path
'save as DATATRY.xlsx without macros
Worksheets("CombinedRaw").SaveAs Filename:= _
ThisWorkbook.Path & "\DATATRY.xlsx", FileFormat:=51, _
CreateBackup:=False
'delete other sheets in the new file, then close
Application.DisplayAlerts = False
Worksheets("Codes").Delete
Application.DisplayAlerts = True
'open "this" book again
Workbooks.Open Filename:=ThisWorkbook.Path & "\data retrieve 9.xlsm"
Workbooks("DATATRY.xlsx").Close SaveChanges:=True
End Sub
或者,从文件夹中删除以前存在的文件然后保存它在我看来是一种粗暴的解决方法,但如果有帮助,也许更好?但是这样还是解决不了非默认"update"提示的问题。
你在这里做了一件非常错误的事情,自然会在此过程中收到警告。
这是你应该做的。
Sub Speichern()
Dim w As Workbook
Set w = Workbooks.Add
ThisWorkbook.Worksheets("CombinedRaw").Copy Before:=w.Sheets(1)
Dim i As Long
Application.DisplayAlerts = False
For i = w.Sheets.Count To 2 Step -1
w.Sheets(i).Delete
Next
Application.DisplayAlerts = True
w.Close SaveChanges:=True, Filename:=ThisWorkbook.Path & "\DATATRY.xlsx"
End Sub
如果 CombinedRaw
的代码模块中没有代码,您将不会收到 xlsm 警告。如果这样做,您可能希望将其移出到一个模块中。
您仍然会收到覆盖警告,但只有那个警告。
如果您想抑制该警告,请将 Application.DisplayAlerts = True
移动到 w.Close
.