Excelがプログラムでインスタンス化されている場合のアドインの読み込み

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

質問

次を使用してVBAを使用してExcelの新しいインスタンスを作成しようとしています:

Set XlApp = New Excel.Application

問題は、Excelのこの新しいインスタンスが、通常Excelを開いたときに読み込まれるすべてのアドインを読み込まないことです...ユーザー指定のすべてのアドインを読み込むためのExcelアプリケーションオブジェクトに何かありますか?

特定のアドインを読み込むのではなく、ユーザーが自分で開いたように新しいExcelアプリケーションを動作させるため、ユーザーが選択したすべてのアドインのリストを実際に探しています通常、Excelを開くときに読み込まれます。

役に立ちましたか?

解決

この問題をもう一度調べたところ、Application.Addinsコレクションには、すべてのアドインが[ツール]-> [アドイン]メニューにリストされており、アドインがインストールされているかどうかを示すブール値が含まれているようです。だから今私にとってうまくいくように見えるのは、すべてのアドインをループすることです..Installed = trueの場合、.InstalledをFalseに設定してTrueに戻すと、アドインが適切に読み込まれるようです

Function ReloadXLAddins(TheXLApp As Excel.Application) As Boolean

    Dim CurrAddin As Excel.AddIn

    For Each CurrAddin In TheXLApp.AddIns
        If CurrAddin.Installed Then
            CurrAddin.Installed = False
            CurrAddin.Installed = True
        End If
    Next CurrAddin

End Function

他のヒント

CreateObject(" Excel.Application")を使用すると、残念ながら New Excel.Application を使用した場合と同じ結果になります。

必要なアドインは、ファイルパスごとに個別にロードする必要があります。 Application.Addins.Add(string fileName)メソッドを使用して名前を付けます。

この問題に遭遇したがJavaScriptを使用している他の人のために、この回答をここに残します。

少しの背景...私の会社には、JavaScriptを使用してExcelを起動し、その場でスプレッドシートを生成するサードパーティのWebアプリがあります。 [保存]ボタンの動作をオーバーライドするExcelアドインもあります。アドインでは、ファイルをローカルに保存するか、オンラインドキュメント管理システムに保存するかを選択できます。

Windows 7およびOffice 2010にアップグレードした後、スプレッドシートを生成するWebアプリに問題があることに気付きました。 JavaScriptがExcelでスプレッドシートを生成すると、突然[保存]ボタンが機能しなくなりました。 [保存]をクリックしても何も起こりません。

ここで他の回答を使用して、JavaScriptでソリューションを構築できました。基本的に、メモリにExcelアプリケーションオブジェクトを作成し、特定のアドインを再読み込みして、保存ボタンの動作を元に戻します。修正の簡易バージョンは次のとおりです。

function GenerateSpreadsheet()
{
    var ExcelApp = getExcel();
    if (ExcelApp == null){ return; }

    reloadAddIn(ExcelApp);

    ExcelApp.WorkBooks.Add;
    ExcelApp.Visible = true;
    sheet = ExcelApp.ActiveSheet;

    var now = new Date();
    ExcelApp.Cells(1,1).value = 'This is an auto-generated spreadsheet, created using Javascript and ActiveX in Internet Explorer';

    ExcelApp.ActiveSheet.Columns("A:IV").EntireColumn.AutoFit; 
    ExcelApp.ActiveSheet.Rows("1:65536").EntireRow.AutoFit;
    ExcelApp.ActiveSheet.Range("A1").Select;

    ExcelApp = null;
}

function getExcel() {
   try {
       return new ActiveXObject("Excel.Application");
   } catch(e) {
       alert("Unable to open Excel. Please check your security settings.");
       return null;
   }
}

function reloadAddIn(ExcelApp) {
    // Fixes problem with save button not working in Excel,
    // by reloading the add-in responsible for the custom save button behavior
    try {
        ExcelApp.AddIns2.Item("AddInName").Installed = false;
        ExcelApp.AddIns2.Item("AddInName").Installed = true;
    } catch (e) { }
}

試してください:

Set XlApp = CreateObject(" Excel.Application")

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top