VBA를 사용하여 새로운 인스턴스에서 Excel 2007 (OLE 및 BOND OBJECT 프레임 사용)에서 Excel 2007

StackOverflow https://stackoverflow.com/questions/839243

  •  22-07-2019
  •  | 
  •  

문제

VBA를 사용하여 Excel 2007의 새로운 인스턴스를 만드는 데 문제가 있습니다 (Access 2002).

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

Set myXL = CreateObject("Excel.Application")

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

이것은 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

AD 1 두 번째 프로세스 Excel.exe가 시작됩니다

AD 2 두 번째 프로세스에 무슨 일이 일어나고 있는지 확인하기 위해이 줄을 추가했습니다.

AD 3 Ole은 파일을 기존 Excel 인스턴스로 바인딩하고 두 번째 프로세스가 여기에서 죽입니다.

그래서 문제는 다음과 같습니다.

  1. Texcelobjframe.action = acoleActivate가 두 번째 프로세스를 죽이는 이유

  2. 객체 프레임을 강제로 두 번째 프로세스에서 Excel 파일을 활성화하는 방법

편집하다

여기에서 부분 설명을 찾았습니다 (명확한 해결책 없음) :

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

  1. Excel 인스턴스가 실행되지 않으면 Ole은 직접 또는 프로그래밍을 통해 객체에 액세스 할 때 Excel 인스턴스를 만듭니다.
  2. Excel 인스턴스가 이미 실행중인 경우 Ole 객체에서 사용하는 인스턴스입니다.

문제는 OLE 객체가 잘못된 Excel 인스턴스를 선택한다는 것입니다. 질문은 OLE을 특정 인스턴스에 가리키는 방법이 있는지 여부입니다.

여기에 설명 된 동일한 문제 (주어진 해결책 없음) :

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

도움이 되었습니까?

해결책

업데이트:
내 워크 스테이션과 다음에 기존 코드를 시도해 보았습니다.

Set myXL = CreateObject("Excel.Application")

당신이 요청하는대로 작동하는 것 같습니다.
하나의 프로세스를 열었고 그 라인을 실행하고 다른 프로세스를 만듭니다.

나는 조금 더 조사해 왔으며 이것이 Excel 2007의 약간의 기발한 것임을 밝혀 냈습니다.
내가보고있는 모든 것은 나를 창으로 돌아갑니다. 파일 유형 (바닥으로 오른쪽으로 스크롤) 또는 기재 이 상황에서 기본적으로 같은 것을 바꾸는 해킹.

VBA에서는 CreateNewkey 및 SetKeyValue로 레지스트리 키를 사용하여 플레이 할 수 있지만 그렇게하고 싶을지 확신 할 수 없습니다.

다른 팁

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

나는 개별 Excel 2007 인스턴스에서 여러 통합 문서를 열려고 할 때 비슷한 문제가있었습니다.

이것이 당신의 문제를 해결할 것인지는 모르겠지만, DDE (옵션, 고급, 일반, DDE를 사용하는 다른 응용 프로그램을 무시하지 않도록 Excel에게 말함으로써 문제를 해결했습니다. 이렇게하면 DDE를 기본적으로 사용하므로 Excel을 시작하는 Explorer의 모든 파일 유형을 변경해야합니다. 파일 옵션을 편집하고 "DDE 사용"을 선택 취소하고 끝에 "%1"을 추가하십시오. 명령 줄.

(실제로, 나는 그것이 하나의 Excel 인스턴스 만 만들어졌지만 여러 인스턴스가있는 원래 질문에 도움이되지는 않는 Andy의 답변에 대한 의견에 답할 수 있다고 생각합니다. ~이다 개장)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top