ここを見よ
officeデベロッパーセンター - OLEObjects オブジェクト (Excel)
https://docs.microsoft.com/ja-jp/office/vba/api/excel.oleobjects
業務で使う大量のエクセルがあり、チェックボックスがON(True)の場合、特定の処理がしたかったのでPowerShellでつらつら。
しかしチェックボックスがActiveXコントロールのだったため悩む。
ActiveXがOLEObjectsっぽいことに気がついて行き着きました。
例文がほとんど
Sheets("Sheet1").CheckBoxes(1)
等でフォームコントロール対象だったため1時間くらい悶々としてました。
VBAのお作法を知らないので余計にですね。
#ActiveXコントロールの CheckBox1 の状態取得
$isOn = $Targetsheet.OLEObjects("CheckBox1").object.value
OLEObjects("CheckBox1")からのobjectは自力では辿り着かなかったでしょう…
hoge.ps1
# Excelを操作する為の宣言
$excel = New-Object -ComObject Excel.Application
# 不可視化する
$excel.Visible = $false
# 既存のExcelファイルを開く
$TargetBook = $excel.Workbooks.Open("hoge.xlsx")
# シートを取得
$Targetsheet = $TargetBook.Worksheets.Item("シート名")
#CheckBox1 の状態取得
$isOn = $Targetsheet.OLEObjects("CheckBox1").object.value
if ($isOn){
#何らかの処理
}
# 上書き保存
$TargetBook.Save()
# Excelを閉じる
$excel.Quit()
ちなみに下記のように適当にワークシート.チェックボックスで打ち込んでも何も表示されないだけでエラーは出ない。
これも混乱したもとでした。
[DBG]: PS Microsoft.PowerShell.Core\FileSystem::\\foo\bar>> $Targetsheet.CheckBox1
[DBG]: PS Microsoft.PowerShell.Core\FileSystem::\\foo\bar>> $Targetsheet.CheckBox1.name
[DBG]: PS Microsoft.PowerShell.Core\FileSystem::\\foo\bar>> $Targetsheet.CheckBox1.hight