2017-11-10 2 views
0

나는 한 곳에서 문서를 열고, 복사 및 편집 한 다음, 이전 문서로 돌아가서 매크로를 계속 사용해야하는 매크로 작업을하고 있습니다. 사용자가 문서를 선택할 수 있도록 실행하는 fileDialog가 있지만 문제는이 다음 문서를 활성화하여 ScreenUpdating을 사용하여 화면을 깜박이는 것입니다. Workbooks.Open 대신 사용할 수있는 새로운 문서가 활성화되지 않습니까? Workbooks.Open의 설정 활성화하지 못하도록 변경할 수 있습니까? 문서가 활성화 될 때 화면이 깜박 거리지 않게하는 방법은 무엇입니까? 다음은 fileDialog 코드와 각면의 몇 줄을 나타낸 것입니다.활성화하지 않고 매크로에서 문서를 여는 방법

Set fileDialog = Application.fileDialog(msoFileDialogFilePicker) 
Application.ScreenUpdating = False 
With fileDialog 
    .InitialFileName = "C:\Users\User\Documents" 
    .AllowMultiSelect = False 
    .Filters.Clear 
    .Title = dialogTitle 
    If .Show = False Then 
     Application.ScreenUpdating = True 
     MsgBox "No file chosen. Click Import Contact List to try again." 
     Exit Sub 
    End If 
    strPathFile = .SelectedItems(1) 
End With 
Set wbSource = Workbooks.Open(Filename:=strPathFile) 

모든 솔루션에 크게 감사하겠습니다.

+0

대상 문서에 매크로가 있습니까? 그렇다면 Application.EnableEvents = False/True (ScreenUpdating처럼)를 사용하면 도움이 될 수 있습니다. 나는 구체적으로 대상 문서에서 Workbook_Open에 대해 생각하고 있습니다. 또한 응용 프로그램 수준의 이벤트를 수신하는 경우 자체 통합 문서가 가로 챌 수있는 내용이기도합니다. – Excelosaurus

+0

문서에 매크로가 없으므로 Workbooks.Activate가 Application.ScreenUpdating = False를 무시하는 것처럼 보입니다. 난 그냥 그것을 밖으로 테스트 할 수있는 샘플을 만들어 :. '서브 뉴스() Application.ScreenUpdating 사용 = 거짓 통합 문서 ("Hours.xlsx")를 통합 문서 ("Book1.xlsm")를 활성화 Application.ScreenUpdating 사용을 활성화합니다. = True End Sub' Book1.xlsm은 방금 만든 문서이고 "Hours.xlsx"는 방정식이나 매크로 또는 기타없이 시간을 기록해야하는 문서입니다. 그러나 그것으로도 화면이 깜박입니다. –

+0

코드에 Activate가 없습니다 ... 샘플을 생성 했으므로'ScreenUpdating = False'로 깜박임을 얻을 수 없습니다. – Excelosaurus

답변

0

내 가정은 사용자가 파일을 열 열어두고 있지만, 만들 수 있도록 할 것입니다 귀하의 나중에 통합 문서가 열리므로 열린 파일은 나중에 백그라운드로 이동하여 나중에 이동할 수 있습니다. 당신은 몇 가지 짜증나는 깜박임을 보았고 대답을 구하기 위해 여기에 왔습니다.

동일한 Excel 세션에서 이미 열려있는 파일을 열 때 내가 설명한 동작을 재현 할 수있는 유일한 방법은입니다 (아래의 세 번째 사용 사례 참조). 코드가 방금 연 작업 서를 닫지 않으므로 처음 실행하면 아래의 유스 케이스 2에 있고 두 번째 실행하면 사용 사례 3이됩니다.

그러나 프로세스가 끝날 때 통합 문서를 닫으면 아래의 첫 번째 사용 사례에 해당되며 모두 정상이어야합니다.

누구나 케이스 2와 3을 사용하는 솔루션을 생각해 낼 수 있는지 봅시다.

처음 사용 사례는 일반적으로 깜박임을 소개하지 않습니다

Application.ScreenUpdating = False 
Application.EnableEvents = False 'For good measure. 
Set myWb = Application.Workbooks.Open("... path of some workbook that's not already open ...") 
'... Do stuff ... 
myWb.Close 
Application.EnableEvents = True 
Application.ScreenUpdating = True 

원하는대로 내가 행동 아래 다른 2 사용 사례를 만들 수 없습니다. 통합 문서 가 어떠한 플리커없이 끝 전술 프로세스 개방되지만 활성화되지 남겨 두어야 할 때

둘째 사용 사례이다.

