2009-05-08 4 views
2

(Access 2002의) VBA를 사용하여 Excel 2007의 새 인스턴스를 만드는 데 문제가 있습니다.VBA (OLE 및 바운드 개체 틀 사용)를 사용하여 2007 년 새로운 인스턴스에서 excel 2007 열기 문제가 발생했습니다.

처음에 나는이 문제를 잘못 이해했으며 생각보다 복잡합니다.

Set myXL = CreateObject("Excel.Application") 

새 프로세스를 만듭니다 (나는 그렇지 않다고 생각했지만). 여전히 이상한 일이 일어나고 있습니다. OLE를 사용하여 SQL Server 데이터베이스에 Excel 파일을 저장합니다.

은 경계가 양식에 파일을 엑셀 기능입니다 :

Public Function OpenExcelObjFrame() As BoundObjectFrame 
    Dim myXL As Object 

    Set myXL = CreateObject("Excel.Application") '#1 

    Set gTempWorkbook = myXL.Workbooks.Add 
    myXL.Visible = True    '#2 

    DoCmd.OpenForm "Excel_OBJ" 
    Forms("Excel_OBJ").Visible = False 
    Forms("Excel_OBJ").RecordSource = "SELECT Excel_File FROM Excel_File_Obj;" 
    Set OpenExcelObjFrame = Forms("Excel_OBJ").Excel_File 
End Function 

컨텍스트 :

Dim tExcelObjFrame As BoundObjectFrame 
Set tExcelObjFrame = OpenExcelObjFrame() 

tExcelObjFrame.Verb = acOLEVerbOpen 
tExcelObjFrame.Action = acOLEActivate '#3 

등록 1 개 2 과정

광고 2 시작에 Excel.exe 두 번째 프로세스에서 어떤 일이 일어나는지 확인하기 위해이 줄을 추가했습니다.

tExcelObjFrame.Action = acOLEActivate가 2 위를 죽이고 왜

  1. :/

    그래서 문제가 :

    광고 3 OLE는 인스턴스를 엑셀 기존, 2 프로세스가 여기 살해에 파일을 경계 공정

    2 과정

에서 엑셀 파일을 활성화하기 위해 개체 틀을 강제하는 방법
  • 0

    내가 (명확한 솔루션) 여기에 부분적인 설명을 발견했습니다

    편집 :

    http://www.xtremevbtalk.com/showthread.php?t=292170

    1. 엑셀의 어떠한 인스턴스가 실행되지 않는 경우는, OLE는의 인스턴스를 생성 직접 또는 프로그래밍을 통해 개체에 액세스 할 때 Excel.
    2. Excel의 인스턴스가 이미 실행중인 경우이 개체는 OLE 개체에서 사용되는 인스턴스입니다.

    문제는 OLE 개체가 잘못된 Excel 인스턴스를 선택한다는 것입니다. OLE 특정 인스턴스를 가리키는 방법이 있으면 질문입니다.

    http://groups.google.com/group/microsoft.public.win32.programmer.ole/browse_thread/thread/9c4cde2a79453037

  • 답변

    1

    업데이트 :
    내 워크 스테이션에 기존 코드를하려고했는데 과 :

    Set myXL = CreateObject("Excel.Application") 
    

    같은 문제는 (해결책이 주어지지) 여기에 설명 당신이 요청하는대로 작동하는 것 같습니다.
    하나의 프로세스를 연 채로 실행 한 다음 해당 프로세스를 실행하고 다른 프로세스를 생성합니다.

    내가 조금 더 조사하고있다 그리고 그것은이 엑셀의 특질의 비트가 밝혀 2007 년
    내가보고 있었어요 모든 창문 file type 다시 날 리드 (오른쪽 하단으로 스크롤) 또는 registry 해킹이 있습니다.이 상황에서는 기본적으로 동일한 것을 변경합니다.

    VBA에서는 CreateNewKey 및 SetKeyValue를 사용하여 레지스트리 키로 재생할 수 있지만 그 작업을 수행 할 것인지 확실하지 않습니다.

    +0

    감사합니다. Andy, 예 시도했지만 excel.exe 프로세스가 하나 있습니다. – Pawel

    +0

    나는 하나의 파일을 수동으로 열고 그 코드를 사용하여 다른 파일을 열었지만 별도의 excel.exe 프로세스를 만들지 않았다는 것을 의미했습니다. – Pawel

    +0

    앤디 감사합니다. 문제를 과소 평가 한 것 같습니다. 팁을 가져 주셔서 감사드립니다. – Pawel

    0

    개별 Excel 2007 인스턴스에서 여러 통합 문서를 열려고 할 때 비슷한 문제가 발생했습니다. Excel 2003에서는 제대로 작동했지만 이제는 모두 동일한 인스턴스에서 열립니다.

    DDE (옵션, 고급, 일반, 다른 응용 프로그램 무시)를 사용하지 않도록 Excel에 지시하여 문제를 해결할 수 있을지 모르겠지만 해결했습니다. DDE 사용). 이 작업을 수행하는 경우 Excel에서 기본적으로 DDE를 사용하는 모든 파일 형식을 변경해야합니다. 파일 옵션을 편집하고 "Use DDE"를 선택 취소하고 "% 1"을 파일 끝에 추가하십시오 명령 행.

    (실제로, 그 단 하나 개의 엑셀 인스턴스가 생성되고 있었다 앤디의 대답에서 코멘트에 대답 할 수 있다고 생각하지만, 반드시 여러 인스턴스이 열립니다 원래의 질문, 도움)

    1
    Sub New_Excel() 
    
    'Create a Microsoft Excel instance via code using late binding. (No references required) 
    
    Dim xlApp As Object 
    
    Dim wbExcel As Object 
    
    'Create a new instance of Excel 
    
    Set xlApp = CreateObject("Excel.Application") 
    
    'Open workbook 
    
    Set wbExcel = xlApp.Workbooks.Open("Book1") 'or you may place here the complete name and path of the file you want to open upon the creation of the new instance 
    
    'Set the instance of Excel visible. (It's been hiding until now) 
    
    xlApp.visible = True 
    
    'Release the workbook and application objects to free up memory 
    
    Set wbExcel = Nothing 
    
    Set xlApp = Nothing 
    
    End Sub