<h2 class="wp-block-heading"> インテリセンスを機能させるためのイニシャルコード (Excel)</h2>
<p>Excelのインテリセンスを機能させるためのイニシャルコード例</p>
<p>ポイントは、プロセスの解放を行わないこと</p>
<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="lang:ps decode:true " title="インテリセンス開始のためのイニシャルコード" >#オブジェクトを生成~、よく使うオブジェクトをいくつか実行
$msexcel = New-Object -ComObject "Excel.Application"
$msexcel.Visible = $true
$Wb = $msexcel.Workbooks.Add()
$ws = $Wb.Sheets(1)
$R = $ws.Range("A1")
$S = $ws.Cells(1,1)
# Excelを閉じる~プロセスを解放する までは行わない
# ここを実行すると、インテリセンスが機能しなくなる
#$msexcel.Quit()
#$msexcel = $null
#[GC]::Collect()
</pre></div>
<p> このコードを実行すると、意味もなくExcelが1ブック起動してしまうというデメリットがあるが、それ以上にPowerShellでのコーディング時に、Excelにかかわるインテリセンス(補完)が機能するという大きな大きなメリットが得られる。どうやら、PowerShell ISE 上でExcelオブジェクトのインスタンスが生成(実体化)されれば、生成したオブジェクトを利用してインテリセンスを表示できるようだ。</p>
<h2 class="wp-block-heading"> インテリセンスを機能させるためのイニシャルコード (Word) </h2>
<p> Wordも同様の手法でインテリセンスを機能させることができる。こちらはWordのインテリセンスを機能させるためのイニシャルコードの例 </p>
<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="lang:ps decode:true " title="インテリセンス開始のためのイニシャルコード(Word版)" >$msWord = New-Object -ComObject "Word.Application"
$msWord.Visible = $true
$d = $msWord.Documents.add()
$P = $d.Paragraphs
$R = $d.Range()
# Wordを閉じる~プロセスを解放する までは行わない
# ここを実行すると、インテリセンスが機能しなくなる
#$msWord.Quit()
#$msWord = $null
#[GC]::Collect()
</pre></div>
<p> このコードを実行すると、意味もなくWordが1ドキュメント起動してしまうというデメリットがあるが、それ以上にPowerShellでのコーディング時にWordにかかわるインテリセンス(補完)が機能するという大きな大きなメリットが得られる。 </p>
<p>考え方的には、Excel、WordだけでなくComObject全体的にできそうだ。</p>
<h2 class="wp-block-heading"> インテリセンスを機能させることのメリット・デメリット</h2>
<p>メリットは、とにかくVBAのようなコード補完がPowerShell上ですべて完結し、コーディングが楽になること。これは大きなメリットになる。これまで業務でVBAにはわりと深くかかわってきたので、PowerShell上で似たような実装ができるようになることは、スキルアップする上でも大切だ。</p>
<p> デメリットは、インテリセンスのために無駄なプロセス(オブジェクト)が生成されること。ただ手で消せばいいだけだけど。</p>
インテリセンスを機能させるためのイニシャルコード (Excel)
Excelのインテリセンスを機能させるためのイニシャルコード例
ポイントは、プロセスの解放を行わないこと
#オブジェクトを生成~、よく使うオブジェクトをいくつか実行
$msexcel = New-Object -ComObject "Excel.Application"
$msexcel.Visible = $true
$Wb = $msexcel.Workbooks.Add()
$ws = $Wb.Sheets(1)
$R = $ws.Range("A1")
$S = $ws.Cells(1,1)
# Excelを閉じる~プロセスを解放する までは行わない
# ここを実行すると、インテリセンスが機能しなくなる
#$msexcel.Quit()
#$msexcel = $null
#[GC]::Collect()
このコードを実行すると、意味もなくExcelが1ブック起動してしまうというデメリットがあるが、それ以上にPowerShellでのコーディング時に、Excelにかかわるインテリセンス(補完)が機能するという大きな大きなメリットが得られる。どうやら、PowerShell ISE 上でExcelオブジェクトのインスタンスが生成(実体化)されれば、生成したオブジェクトを利用してインテリセンスを表示できるようだ。
インテリセンスを機能させるためのイニシャルコード (Word)
Wordも同様の手法でインテリセンスを機能させることができる。こちらはWordのインテリセンスを機能させるためのイニシャルコードの例
$msWord = New-Object -ComObject "Word.Application"
$msWord.Visible = $true
$d = $msWord.Documents.add()
$P = $d.Paragraphs
$R = $d.Range()
# Wordを閉じる~プロセスを解放する までは行わない
# ここを実行すると、インテリセンスが機能しなくなる
#$msWord.Quit()
#$msWord = $null
#[GC]::Collect()
このコードを実行すると、意味もなくWordが1ドキュメント起動してしまうというデメリットがあるが、それ以上にPowerShellでのコーディング時にWordにかかわるインテリセンス(補完)が機能するという大きな大きなメリットが得られる。
考え方的には、Excel、WordだけでなくComObject全体的にできそうだ。
インテリセンスを機能させることのメリット・デメリット
メリットは、とにかくVBAのようなコード補完がPowerShell上ですべて完結し、コーディングが楽になること。これは大きなメリットになる。これまで業務でVBAにはわりと深くかかわってきたので、PowerShell上で似たような実装ができるようになることは、スキルアップする上でも大切だ。
デメリットは、インテリセンスのために無駄なプロセス(オブジェクト)が生成されること。ただ手で消せばいいだけだけど。
ライセンス:本記事のテキスト/コードは特記なき限り
CC BY 4.0 です。引用の際は出典URL(本ページ)を明記してください。
利用ポリシー もご参照ください。
コメント