Отключить все диалоговые окна в Excel при запуске сценария VB?

У меня есть некоторый код в VB, который сохраняет все файлы XLSM как XLSX. У меня уже есть код, который сделает это для меня, но диалоговые окна появляются для каждого действия. Это было хорошо для нескольких десятков файлов. Тем не менее, я собираюсь использовать это для сотен файлов XLSM одновременно, и я не могу просто сидеть за компьютером весь день, щелкая диалоговые окна снова и снова.

Код, который я попробовал, в значительной степени:

Application.DisplayAlerts = False

Хотя это не вызывает ошибку, это также не работает.

В полях отображается предупреждение о включении макросов, а также предупреждение о том, что при сохранении в формате XLSX файл всех макросов удаляется. Учитывая тип предупреждений, я подозреваю, что они ограничили отключение этих диалоговых окон из-за угрозы безопасности.

Поскольку я запускаю этот код в редакторе VB в Excel, возможно, есть ли опция, которая позволит мне отключить диалоговые окна для отладки?

Я также попробовал:

Application.DisplayAlerts = False       
Application.EnableEvents = False        
' applied code
Application.DisableAlerts = True
Application.EnableEvents = True

Ни один из тех не работал.

Редактировать:

Вот как выглядит код выше в моем текущем коде:

Public Sub example()
Application.DisplayAlerts = False
Application.EnableEvents = False

For Each element In sArray
    XLSMToXLSX(element)
Next element

Application.DisplayAlerts = False
Application.EnableEvents = False
End Sub

Sub XLSMToXLSX(ByVal file As String)
    Do While WorkFile <> ""
        If Right(WorkFile, 4) <> "xlsx" Then
            Workbooks.Open Filename:=myPath & WorkFile

            Application.DisplayAlerts = False
            Application.EnableEvents = False

            ActiveWorkbook.SaveAs Filename:= _
            modifiedFileName, FileFormat:= _
            xlOpenXMLWorkbook, CreateBackup:=False

            Application.DisplayAlerts = True
            Application.EnableEvents = True

            ActiveWorkbook.Close
        End If
        WorkFile = Dir()
    Loop
End Sub

Я также окружилFor петля, в отличие отActiveWorkbook.SaveAs линия:

Public Sub example()
For Each element In sArray
    XLSMToXLSX(element)
Next element
End Sub

Наконец я сдвинулApplication.DisplayAlerts вышеWorkbooks.Open линия:

Sub XLSMToXLSX(ByVal file As String)
    Do While WorkFile <> ""
        If Right(WorkFile, 4) <> "xlsx" Then
            Workbooks.Open Filename:=myPath & WorkFile

            Application.DisplayAlerts = False
            Application.EnableEvents = False

            ActiveWorkbook.SaveAs Filename:= _
            modifiedFileName, FileFormat:= _
            xlOpenXMLWorkbook, CreateBackup:=False

            Application.DisplayAlerts = True
            Application.EnableEvents = True

            ActiveWorkbook.Close
        End If
        WorkFile = Dir()
    Loop
End Sub

Ни одна из этих работ, а также.

Редактировать:

Я использую Excel для Mac 2011, если это поможет.

 NJP01 авг. 2014 г., 22:55
У меня уже есть рабочий код (который работает аналогично связанному коду, хотя мой повторяет цикл и выполняет сохранение таким образом), мне просто нужно отключить диалоговые окна.
 CactusCake01 авг. 2014 г., 22:42
Это может сработать:mrexcel.com/forum/excel-questions/...

Ответы на вопрос(5)

Решение: Макросы автоматизации

вы бы выиграли от использования утилиты автоматизации. Если бы вы использовали Windows PC, я бы порекомендовалAutoHotkey, Я не использовал утилиты автоматизации на Mac, ноэто спросить разные пост имеет несколько предложений, хотя ни один не кажется бесплатным.

Это не решение VBA. Эти макросы работают вне Excel и могут взаимодействовать с программами с помощью нажатий клавиш, движений мыши и щелчков.

