Excelがプログラムでインスタンス化されている場合のアドインの読み込み
-
03-07-2019 - |
質問
次を使用して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")