Игнорировать поле «Хотите ли вы сохранить» при выходе из Excel

#vba #excel #vbscript

#vba #excel #vbscript

Вопрос:

У меня есть скрипт, который открывает файл Excel и запускает макрос, затем завершает работу с файлом. Поскольку файл находится в режиме только для чтения, и скрипт вносит временные изменения в файл, при вызове скрипта myExcelWorker.Quit() excel спрашивает, хочу ли я сохранить свои изменения, и я должен нажать «нет». Есть ли какой-либо способ выйти из программы и пропустить это поле?

 ' Create a WshShell to get the current directory
Dim WshShell
Set WshShell = CreateObject("WScript.Shell")

' Create an Excel instance
Dim myExcelWorker
Set myExcelWorker = CreateObject("Excel.Application") 

myExcelWorker.Visible = True

' Tell Excel what the current working directory is 
' (otherwise it can't find the files)
Dim strSaveDefaultPath
Dim strPath
strSaveDefaultPath = myExcelWorker.DefaultFilePath
strPath = WshShell.CurrentDirectory
myExcelWorker.DefaultFilePath = strPath

' Open the Workbook specified on the command-line 
Dim oWorkBook
Dim strWorkerWB
strWorkerWB = strPath amp; "BugHistogram_v2.xlsm"

Set oWorkBook = myExcelWorker.Workbooks.Open(strWorkerWB)

' Build the macro name with the full path to the workbook
Dim strMacroName
strMacroName = "CreateImagesButton_Click"
on error resume next 
   ' Run the calculation macro
   myExcelWorker.Run strMacroName
   if err.number <> 0 Then
      ' Error occurred - just close it down.
   End If
   err.clear
on error goto 0 

' oWorkBook.Save ' this is ignored because it's read only 

myExcelWorker.DefaultFilePath = strSaveDefaultPath

' Clean up and shut down
Set oWorkBook = Nothing

' Don’t Quit() Excel if there are other Excel instances 
' running, Quit() will 
' shut those down also
if myExcelWorker.Workbooks.Count = 0 Then
   myExcelWorker.Quit
End If

myExcelWorker.Quit()

Set myExcelWorker = Nothing
Set WshShell = Nothing
  

Ответ №1:

ActiveWorkbook.Close False (чтобы закрыть книгу)

Application.Quit (для выхода из Excel — не запрашивает сохранение изменений)

Из службы поддержки Microsoft Как отключить запрос «Сохранить изменения» при закрытии книги в Excel:

Чтобы принудительно закрыть книгу без сохранения каких-либо изменений, введите следующий код в модуле Visual Basic этой книги:

 Sub Auto_Close()
    ThisWorkbook.Saved = True
End Sub
  

Поскольку для свойства Saved установлено значение True, Excel отвечает так, как если бы книга уже была сохранена и никаких изменений не было
произошло с момента последнего сохранения.

Свойство DisplayAlerts программы может использоваться для той же цели. Например, следующий макрос отключает DisplayAlerts, закрывает активную книгу без сохранения изменений, а затем снова включает DisplayAlerts.

 Sub CloseBook()
    Application.DisplayAlerts = False
    ActiveWorkbook.Close
    Application.DisplayAlerts = True
End Sub
  

Вы также можете использовать аргумент SaveChanges метода Close.

Следующий макрос закрывает книгу без сохранения изменений:

 Sub CloseBook2()
    ActiveWorkbook.Close savechanges:=False
End Sub
  

Комментарии:

1. Спасибо! Я использовал метод CloseBook ().

Ответ №2:

Приведенный выше ответ предназначен для VBA — вы можете решить это в своем VBS напрямую, используя

 oWorkBook.Close False
Set oWorkBook = Nothing
  

вместо

 Set oWorkBook = Nothing