VBA:答案"另存为 - 覆盖"提示(和其他人)不是默认选项

时间:2015-09-16 09:19:30

标签: excel vba excel-vba default command-prompt

我有一个.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

或者,从文件夹中删除以前存在的文件,然后保存它在我看来就像一个粗暴的解决方法,但如果它有帮助,也许它更好?但这仍然无法解决非默认"更新"提示问题。

1 个答案:

答案 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之后。