VB 스크립트를 실행하는 동안 Excel의 모든 대화 상자를 사용하지 않도록 설정하시겠습니까?
모든 XLSM 파일을 XLSX로 저장하는 코드가 VB에 있습니다.이 작업을 수행할 수 있는 코드가 이미 있지만 모든 작업에 대한 대화 상자가 나타납니다.이것은 수십 개의 파일에 대해 괜찮았습니다.하지만 수백 개의 XLSM 파일에 동시에 사용할 예정입니다. 대화 상자를 계속 클릭하여 하루 종일 컴퓨터 앞에 앉아 있을 수는 없습니다.
제가 시도한 코드는 다음과 같습니다.
Application.DisplayAlerts = False
오류가 발생하지는 않지만 작동하지도 않습니다.
이 상자에는 매크로 사용에 대한 경고가 표시되고 XLSX로 저장하면 모든 매크로의 파일이 삭제된다는 경고도 표시됩니다.경고 유형을 고려하면 보안 위험 때문에 대화 상자를 끄는 것을 제한한 것 같습니다.
엑셀의 VB 편집기에서 이 코드를 실행하고 있기 때문에 디버깅을 위해 대화 상자를 비활성화할 수 있는 옵션이 있습니까?
저도 해봤어요.
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
그것들 중 어느 것도 작동하지 않습니다.
편집:
도움이 된다면 Mac 2011용 Excel을 사용하고 있습니다.
충돌 해결 방법을 사용해 보셨습니까?=xlSaveAs 메서드에서 LocalSessionChanges 매개 변수를 변경하시겠습니까?
이와 같이:
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
Excel 매크로 보안 - www.excelfunctions.net :
Excel 2007, 2010 및 2013의 매크로 보안:
.....
최신 버전의 Excel에서 제공하는 다양한 Excel 파일 형식은 워크북에 매크로가 포함된 경우를 명확하게 하므로 이 자체가 유용한 보안 조치입니다.그러나 Excel에는 옵션 메뉴를 통해 제어되는 선택적 매크로 보안 설정도 있습니다.다음은 다음과 같습니다.
'알림 없이 모든 매크로 사용 안 함'
이 설정에서는 매크로를 실행할 수 없습니다.새 Excel 워크북을 열 때 매크로가 포함되어 있다는 사실에 대한 경고가 표시되지 않으므로 워크북이 예상대로 작동하지 않는 이유를 모를 수 있습니다.
'알림과 함께 모든 매크로 사용 안 함'
이 설정으로 인해 매크로가 실행되지 않습니다.그러나 워크북에 매크로가 있는 경우에는 매크로가 존재하며 사용할 수 없도록 설정되었음을 경고하는 팝업이 표시됩니다.
'디지털 서명된 매크로를 제외한 모든 매크로 사용 안 함'
이 설정에서는 신뢰할 수 있는 소스의 매크로만 실행할 수 있습니다.다른 모든 매크로는 실행되지 않습니다.새 Excel 워크북을 열 때 매크로가 포함되어 있다는 사실에 대한 경고가 표시되지 않으므로 워크북이 예상대로 작동하지 않는 이유를 모를 수 있습니다.
'모든 매크로 사용'
이 설정을 사용하면 모든 매크로를 실행할 수 있습니다.새 Excel 워크북을 열 때 해당 워크북에 매크로가 포함되어 있다는 사실에 대한 경고가 표시되지 않으며 파일이 열려 있는 동안 매크로가 실행되고 있다는 사실을 모를 수 있습니다.
매크로를 신뢰하고 활성화하는 데 문제가 없으면 다음 옵션을 선택합니다.
'모든 매크로 사용'
매크로의 경우 이 대화 상자가 표시되지 않아야 합니다.
저장을 위한 대화상자에 대해서는 Mac용 Excel 2011에서 실행되고 있다는 것을 확인한 후 VBA를 사용하여 Excel 파일(.xlsm)을 포함하는 매크로를 포함하지 않는 파일(.xlsx)로 저장할 때 SO, StackOverflow - Suppress 대화상자에서 다음과 같은 질문을 발견했습니다.키보드 입력 시뮬레이션을 제외하고는 대화 상자를 제거할 수 없습니다.저는 그것에 대해 문의하기 위해 다른 질문을 게시할 것입니다.중간까지만 데려다 드려서 죄송합니다.다른 옵션은 Microsoft Excel이 설치된 Windows 컴퓨터를 사용하는 것입니다. 이 경우 Windows 컴퓨터를 사용할 수 있는지는 잘 모르겠습니다.
솔루션:자동화 매크로
자동화 유틸리티를 사용하면 이점을 얻을 수 있을 것 같습니다.Windows PC를 사용하고 있다면 AutoHotkey를 추천합니다.Mac에서 자동화 유틸리티를 사용해 본 적이 없지만, 이 다양한 질문 게시물에는 몇 가지 제안 사항이 있지만 무료로 제공되는 게시물은 없습니다.
이것은 VBA 솔루션이 아닙니다.이러한 매크로는 Excel 외부에서 실행되며 키보드 스트로크, 마우스 이동 및 클릭을 사용하여 프로그램과 상호 작용할 수 있습니다.
기본적으로 Excel "다른 이름으로 저장" 대화 상자가 활성화될 때까지 기다렸다가 Enter/return을 눌러 저장 작업을 완료한 다음 "다른 이름으로 저장" 창이 닫힐 때까지 기다리는 간단한 자동화 매크로를 기록하거나 작성합니다.수동으로 매크로를 종료할 때까지 연속 루프에서 실행되도록 설정할 수 있습니다.
다음은 Mac에서 수행하려는 작업을 수행할 수 있는 Windows 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
}
매크로 사용 프롬프트를 피하기 위해 제안합니다.
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
액세스 VBA에서 여러 업데이트를 실행할 때 모든 대화 상자를 끄는 데 사용했습니다.
DoCmd.SetWarnings False
모든 업데이트를 실행한 후 VBA 스크립트의 마지막 단계는 다음과 같습니다.
DoCmd.SetWarnings True
이게 도움이 되길 바랍니다.
언급URL : https://stackoverflow.com/questions/25088225/disable-all-dialog-boxes-in-excel-while-running-vb-script
'programing' 카테고리의 다른 글
MongoDB: 논문에서 스키마 다이어그램을 어떻게 표현합니까? (0) | 2023.06.24 |
---|---|
열이 래핑되지 않도록 오라클 쿼리를 포맷하려면 어떻게 해야 합니까? (0) | 2023.06.24 |
여러 데이터 소스를 위해 봄에 액체 기반을 설정하는 방법은 무엇입니까? (0) | 2023.06.24 |
몽고로 풀링과 세트 추가를 동시에 합니다. (0) | 2023.06.24 |
SQL Server: Oracle에서 동일한 RowVersion (0) | 2023.06.24 |