我有一个.xlsm文件,我需要以非宏文件格式(.xlsx)保存一些工作表。 为此,我创建了以下代码。 第一部分将活动工作表(称为" CombinedRaw")保存为单独的文件" DATATRY.xlsx"。这将关闭活动文件,即我们不再在文件"数据检索9.xlsm",但" DATATRY.xlsx"相反,所以在删除新DATATRY文件中不必要的工作表之后,我打开工作簿数据检索9.xlsm,我最初再次启动它,并关闭DATATRY,这样在宏的末尾我就像以前一样。否则,VBA窗口将关闭,我必须手动关闭新文件,打开另一个文件,然后再次打开VBA开发人员。
您注意到我设法覆盖了Delete-Worksheet-Confirmation提示;但是,还有其他提示我无法以这种方式覆盖,因为我不想回答默认答案:
第一个是"以下功能无法保存在无宏工作簿中:...要继续保存,请单击是"。在这里我需要是,它也是默认答案。
但是,"名为...的文件已存在于此位置,是否要替换?"需要是,但默认是否。
删除工作表之后"此工作簿包含指向其他数据源的链接",因为它包含从Thomson Reuters数据库获取数据的公式。默认为"更新",但我想要"不要更新"。
然后再次"无法保存在无宏的工作簿中#34;,我需要默认的是。
是否有方法可以预定义应该给几个连续提示的不同答案?
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
或者,从文件夹中删除以前存在的文件,然后保存它在我看来就像一个粗暴的解决方法,但如果它有帮助,也许它更好?但这仍然无法解决非默认"更新"提示问题。
答案 0 :(得分:2)
你在这里做了一件非常错误的事情,当然你会在这个过程中收到警告。
这是你应该做的事情。
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
之后。