2009-12-02 2 views
0

Excel의 응용 프로그램 수준 이벤트 및 프로세스는 응용 프로그램의 단일 인스턴스로 제한됩니다.Excel.exe의 Mutliple 인스턴스에서 Excel 추가 기능을 실행하는 방법

이전에는 사용자가 다음 코드를 사용하여 추가 기능을 실행할 때 둘 이상의 Excel 인스턴스를 열 수 없었습니다.

Private Sub KillDuplicateProcesses() 

    Dim objWMIService As Object 
    Dim colItems As Variant 
    Dim objItem As Object 
    Dim intCount As Integer 

    Set objWMIService = GetObject("winmgmts:\\.\root\cimv2") 
    Set colItems = objWMIService.InstancesOf("Win32_Process") 
    For Each objItem In colItems 
     intCount = intCount + Abs(LCase(objItem.Name) = "excel.exe") 
    Next 

    If intCount > 1 Then 
     MsgBox "Excel is already running.", vbCritical 
     Application.Quit 
    End If 

    Set objWMIService = Nothing 
    Set colItems = Nothing 

End Sub 

그러나 Excel의 여러 인스턴스가 실행되는 동안 추가 기능을 안전하게 실행하는 방법이 있다면 궁금합니다. 예를 들어

, 나는 VBA에서이 같은 것을 할 경우 :

Application.MoveAfterReturnDirection = xlDown 

이 변경 및 명령 모음 개체에 대한 변경이 동시에 자신의 창 각, 엑셀의 모든 인스턴스에 반영되어야한다.

감사합니다.

+0

이 질문이 제기 된 지 7 년 후 어느 시점에서 나는 VBA 용 "Setting App"을 만들었는데 여기서는 잘 작동 할 것이라고 생각합니다. 현재 어떤 장소를 업로드하지 않았거나, 누구나 원하는 사람 : [! [VBA App Setting form] (https://i.stack.imgur.com/kNmQD.jpg)] (https://i.stack.imgur.com/kNmQD.jpg) – Ross

답변

1

추가 기능이 레지스트리를 사용하여 유지하고 모든 Excel 세션에 적용 할 설정을 저장하는 것이 좋습니다. 그런 다음 addin은 workbook.activate와 같은 응용 프로그램 수준 이벤트를 사용하여 저장된 레지스트리 설정을 확인합니다.

+0

좋은 제안 감사합니다. 실제로 Excel이 응용 프로그램 수준 설정과 관련이 있습니다. 응용 프로그램을 초기화 할 때 가장 최근에 저장된 설정이 저장되고 레지스트리에서 가져옵니다. 불행히도 "모든" 응용 프로그램이 초기화 될 때 추가 기능에 대한 Workbook.Activate가 발생하기 때문에 응용 프로그램이 초기화되지 않습니다. 예를 들어 인스턴스가 두 개이고 리본을 최소화하면 리본이 다른 인스턴스에서도 최대화됩니다. 일들이 빠져 나올 수있다. 동기화하여 사용자를 혼란스럽게합니다. – Kuyenda

+0

통합 문서를 의미하지는 않았습니다. 추가 기능을 활성화했습니다. 통합 문서가 포커스를받을 때마다 실행되는 응용 프로그램 수준 이벤트를 사용해야한다는 의미였습니다. 어떤 상황에서 어떤 이벤트가 가장 적합한 지 테스트해야합니다. –

+0

http://www.cpearson.com/excel/AppEvent.aspx 응용 프로그램 수준 이벤트의 좋은 개요입니다. 제안은 좋은 생각이지만, 사용자가 응용 프로그램간에 포커스를 변경할 때마다 동기화해야 할 필요성에 따라 지저분해질 수 있습니다. 나는 지금 잠시 멈추고 사용자가 하나의 인스턴스를 사용하도록 강요하지만 감사합니다! – Kuyenda

1

추가 기능이 작동하도록 사람들이 새로운 Excel 인스턴스를 열지 못하게합니다! - 좋은 !!!!

찰스 아이디어가 좋다. 인스턴스 전체에서 전역 변수와 비슷하다. 마찬가지로 .ini 파일에 기록하고 매번 참조 할 수 있습니다.

현재 진행 상황에 따라 다르지만 모든 인스턴스에서 설정을 동일하게 유지 하시겠습니까? 어쨌든 각기 다른 설정을 원할 것입니다.

+0

Excel의 여러 인스턴스를 동시에 실행하는 것을 차단하기 전에 Excel에서 변경하고 다른 창으로 전환하여 해당 변경 내용이 반영되지 않아 사용자가 혼란스러워했습니다. 그들은 다른 창이 Excel의 다른 인스턴스라는 것을 인식하지 못했습니다. 이는 표준 기능뿐 아니라 내 추가 기능에 대한 것입니다. 그래서, 여러 인스턴스를 허용하는 경우 확실히 일관성있게 유지하고 싶습니다. 그렇지 않으면, 나는 "내가 그것을 최소화 한 후에 리본이 왜 다시 나타 났을 까?"와 같은 질문을 할 것입니다. 감사! – Kuyenda

+0

흥미로운 : 나는 내 addins의 사용자와 그 문제가 없었어요. –

관련 문제