Application.ScreenUpdating = False 
Application.EnableEvents = False 'For good measure. 
Set myWb = Application.Workbooks.Open("... path of some workbook that's not already open ...") 
'... Do stuff ... 
'myWb.Close 'Here, the workbook is left opened. 
ThisWorkbook.Activate 'Trying... 
Application.EnableEvents = True 
Application.ScreenUpdating = True 
ThisWorkbook.Activate 'Trying harder... 
'Be my guest... 
'Note: Application.OnTime eventually calling ThisWorkbook.Activate doesn't count! 

셋째 사용 사례는 괴짜이며, 아마도 무슨 일이 영업 이익에 미치는 영향 : 나는을 시도했습니다 무엇이든 , 열려있는 통합 문서 코드를를 떠나시 활성 하나가됩니다. 위의 두 번째 유스 케이스를 사용하지만 동일한 Excel 인스턴스에서 이미 열려있는 통합 문서 을 엽니 다. 작동 중에 깜박이는 후 (ScreenUpdating = False) 코드는 ThisWorkbook을 활성 상태로 유지합니다 (멋진!).

myWb.Windows(1).Visible = False, DoEvents으로 시도해 봤지만 아무 소용이 없습니다. 귀하의 의견을 환영합니다.

+0

와우, 나는 솔직히 당신이 문제를 생각한 것을 날려 버렸습니다. 나는 희망을 포기했지만 포기했습니다. 실제로 매크로는 사용자가 시트 이름을 입력 한 후에 문서를 열어야하기 때문에 실제로 문서를 열어 두었습니다. 열려있는 상태로 유지된다는 것을 알고 있으면 코드를 약간 수정 한 다음 사용자가 입력하기 전에 코드를 닫은 후 다시 엽니 다. 도와 줘서 고마워! –

0

당신은

Set wbSource = Workbooks.Add(trPathFile) 

Set wbSource = Workbooks.Open(Filename:=strPathFile) 
Workbooks(name of users workbook).Activate 

또는

는 희망이 도움이 시도 할 수 있습니다.

+0

나는 처음 시도했는데 화면을 false로 설정하여 업데이트하더라도 문서가 빠르게 깜박입니다.방금 두 번째 시도하고 이제 "컴파일 오류 : 명명 된 인수를 찾을 수 없습니다"오류가 발생했습니다. –

+0

두 번째 옵션을 편집했습니다. 그건 그렇고, 응용 프로그램에 무슨 문제가 있습니까? –

+0

편집 된 두 번째 옵션을 테스트했는데 더 이상 오류가 없지만 슬프게도 문제가 해결되지 않습니다. 문서가 여전히 활성화되어 화면이 깜박입니다. 응용 프로그램의 유일한 문제는 이것이 내가 내 상사에게주는 최종 제품이 될 것이며, 그가 그것에 대해 불평 할 것임을 알았습니다. –

0

통합 문서를 열면 통합 문서를 숨기거나 방금 열어 본 통합 문서를 표시 할 수 있도록 ThisWorkbook을 활성화 할 수 있습니다.

하위 OpenAndHide() 희미한 wbSource 통합 문서로 희미한의 FileDialog의 FileDialog 희미한 DIALOGTITLE으로 문자열로 희미한 strPathFile 문자열

Set FileDialog = Application.FileDialog(msoFileDialogFilePicker) 
dialogTitle = "Open And Hide" 

With FileDialog 
    .InitialFileName = "C:\Users\User\Documents" 
    .AllowMultiSelect = False 
    .Filters.Clear 
    .Title = dialogTitle 
    If .Show = False Then 
     Application.ScreenUpdating = True 
     MsgBox "No file chosen. Click Import Contact List to try again." 
     Exit Sub 
    End If 
    strPathFile = .SelectedItems(1) 
End With 
Set wbSource = Workbooks.Open(Filename:=strPathFile) 
ThisWorkbook.Activate 

'// Hide the workbook 
'strPathFile = GetFilenameFromPath(strPathFile) 
'Windows(strPathFile).Visible = False 

종료 하위

기능 GetFilenameFromPath로 (ByVal의 strPath 문자열로)로 문자열 '가장 오른쪽'\ ' '을 포함하지 않고 최대 개까지의 문자열의 문자를 반환합니다. 'C : \ WINNT \ win.ini를'반환 'WIN.INI'

If Right$(strPath, 1) <> "\" And Len(strPath) > 0 Then 
    GetFilenameFromPath = GetFilenameFromPath(Left$(strPath, Len(strPath) - 1)) + Right$(strPath, 1) 
End If 

최종 기능

+0

짐, 문제는 화면을 업데이트하지 않아도 문서를 열고 원래 문서로 돌아가서 활성화하면 화면이 깜박입니다. 나는 그 부분을 사라지게 할 방법을 찾지 못합니다. –