По сути, вы записываете или пишете простой макрос автоматизации, который ожидает активизации диалогового окна «Сохранить как» в Excel, нажимает ввод / возврат для завершения действия сохранения и затем ожидает закрытия окна «Сохранить как». Вы можете настроить его на выполнение в непрерывном цикле, пока не завершите макрос вручную.

Вот простая версия скрипта Windows AutoHotkey, которая будет выполнять то, что вы пытаетесь сделать на Mac. Это должно дать вам представление о логике.

Пример макроса автоматизации: AutoHotkey
; ' Infinite loop.  End the macro by closing the program from the Windows taskbar.
Loop {

    ; ' Wait for ANY "Save As" dialogue box in any program.
    ; ' BE CAREFUL!
    ; '  Ignore the "Confirm Save As" dialogue if attempt is made
    ; '  to overwrite an existing file.
    WinWait, Save As,,, Confirm Save As
    IfWinNotActive, Save As,,, Confirm Save As
        WinActivate, Save As,,, Confirm Save As
    WinWaitActive, Save As,,, Confirm Save As

    sleep, 250 ; ' 0.25 second delay
    Send, {ENTER} ; ' Save the Excel file.

    ; ' Wait for the "Save As" dialogue box to close.
    WinWaitClose, Save As,,, Confirm Save As
}

е нескольких обновлений:

DoCmd.SetWarnings False

После запуска всех обновлений последний шаг в моем скрипте VBA:

DoCmd.SetWarnings True

Надеюсь это поможет.

Excel Macro Security - www.excelfunctions.net:

Безопасность макросов в Excel 2007, 2010 и 2013:

.....

Различные типы файлов Excel, предоставляемые в последних версиях Excel, проясняют, когда книга содержит макросы, что само по себе является полезной мерой безопасности. Тем не менее, Excel также имеет дополнительные параметры безопасности макросов, которые управляются через меню параметров. Это :

«ключить все макросы без уведомления»

Этот параметр не позволяет запускать макросы. Когда вы открываете новую книгу Excel, вас не предупреждают о том, что она содержит макросы, поэтому вы можете не знать, что по этой причине книга не работает должным образом.

«ключить все макросы с уведомлением»

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

«ключить все макросы, кроме макросов с цифровой подписью»

Этот параметр разрешает запуск макросов только из доверенных источников. Все остальные макросы не запускаются. Когда вы открываете новую книгу Excel, вас не предупреждают о том, что она содержит макросы, поэтому вы можете не знать, что по этой причине книга не работает должным образом.

«Включить все макросы»

Этот параметр позволяет запускать все макросы. Когда вы открываете новую книгу Excel, вас не предупреждают о том, что она содержит макросы, и вы можете не знать, какие макросы выполняются, пока у вас открыт файл.

Если вы доверяете макросам и можете их включить, выберите эту опцию:

«Включить все макросы»

и это диалоговое окно не должно отображаться для макросов.

Что касается диалогового окна для сохранения, то, заметив, что он работает в Excel для Mac 2011, я наткнулся на следующий вопрос о SO:StackOverflow - Подавить диалог при использовании VBA для сохранения макроса, содержащего файл Excel (.xlsm), в качестве файла, не содержащего макрос (.xlsx), Из этого удаление диалога не представляется возможным, за исключением, возможно, некоторого моделирования ввода с клавиатуры. Я бы отправил еще один вопрос, чтобы узнать об этом. Извините, я мог получить вас только на полпути. Другой вариант - использовать компьютер под управлением Windows с Microsoft Excel, хотя я не уверен, подходит ли вам этот вариант в этом случае.

 jordanhill12302 авг. 2014 г., 01:39
Похоже, возможно, проблема сExcel для Mac 2011, У меня нет этого приложения, но я посмотрю, смогу ли я придумать что-нибудь еще.
 jordanhill12302 авг. 2014 г., 16:58
@GSerg Отредактировано для удаления всего контента, не относящегося к вопросу ОП. Оставил исправление для удаления диалогового окна безопасности макроса и содержимого из дубликата.
 NJP01 авг. 2014 г., 23:21
Отключение макросов работало хорошо, но диалоговое окно «Сохранить» все еще появляется.
 GSerg02 авг. 2014 г., 08:50
