亀の甲羅2

今日もまた朝とく起きて励まなん窓に明るきありあけの月

PowerShell でExcelのボタンに紐づけられたマクロを実行する方法 (「ボタンを押す」と同義のこと)

1.環境

PowerShellのバージョンは以下の通り。

PS C:\Users\hisabo> $PSVersionTable

Name                           Value
----                           -----
PSVersion                      5.1.18362.752
・・・以下、略・・・

Excelはよくわからないけど、Office365って書かれている奴。

2.はじめに

Qiitaや技術系ブログなどを調べればいくらでも出てくる情報だが、実際に自分で試行したときのメモとして記録を残す。

3.目指すところ

4.やってみよう

Excelのシートにボタンを配置

0.png まあ、ざっくりとこんな感じ。Book1.xlsmとして保存。

1.png ボタンのプロパティは、こんな感じ。ほとんどデフォルト。

VBEにてコードを書く

test.txtとファイルに追記形式で日時と「あほ」という文言を書き出すだけのコード。Privateサブルーチンだが、PowerShellから呼び出せるか?

Private Sub CommandButton1_Click()
    Dim fn
    
    fn = FreeFile    ' Get unused file
                
    Open ThisWorkbook.Path + "\test.txt" For Output As #fn
        Print #fn, Now & vbTab & "あほ"
    Close #fn

End Sub

PowerShellスクリプト

Excelを開いて、ボタン押して、Excel閉じる」を5秒間隔で10回繰り返すスクリプト

$FilePath = "C:\temp\Book1.xlsm"

$cnt = 0

do
{
    # start Excel
    $excel = New-Object -comobject Excel.Application

    $workbook = $excel.Workbooks.Open($FilePath)

    $excel.Visible = $true

    ## Here you can "click" the button
    $app = $excel.Application

    $app.Run("Sheet1.CommandButton1_Click")

    $excel.Quit()
    $excel = $null
    [System.GC]::Collect() # GC実行

    echo ("Count : " + $cnt)
    
    $cnt++

    #Sleep 5 sec
    Start-Sleep -Seconds 5

}While($cnt -lt 10)

実行結果

どうやら無事実行できたようだ。test.txtの内容は以下の通り。微妙に5秒間隔ではないが、良しとしよう。

2020/05/17 16:46:08  あほ
2020/05/17 16:46:15 あほ
2020/05/17 16:46:23 あほ
2020/05/17 16:46:30 あほ
2020/05/17 16:46:37 あほ
2020/05/17 16:46:44 あほ
2020/05/17 16:46:51 あほ
2020/05/17 16:46:58 あほ
2020/05/17 16:47:05 あほ
2020/05/17 16:47:12 あほ

終.獲得した知識