有没有什么方法可以禁用DisplayAlerts只覆盖文件的情况?

我正在研究Excel的_Workbook.SaveAs API

如果有一个同名的文件,我需要经常更换。 不应该有一个对话框来问我是否要覆盖文件。

现在,代码是:

app->put_DisplayAlerts(LOCALE_USER_DEFAULT, VARIANT_FALSE); activeWorkbook->SaveAs(filePath, fileType, vtMissing, vtMissing, vtMissing, vtMissing, Excel::xlNoChange); app->put_DisplayAlerts(LOCALE_USER_DEFAULT, VARIANT_TRUE); 

问题是这将禁用所有警报。 我还想要其他警报。

例如,当用户尝试将macros保存为“.xlsx”格式的工作簿时,应该有一个警告对话框来告诉用户macros将不被包含。

有什么办法可以达到所有版本的Excel?

在此先感谢=]

在Excel VBA中,您只需执行以下操作:

 Excel.Application.DisplayAlerts = False 

这是我通常在通过现有文件保存文件时使用的代码。 我现在也想检查我想覆写的文件是否被另一个用户通过下面的函数打开(这是我从SO获得的):

  Enum IsFileOpenStatus ExistsAndClosedOrReadOnly = 0 ExistsAndOpenSoBlocked = 1 NotExists = 2 End Enum Function IsFileReadOnlyOpen(FileName As String) As IsFileOpenStatus 'ExistsAndClosedOrReadOnly = 0 'ExistsAndOpenSoBlocked = 1 'NotExists = 2 With New FileSystemObject If Not .FileExists(FileName) Then IsFileReadOnlyOpen = 2 ' NotExists = 2 Exit Function 'Or not - I don't know if you want to create the file or exit in that case. End If End With Dim iFilenum As Long Dim iErr As Long On Error Resume Next iFilenum = FreeFile() Open FileName For Input Lock Read As #iFilenum Close iFilenum iErr = Err On Error GoTo 0 Select Case iErr Case 0: IsFileReadOnlyOpen = 0 'ExistsAndClosedOrReadOnly = 0 Case 70: IsFileReadOnlyOpen = 1 'ExistsAndOpenSoBlocked = 1 Case Else: IsFileReadOnlyOpen = 1 'Error iErr End Select End Function 'IsFileReadOnlyOpen 

因此,当在Excel VBA中保存一个文件时,会出现如下所示的内容:

  Excel.Application.DisplayAlerts = False If IsFileReadOnlyOpen(myFilePathName) <> ExistsAndOpenSoBlocked Then Excel.ActiveWorkbook.SaveAs myFilePathName, , , , True End If Excel.Application.DisplayAlerts = True