見出し画像

JenkinsでExcelVBAを動かす

※まだ書きかけ途中ですが公開します。随時、追記していきます。


実行プログラム構成

Jenkins
 → バッチファイル
  → PowerShellスクリプト
   → ExcelVBA
    → AccessVBA

試した動作環境

Windows7 
 Windows Power Shell 5.1のインストール実施 + Jenkins
Windows10、Windows11
 PowerSheelインストール済み + Jenkins

Jenkinsのインストール

JAVA JDKのインストール
 先にJDK17またはJDK21をインストールしておく
Jenkins本体のインストール
 Webサイトからダウンロードしてインストール
PowerShellプラグイン
 プラグイン選択時にPowerShellも入れておく

PowerShellのバージョン確認

パワーシェルを起動して

$PSVersionTable

参考サイト
http://memories.zal.jp/WP/blog/20180208_2959.html

最新版のPowerShellをダウンロードする

デスクトップにフォルダを作成しておく

C:\Windows\system32\config\systemprofile\Desktop

# (x64環境で32bit Officeを動かしている場合)
C:\Windows\SysWOW64\config\systemprofile\Desktop

JenkinsでPowershell用の設定(ポリシー)

どれかを設定するとよいみたい
Set-ExecutionPolicy RemoteSigned
Set-ExecutionPolicy Unrestricted
Set-ExecutionPolicy Unrestricted -Scope CurrentUser

(下記サイトも参照)

PowerShellでスクリプトを実行するとセキュリティエラーになるときの対策https://www.gesource.jp/weblog/?p=8203

実行ポリシー(Execution Policy)を確認・変更する方法


Jenkinsをローカルユーザーで実行

Jenkinsのサービスをsystemではなく、
任意のローカルユーザーで実行するようにした。

「Windows上のJenkinsを特定のユーザーで実行する」
http://iyemon018.hatenablog.com/entry/2017/01/25/080000

何故だっけ???
通常の処理では不要だけれど、
ExcelやAccessのOffice系を実行するには必要みたいです。
(次のセキュリティーの関係?)

エクセルマクロ実行可能なセキュリティにしておく

これもはまりやすい項目です。
Jenkinsをローカルユーザーで実行するように変更したあと、
そのユーザーでログインし、必ずExcelやAccessを実行しておくこと!
マクロ付きExcelの起動時に出てくる信頼済みドキュメントにしておかないと
Jenkinsでの実行時にエラーとなる

ネットワークドライブ不可

Jenkinsから実行した場合、
パワーシェル→ネットワークドライブ上のExcelが実行出来なかった
仮想ドライブを設定しても不可だった
※コマンドライン上からネットワークドライブ先のファイルも
 実行は出来たのに・・・

エクセルマクロでcsvファイルを読み込み時は
注意が必要

通常のエクセルマクロVBAであれば
workbook.open filename:="ファイル名.csv"で大丈夫だけど、
Jenkinsから実行する際は何故だかエラーとなる
csvファイルをテキストファイルとして読み込む関数が必要

アクセスのマクロは英語にしておく

エクセルVBAからAccessのマクロやVBAを呼び出すが、
何故だかデフォルトの名称「マクロ1」等で呼び出しに失敗したので
英語名に書き直した。
(バッチファイルからの手動での実行時は動作するのではまった)

Jenkins実行時にエラーになると、
プロセスが残って厄介だ

エラーが発生した後は、
タスクマネージャーでプロセスが残っていないことを確認する
残ったままでは副作用で別のエラーを誘発することがある


この記事が気に入ったらサポートをしてみませんか?