programing

다른 워크북을 연 후 Excel이 매크로를 완료하지 않음

testmans 2023. 7. 4. 21:46
반응형

다른 워크북을 연 후 Excel이 매크로를 완료하지 않음

저는 VBA가 명령을 실행하도록 하려고 합니다.

sImportFilePath = Application.GetOpenFilename(FileFilter:= _
"Excel Files (*.xls), *.xls", Title:="Choose The Source File")
Application.Workbooks.Open (sImportFilePath)
sImportFileName = FunctionGetFileName(sImportFilePath)

그리고 그것들은 내가 그 기능을 사용할 때 작동하지만, 내가 Ctrl+Shift+F 또는 다른 단축키를 사용할 때,Application.Workbooks.Open명령은 작동하지만 새 Excel 문서를 탐색한 다음 아무것도 수행하지 않습니다.그러나 개발자 탭에서 "Macros"를 열면 내 매크로를 선택하고 "Run"을 클릭하면 모든 것이 정상적으로 실행됩니다.

저는 실제로 이 정확한 문제에 부딪혔고 마침내 제 문제에 대한 해결책을 찾았습니다.

이것은 코드를 호출하는 데 사용하는 키보드 단축키의 단추입니다.

Excel에는 워크북을 열고 Shift 를 누를 때 코드가 실행되지 않도록 특별히 설계된 기능이 있지만, 안타깝게도 이 기능은 워크북을 여는 데에도 영향을 미칩니다.Workbook.OpenVBA를 통한 메소드이는 KB 기사 555263에서 Excel 2000 및 2003에 적용되어 언급되었지만, Excel 2010에서도 동일한 문제가 발생하여 2007년에도 영향을 미치고 있다고 생각합니다.

이 문제는 특히 프로그램 초기에 코드를 통해 워크북을 열려고 할 때 발생합니다.에 약에만.Workbook.OpenShift 버튼을 실제로 놓을 충분한 시간이 있기 전에 코드로 호출에 도달합니다. Excel은 코드 실행을 차단하려는 시도로 해석하고 프로세스를 중단합니다.그리고 제가 찾은 오류 메시지나 어떤 것도 없습니다.그냥 갑자기 멈춰요.

방법 방법은 코드가 한 후 될 때까지 기다리도록 강제하는 것입니다.Workbook.Open지휘권

기사에 따라 이 코드를 매크로에 추가하면 됩니다.

'Declare API
Declare Function GetKeyState Lib "User32" (ByVal vKey As Integer) As Integer
Const SHIFT_KEY = 16

Function ShiftPressed() As Boolean
'Returns True if shift key is pressed
    ShiftPressed = GetKeyState(SHIFT_KEY) < 0
End Function

Sub Demo()
    Do While ShiftPressed()
        DoEvents
    Loop
    Workbooks.Open Filename:="C:\MyPath\MyFile.xlsx"
End Sub

이Excel의 코드입니다. 은 Excel의 32비트 버전을 . 64비트 버전은 Excel의 32비트 버전을 참조하십시오.PtrSafeDeclare진술).

추가 코드를 추가하지 않으려면 ++ShiftSome Letter를 사용하여 매크로를 실행하지 않거나 다음을 실행하지 않는 것이 유일한 옵션입니다.Workbook.Open시작 후 Shift 버튼을 놓을 시간을 확보하기 위해 매크로의 뒤에 있는 명령(처음에는 오른쪽이 아님).

Workbook을 호출하기 전에 "DoEvents"에 단일 호출을 추가하는 것입니다.열기는 이미 효과를 발휘합니다.따라서 다음과 같은 스니펫이 작동합니다.

DoEvents
Workbooks.Open Filename:="C:\MyPath\MyFile.xlsx"

질문 이 코드 라인 이전에 여러 탭을 선택한 코드 라인이 있었습니까?저는 이것이 선택된 내내 시프트 키를 누르고 있는 것과 같다는 것을 발견했습니다.이 문제를 해결하기 위해 매크로 그룹 해제(단일 선택) 탭이 있었고 매크로가 작동하기 시작했습니다.

간단한 해결 방법은 VBA를 이동 없이 바로 가기 키에 할당하는 것입니다.저는 dafault Excel 단축키와 충돌이 더 많기 때문에 그렇게 하는 것을 별로 좋아하지 않습니다.그러나 Excel 2010에서는 다음 기사를 기반으로 다음과 같은 몇 가지를 사용할 수 있습니다.Ctrl+e, Ctrl+j, Ctrl+m, Ctrl+q.

프랑스 포럼에서 찾은 임시 솔루션: 선택한 워크북을 활성화하기 전에 아래의 ForEachWindDoEvents를 사용하십시오.

Sub Test()
    Application.ScreenUpdating = False
    Set w1 = Workbooks.Add(xlWBATWorksheet)
    Set w2 = Workbooks.Add(xlWBATWorksheet)
    Set w3 = Workbooks.Add(xlWBATWorksheet)
    Application.ScreenUpdating = True
    ForEachWinDoEvents
    w2.Activate
End Sub

Sub ForEachWinDoEvents()
Dim win As Window
  For Each win In Application.Windows
    DoEvents
  Next win
End Sub

언급URL : https://stackoverflow.com/questions/6959005/excel-doesnt-complete-macro-after-opening-another-workbook

반응형