@ jordanhill123 Ваш ответ очень длинный (поэтому он кажется уместным / полезным на первый взгляд для начинающих пользователей), но на самом деле ничто в вашем ответе не связано с проблемой, кроме Edit 3, где вы нашли дублирующий вопрос в переполнении стека , Ничто из того, что вы скопировали из других источников в свой ответ, не имеет отношения к проблеме ОП, и поэтому ответ вреден, потому что это заставит будущих читателей тратить много времени на обдумывание ваших предложений, которые на самом деле не связаны с проблема. Я проголосовал за удаление этого ответа.
 NJP02 авг. 2014 г., 01:04
Я не мог заставить этот пример работать, либо. Похоже, что в книге копирования также есть макросы, которые по-прежнему вызывают всплывающее окно сохранения.

я предлагаю

Application.AutomationSecurity = msoAutomationSecurityForceDisable

Не забудьте вернуть его по умолчанию, когда вы закончите

Application.AutomationSecurity = msoAutomationSecurityLow

Напоминание о том, что.SaveAs Функция содержит все необязательные аргументы. Рекомендую удалитьCreatBackup:= False как то не надо.

Я думаю, что самый интересный способ - создать объект рабочей книги и получить доступ к.SaveAs свойство таким образом. Я не проверял это, но вы никогда не используетеWorkbooks.Open оказаниеApplication.AutomationSecurity неприменимо. Возможно, экономия ресурсов и времени.

Тем не менее я смог выполнить следующее без каких-либо уведомлений в Excel 2013 Windows 10.

    Option Explicit

    Sub Convert()

    OptimizeVBA (True)  
    'function to set all the things you want to set, but hate keying in

    Application.AutomationSecurity = msoAutomationSecurityForceDisable  
    'this should stop those pesky enable prompts

    ChDir "F:\VBA Macros\Stack Overflow Questions\When changing type xlsm to 
    xlsx stop popup"

    Workbooks.Open ("Book1.xlsm")

    ActiveWorkbook.SaveAs Filename:= _
    "F:\VBA Macros\Stack Overflow Questions\When changing type xlsm to xlsx_ 
    stop popup\Book1.xlsx" _
    , FileFormat:=xlOpenXMLWorkbook

    ActiveWorkbook.Close

    Application.AutomationSecurity = msoAutomationSecurityLow 
    'make sure you set this up when done

    Kill ("F:\VBA Macros\Stack Overflow Questions\When changing type xlsm_ 
    to xlsx stop popup\Book1.xlsx") 'clean up

    OptimizeVBA (False)
    End Sub


    Function OptimizeVBA(ByRef Status As Boolean)

    If Status = True Then
        Application.ScreenUpdating = False
        Application.Calculation = xlCalculationManual
        Application.DisplayAlerts = False
        Application.EnableEvents = False
    Else
        Application.ScreenUpdating = True
        Application.Calculation = xlCalculationAutomatic
        Application.DisplayAlerts = True
        Application.EnableEvents = True
    End If

    End Function

Вы пытались использовать параметр ConflictResolution: = xlLocalSessionChanges в методе SaveAs?

Как так:

Public Sub example()
Application.DisplayAlerts = False
Application.EnableEvents = False

For Each element In sArray
    XLSMToXLSX(element)
Next element

Application.DisplayAlerts = False
Application.EnableEvents = False
End Sub

Sub XLSMToXLSX(ByVal file As String)
    Do While WorkFile <> ""
        If Right(WorkFile, 4) <> "xlsx" Then
            Workbooks.Open Filename:=myPath & WorkFile

            Application.DisplayAlerts = False
            Application.EnableEvents = False

            ActiveWorkbook.SaveAs Filename:= _
            modifiedFileName, FileFormat:= _
            xlOpenXMLWorkbook, CreateBackup:=False, _
            ConflictResolution:=xlLocalSessionChanges

            Application.DisplayAlerts = True
            Application.EnableEvents = True

            ActiveWorkbook.Close
        End If
        WorkFile = Dir()
    Loop
End Sub
 IGRACH13 сент. 2018 г., 19:55
На самом делеApplication.EnableEvents = False сделал трюк для меня. Он отключает все события / всплывающие окна.

Ваш ответ на вопрос