自動変数を Excel VBA (ActiveSheet や ActiveCell など) で利用できるようにしようとしていますが、PowerShell でも「自動変数」として利用できます。PowerShell エンジンは Excel VSTO アドインでホストされ、Excel.Application は Globals.ThisAddin.Application として利用できます。StackOverflow でこのスレッドを見つけ、次のような PSVariable 派生クラスの作成を開始しました。
public class ActiveCell : PSVariable
{
public ActiveCell(string name) : base(name) { }
public override object Value
{
get
{
return Globals.ThisAddIn.Application.ActiveCell;
}
}
}
public class ActiveSheet : PSVariable
{
public ActiveSheet(string name) : base(name) { }
public override object Value
{
get
{
return Globals.ThisAddIn.Application.ActiveSheet;
}
}
}
インスタンスを現在の POWERShell セッションに追加します。
runspace.SessionStateProxy.PSVariable.Set(new ActiveCell("ActiveCell"));
runspace.SessionStateProxy.PSVariable.Set(new ActiveSheet("ActiveSheet"));
これは機能し、PowerShell のこれらの変数を $ActiveCell および $ActiveSheet として使用できます (それらの値は、Excel のアクティブ シートまたはセルの変更として変化します)。次に、ここでPSVariable のドキュメントを読んで、これを見ました。
「このクラスから派生するための確立されたシナリオはありません。プログラムでシェル変数を作成するには、このクラスのインスタンスを作成し、PSVariableIntrinsics クラスを使用して設定します。」
私は PSVariable から派生していたので、提案されたものを使用しようとしました:
PSVariable activeCell = new PSVariable("ActiveCell");
activeCell.Value = Globals.ThisAddIn.Application.ActiveCell;
runspace.SessionStateProxy.PSVariable.Set(activeCell);
これを使用すると、PowerShell セッションに $ActiveCell が表示されますが、Excel でアクティブ セルを変更しても値は変わりません。
PSVariable ドキュメントからの上記のコメントは、私が心配する必要があるものですか、それとも PSVariable 派生クラスの作成を続行できますか? Excel グローバルを PowerShell で使用できるようにする別の方法はありますか?