2011-10-27 2 views
3

Excel에 연결하여 통합 문서를로드하는 VB6/VBA 응용 프로그램이 있습니다. 그것은 오랜 기간 동안 큰 노력을했습니다. 우리는 이제 Excel 2010으로 업그레이드했으며 몇 가지 문제가 발생했습니다. 문제 해결 후 PowerPivot COM Add-In을 끄면 아무 문제없이 이전처럼 프로세스를 실행할 수 있습니다. 나는 정확한 이유를 찾고있는 동안 내 애플 리케이션을 위해 Add-In을 끌 수 있는지 알고 싶었다. 다음과 같이 Excel을로드합니다.VB6/VBA COM 추가 기능로드 허용 안 함

Set xlApp = CreateObject("Excel.Application") 
xlApp.Visible = False 

테스트 용 Excel 통합 문서에서 추가 기능을 나열하는 코드가 있습니다. 그러나 "Excel 추가 기능"만 나열된 유일한 것입니다. "COM 추가 기능"이 나열되지 않습니다.

Sub ListAddIns() 
    Dim CurrAddin As Excel.AddIn 
    Dim r As Long 
    Dim ws As Excel.Worksheet 

    Set ws = ActiveSheet 
    Cells.Select 
    Selection.ClearContents 
    Range("A1").Select 

    r = 1 
    For Each CurrAddin In Excel.Application.AddIns 
     ws.Cells(r, 1).Value = CurrAddin.FullName 
     ws.Cells(r, 2).Value = CurrAddin.Installed 
     ws.Cells(r, 3).Value = CurrAddin.Name 
     ws.Cells(r, 4).Value = CurrAddin.Path 
     ws.Cells(r, 5).Value = CurrAddin.progID 
     ws.Cells(r, 6).Value = CurrAddin.CLSID 

     r = r + 1 
    Next CurrAddin 

    MsgBox "Its done.", vbInformation 
End Sub 

나는 내 응용 프로그램에서 Excel 개체에로드에서 계속하는 데 필요한 COM 추가 기능을 참조 할 수있는 방법을 찾은 후. 도움이나 제안을 환영합니다.

감사

답변

1

이를 달성하기 위해 "매우"방법이 있는지 나도 몰라,하지만 당신은 그것을 이렇게 Excel을 시작하기 전에 "더러운"방법은 추가 기능에 대한 레지스트리 설정을 변경하는 것 로드되지 않습니다. HKCU \ Software \ Microsoft \ Office \ Excel \ AddIns \ LoadBehavior를 0 (자동으로로드하지 않음)으로 설정하면이 작업을 수행 할 수 있습니다.
그러나 사용자가 동의한다는 확신이 들지 않으면이 작업을 수행하지 않아야하므로 사용자가이 변경 사항에 동의하는지 사용자에게 확인하십시오.

당신은 당신의 코드에 매우 근접했다,가는 방법이 같은 것입니다 :

Sub ListAddIns() 
    Dim CurrAddin As **Office.COMAddIn** 
    Dim r As Long 
    Dim ws As Excel.Worksheet 

    Set ws = ActiveSheet 
    Cells.Select 
    Selection.ClearContents 
    Range("A1").Select 

    r = 1 
    For Each CurrAddin In **Excel.Application.COMAddIns** 
     ws.Cells(r, 1).Value = CurrAddin.Description 
     ws.Cells(r, 2).Value = CurrAddin.Application 
     ws.Cells(r, 3).Value = CurrAddin.GUID 
     ws.Cells(r, 4).Value = CurrAddin.Connect 
     ws.Cells(r, 5).Value = CurrAddin.Creator 
     ws.Cells(r, 6).Value = CurrAddin.progID 
     r = r + 1 
    Next CurrAddin 
    MsgBox "Its done.", vbInformation 
End Sub 

당신은로드하고 COM 추가 기능을 언로드 연결 속성을 사용할 수 있습니다.

+0

팁 주셔서 감사하지만 당신이 맞습니다, 그것은 극단적입니다. 이것은 내부 앱용이지만 사용자 레지스트리를 변경하는 것을 주저합니다. – sinDizzy

+0

나는 그것을 생각조차하지 않았다. 내가 그걸 줄께. – sinDizzy

+0

ok는 Excel 2007 및 Excel 2010에서 테스트되었으며 매력적으로 작동했습니다. 나는 이런 유형의 물체를 어디에서나 보았고 찾을 수 없었다. 도와 주셔서 감사합니다. – sinDizzy

0

동일한 문제가 있지만 더 쉬운 해결책이 있습니다. 그냥 엑셀에서 Powerpivot 추가 기능을 끈 다음 (다시 시작하지 않음) 다시 켜십시오 ... 문제가 해결되었습니다.

+2

그래, 그게 확실한 대답입니다. 여기서 모든 아이디어는 자동화 된 것이며 최종 사용자는 수동으로 수행 할 필요가 없다는 것입니다. – sinDizzy