2011-08-05 9 views
11

내가 명령 Excel에서 다른 통합 문서

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

해고 VBA를 얻으려고 열기 후 완료되지 매크로를합니까 그리고이 기능을 통해 단계 때 작동,하지만 난 핫키를 사용할 때 Ctrl 키 + Shift + F 또는 다른 단축키 인 경우 Application.Workbooks.Open 명령이 작동하지만 새 Excel 문서를 탐색 한 다음 아무 것도하지 않습니다. 그러나 개발자 탭에서 "매크로"를 열면 내 매크로를 선택하고 "실행"을 클릭하면 모든 것이 정상적으로 실행됩니다.

+0

당신은 그것이 "무엇이든"하지 않는다고 말합니다 - 당신은 무엇을 기대합니까? 아마도 게시 된 샘플 다음에 코드가 더있을 것입니다. FunctionGetFileName이란 무엇입니까? –

+0

예상되는 결과는 다음 줄 FunctionGetFileName이 실행되고 문서를 통해 계속 실행됩니다. FunctionGetFileName은 FilePath에서 FileName을 찾은 프로그램의 다른 곳에서 작성한 함수이지만 실행하지 않은 코드가 더 있습니다. 그러나 더 많은 실험을 통해 문제의 범위를 좁히고 이에 따라 문제를 수정했습니다. – soytsauce

+0

어떤 Excel 버전입니까? Ctrl + Shift + F를 사용하여 2007 년 나를 위해 작동합니다. –

답변

18

실제로이 정확한 문제가 발생하여 결국 내 문제의 해결책을 발견했습니다.

코드를 호출하는 데 사용하는 키보드 바로 가기에서 Shift 단추입니다.

명백하게 특별히 통합 문서가 열리고 시프트 키를 누르면,하지만 때 실행 코드를 방지하기 위해 설계된 엑셀의 기능 불행하게도 VBA를 통해 Workbook.Open 방법으로 통합 문서를 열고에도 영향을 끼친다. Excel 2003에 적용되는 KB Article 555263에 언급되었지만 Excel 2010에서도 동일한 문제가 발생하여 2007 년에도 영향을 미쳤습니다.

특히 프로그램 초기에 코드를 통해 통합 문서를 열려고 할 때 발생합니다. 실제로 Shift 단추를 놓을 충분한 시간이 있기 전에 코드에서 Workbook.Open 호출에 도달하면 Excel은 코드 실행을 차단하고 프로세스를 중단시키는 시도로 해석합니다. 그리고 오류 메시지 나 내가 찾은 것이 없습니다. 그것은 갑자기 멈춘다.

해결 방법/수정은 Workbook.Open 명령을 실행하기 전에 코드가 Shift 키가 해제 될 때까지 기다리는 코드입니다.

기사 당

, 당신의 매크로 코드를 추가하고 그것을 수행해야합니다

'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 

(참고 :이 코드는 엑셀의 32 비트 버전의 64 비트 버전을 사용해야합니다. Declare 문에 PtrSafe 특성). 당신이 여분의 코드를 추가하지 않으려면

, 당신의 유일한 옵션은 사용하지 있습니다 Ctrl 키 + 시프트 + 매크로를 실행하기 위해, 또는에서 나중에 Workbook.Open 명령을 넣어 일부 문자 매크로를 시작한 후 Shift 키를 놓을 시간을주기 위해 매크로 (처음부터 올바르지 않음)를 선택하십시오.

0

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

+1

안녕하십니까! 이 대답은 어떤 가치를 더합니까? 이 정확한 문제를 다른 해결 방법으로 자세히 설명하는 이미 [대답] (http://stackoverflow.com/a/19712974/923794)이 있습니다. 이전 질문에 답하려면 추가 가치를 제공하십시오. – cfi

1

Workbooks.Open을 호출하기 전에 "DoEvents"에 대한 단일 호출 만 추가하면 이미 트릭을 수행 할 수 있습니다.프랑스어 포럼에서 발견

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

임시 해결책 : 은 그래서 folloiwng 조각은 작동합니다 당신의 선택의 통합 문서를 활성화하기 전에 아래의 ForEachWinDoEvents 를 사용합니다.

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 
0

질문이 코드 줄 전에 언제든지 여러 탭을 선택 했습니까? 나는 이것이 그들이 선택되는 전체 시간에 Shift 키를 누르는 것과 같은 종류라는 것을 알았다. 이 문제를 해결하기 위해 매크로를 탭 해제 (단일 선택)하고 매크로가 작동하기 시작했습니다.

+0

SO에 오신 것을 환영합니다. 이 [사용법]을 읽어주십시오. – thewaywewere

관련 문제