Ответ 1
В Access VBA я использовал это, чтобы отключить все диалоги при запуске обновлений:
DoCmd.SetWarnings False
После запуска всех обновлений последний шаг в моем VBA script:
DoCmd.SetWarnings True
Надеюсь, что это поможет.
У меня есть код в VB, который сохраняет все файлы XLSM как XLSX. У меня уже есть код, который будет делать это для меня, но диалоговые окна отображаются для каждого действия. Это было хорошо для нескольких десятков файлов. Тем не менее, я собираюсь использовать это на сотнях XLSM файлов одновременно, и я не могу просто сидеть за компьютером весь день, щелкая диалоговые окна снова и снова.
Код, который я пробовал, в значительной степени:
Application.DisplayAlerts = False
Хотя это не вызывает ошибки, оно также не работает.
Ящики предупреждают о включении макросов, а также предупреждают, что сохранение, поскольку XLSX разбивает файл всех макросов. Учитывая тип предупреждений, я подозреваю, что они запретили отключать эти диалоговые окна из-за угрозы безопасности.
Так как я запускаю этот код в редакторе Excel VB, возможно, есть опция, которая позволит мне отключить диалоговые окна для отладки?
Я также пробовал:
Application.DisplayAlerts = False
Application.EnableEvents = False
' applied code
Application.DisableAlerts = True
Application.EnableEvents = True
Ни один из них не работал.
Edit:
Вот что выглядит код выше в моем текущем коде:
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
Ни один из них не работает.
Edit:
Я использую Excel для Mac 2011, если это помогает.
В Access VBA я использовал это, чтобы отключить все диалоги при запуске обновлений:
DoCmd.SetWarnings False
После запуска всех обновлений последний шаг в моем VBA script:
DoCmd.SetWarnings True
Надеюсь, что это поможет.
От Excel Macro Security - www.excelfunctions.net:
Macro Security в Excel 2007, 2010 и 2013:
.....
Различные типы файлов Excel, предоставленные последними версиями Excel дает понять, когда рабочая тетрадь содержит макросы, поэтому это само по себе является полезной мерой безопасности. Однако Excel также имеет необязательный макрос параметры безопасности, которые контролируются через меню опций. Эти:
'Отключить все макросы без уведомления'
Этот параметр не позволяет запускать макросы. Когда вы открываете новый Excel, вы не будете предупреждены о том, что он содержит макросов, поэтому вы можете не знать, что это причина, по которой книга не работает должным образом.
'Отключить все макросы с уведомлением
Этот параметр запрещает запуск макросов. Однако, если есть макросов в рабочей книге, отображается всплывающее окно, чтобы предупредить вас, что макросы существуют и были отключены.
'Отключить все макросы, кроме макросов с цифровой подписью
Этот параметр позволяет запускать макросы из доверенных источников. Все остальные макросы не запускаются. Когда вы открываете новую книгу Excel, вы не предупреждает о том, что он содержит макросы, поэтому вы не можете быть в курсе что это причина, по которой рабочая книга работает не так, как ожидалось.
"Включить все макросы"
Этот параметр позволяет запускать все макросы. Когда вы открываете новый Excel в книге вы не предупреждены о том, что он содержит макросы и может не знать о запуске макросов, пока вы открываете файл.
Если вы доверяете макросам и согласны с их включением, выберите эту опцию:
"Включить все макросы"
и это диалоговое окно не должно отображаться для макросов.
Что касается диалогового окна для сохранения, отметив, что это было выполнено в Excel для Mac 2011, я столкнулся с следующим вопросом о SO, fooobar.com/questions/495118/.... Из него удаление диалогового окна кажется невозможным, за исключением, возможно, некоторых симуляторов ввода клавиатуры. Я бы поставил еще один вопрос, чтобы узнать об этом. Извините, я мог бы получить вас на полпути. Другой вариант - использовать компьютер Windows с Microsoft Excel, хотя я не уверен, что это вариант для вас в этом случае.
Похоже, вам будет полезно использовать утилиту автоматизации. Если бы вы использовали Windows-компьютер, я бы рекомендовал AutoHotkey. Я не использовал автоматические утилиты на Mac, но this Ask Different post имеет несколько предложений, хотя ни один из них не является бесплатным.
Это не решение VBA. Эти макросы работают за пределами Excel и могут взаимодействовать с программами с использованием штрихов клавиатуры, движений мыши и кликов.
В основном вы записываете или записываете простой макрос автоматизации, который ожидает, что диалоговое окно Excel "Сохранить как" станет активным, нажмите Enter/Return, чтобы завершить действие сохранения, а затем ждет закрытия окна "Сохранить как". Вы можете настроить его на непрерывный цикл, пока вы не закончите вручную макрос.
Вот простая версия Windows AutoHotkey script, которая выполнит то, что вы пытаетесь сделать на Mac. Это должно дать вам представление о вовлеченной логике.
; ' 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
}
Чтобы обойти подсказку Enable Macro, я предлагаю
Application.AutomationSecurity = msoAutomationSecurityForceDisable
Обязательно верните его по умолчанию, когда вы закончите
Application.AutomationSecurity = msoAutomationSecurityLow
Напоминание о том, что функция .SaveAs
содержит все необязательные аргументы. Я рекомендую удалить CreatBackup:= False
, поскольку это необязательно.
Наиболее интересным способом, я думаю, является создание объекта книги и доступ к свойству .SaveAs
таким образом. Я не тестировал его, но вы никогда не используете Workbooks.Open
рендеринг Application.AutomationSecurity
неприменимо. Возможно, экономия ресурсов и времени.
Сказано, что я смог выполнить следующие действия без каких-либо уведомлений о Windows Excel 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\Qaru Questions\When changing type xlsm to
xlsx stop popup"
Workbooks.Open ("Book1.xlsm")
ActiveWorkbook.SaveAs Filename:= _
"F:\VBA Macros\Qaru 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\Qaru 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