programing

VB 스크립트를 실행하는 동안 Excel의 모든 대화 상자를 사용하지 않도록 설정하시겠습니까?

telecom 2023. 6. 24. 08:47
반응형

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

반응형