16

以下を使用して、VBA を使用して Excel の新しいインスタンスを作成しようとしています。

Set XlApp = New Excel.Application

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

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

4

3 に答える 3

31

この問題をもう一度調べたところ、Application.Addins コレクションには、すべてのアドインが Tools->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
于 2009-04-30T12:45:53.180 に答える
6

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

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

于 2008-10-17T22:10:04.380 に答える
3

この問題に遭遇したが、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) { }
}
于 2013-06-06T18:43:14.020 に答える