web-dev-qa-db-ja.com

workbook.saveasを自動上書きで使用する方法

このセクションのコードでは、Excelは常に「ファイルは既に存在します。上書きしますか?」というプロンプトを出します。

Application.DisplayAlerts = False
Set xls = CreateObject("Excel.Application")
Set wb = xls.Workbooks.Add
fullFilePath = importFolderPath & "\" & "A.xlsx"

wb.SaveAs fullFilePath, AccessMode:=xlExclusive, ConflictResolution:=True   

wb.Close(True)

db.SaveAsを持っている場合、DisplayAlerts = Falseが常に既存のファイルを上書きするように要求するのはなぜですか?

前もって感謝します!

52
bob.mazzo

プロンプトセットを表示しない場合xls.DisplayAlerts = False

ConflictResolutionはtrueまたはfalseのプロパティではありません。xlLocalSessionChangesである必要があります-これは上書きプロンプトの表示とは関係ありません。

Set xls = CreateObject("Excel.Application")    
xls.DisplayAlerts = False
Set wb = xls.Workbooks.Add
fullFilePath = importFolderPath & "\" & "A.xlsx"

wb.SaveAs fullFilePath, AccessMode:=xlExclusive,ConflictResolution:=Excel.XlSaveConflictResolution.xlLocalSessionChanges    
wb.Close (True)
71
Sorceri

SaveAsを実行する前に、存在するファイルを削除することをお勧めします。

If Dir("f:ull\path\with\filename.xls") <> "" Then
    Kill "f:ull\path\with\filename.xls"
End If

DisplayAlertsをオフおよびオンに設定するよりも簡単です。さらに、コードクラッシュが原因でDisplayAlertsがオフのままである場合、同じセッションでExcelを操作すると問題が発生する可能性があります。

7
Uttam

意見の違いを分けるために

私が好む:

   xls.DisplayAlerts = False    
   wb.SaveAs fullFilePath, AccessMode:=xlExclusive, ConflictResolution:=True   
   xls.DisplayAlerts = True

..

0
Harry S