PowerAutomateDesktopでExcel, PowerPoint, Wordにパスワードを設定する方法

# 1. 初めに

2024年11月時点（バージョン：2.49.00202.24289）のPowerAutomateDesktopではExcel, PowerPoint, Wordにパスワードを直接設定するフローがありません。

ファイル操作で自動的にこの3種類のファイルにパスワード設定したい場合は、「VBScriptの実行」を利用します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3931886/e8af8423-f628-6fa2-ebc6-5cf88d0a0dff.png)

「実行するVBScript」に書き込む内容は2.から記載していきます。
設定したいファイル種別ごとにこのフローを追加すればパスワードを付与することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3931886/ab5f0440-08d4-29b1-0d4f-ca551fd24398.png)

# 2.「実行するVBScript」に記入する内容
### Excel
```vb:Excelの場合
Dim objExcel
Dim objWorkbook

' Excelアプリケーションを作成
Set objExcel = CreateObject("Excel.Application")

'警告を無効化
objExcel.DisplayAlerts = False

' ワークブックを開く
Set objWorkbook = objExcel.Workbooks.Open("＜対象のExcelのファイルパス＞")

' パスワードを設定
objWorkbook.Password = "＜パスワード＞"

' ワークブックを保存
objWorkbook.SaveAs "＜対象のExcelのファイルパス＞"

'警告を有効化
objExcel.DisplayAlerts = Ture

' ワークブックを閉じる
objWorkbook.Close

' Excelアプリケーションを終了
objExcel.Quit

' オブジェクトを解放
Set objWorkbook = Nothing
Set objExcel = Nothing
```

### PowerPoint
```vb:PowerPointの場合
Dim objPowerPoint
Dim objPresentation

' PowerPointアプリケーションを作成
Set objPowerPoint = CreateObject("PowerPoint.Application")

' プレゼンテーションを開く
Set objPresentation = objPowerPoint.Presentations.Open("＜対象のExcelのファイルパス＞")

' パスワードを設定
objPresentation.Password = "＜パスワード＞"

' プレゼンテーションを保存
objPresentation.SaveAs "＜対象のExcelのファイルパス＞"

' プレゼンテーションを閉じる
objPresentation.Close

' PowerPointアプリケーションを終了
objPowerPoint.Quit

' オブジェクトを解放
Set objPresentation = Nothing
Set objPowerPoint = Nothing
```

### Word
```vb:Wordの場合
Dim objWord
Dim objDoc

' Wordアプリケーションを作成
Set objWord = CreateObject("Word.Application")

' ドキュメントを開く
Set objDoc = objWord.Documents.Open("＜対象のExcelのファイルパス＞")

' パスワードを設定
objDoc.Password = "＜パスワード＞"

' ドキュメントを保存
objDoc.SaveAs "＜対象のExcelのファイルパス＞"

' ドキュメントを閉じる
objDoc.Close

' Wordアプリケーションを終了
objWord.Quit

' オブジェクトを解放
Set objDoc = Nothing
Set objWord = Nothing
```

# 3. 変数の設定と利用する際の注意点
### 変数の設定
変数を設定する場合は＜対象のExcelのファイルパス＞と＜パスワード＞に設定すれば、複数ファイルのパスワードを設定する自動化できます。

（変数の設定例）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3931886/d0ce284f-112e-0783-7a30-a4c33fcf2e55.png)

### 利用する際の注意点
2\. に記載した3つのVBScriptを実行する際は、**非同期設定のフォルダ上のファイル**を対象に実行してください。
OneDrive上やOneDriveに同期設定しているデスクトップ/ドキュメント/ピクチャーでこのフローを動かそうとすると正常にパスワード設定できないことが稀に発生します。
必ず、非同期のローカルフォルダ上に保存しているファイルを対象に実行してください。

また、パスワード設定する際は秘匿化をしましょう。
下記の記事を参考にしてください。

https://qiita.com/spumoni/items/bc9aaa7e273eaf30c204

# 4.作成フロー例
下記にテストフローとしてExcelファイル（今回は拡張子xlsxに限定）にパスワード設定するフローを用意しました。
PowerAutoamteDesktopにペーストし実行してみてください。
フロー作成の際にイメージができればと思います。
（もし、バージョンが2.49.00202.24289以上でフロー作成時にエラーが出る場合はコメントお願いします。最新verに対応したフローへ修正いたします。）

```vb:テストフロー
Display.SelectFileDialog.SelectFile Title: $'''ファイルの選択''' FileFilter: $'''*.xlsx''' IsTopMost: False CheckIfFileExists: False SelectedFile=> SelectedFile ButtonPressed=> ButtonPressed
Display.InputDialog Title: $'''パスワード設定''' Message: $'''設定するパスワードを入力してください。''' InputType: Display.InputType.SingleLine IsTopMost: False UserInput=> UserInput
@@copilotGeneratedAction: 'False'
Scripting.RunVBScript.RunVBScript VBScriptCode: $'''Dim objExcel
Dim objWorkbook

\' Excelアプリケーションを作成
Set objExcel = CreateObject(\"Excel.Application\")

\'警告を無効化
objExcel.DisplayAlerts = False

\' ワークブックを開く
Set objWorkbook = objExcel.Workbooks.Open(\"%SelectedFile%\")

\' パスワードを設定
objWorkbook.Password = \"%UserInput%\"

\' ワークブックを保存
objWorkbook.SaveAs \"%SelectedFile%\"

\'警告を有効化
objExcel.DisplayAlerts = Ture

\' ワークブックを閉じる
objWorkbook.Close

\' Excelアプリケーションを終了
objExcel.Quit

\' オブジェクトを解放
Set objWorkbook = Nothing
Set objExcel = Nothing''' ScriptOutput=> VBScriptOutput ScriptError=> ScriptError
Display.ShowMessageDialog.ShowMessage Title: $'''完了通知''' Message: $'''パスワード設定が完了しました。
実際にパスワード設定できているか確認してください。''' Icon: Display.Icon.None Buttons: Display.Buttons.OK DefaultButton: Display.DefaultButton.Button1 IsTopMost: False
```
フロー作成時PowerAutoamteDesktopでの表示↓
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3931886/be0c5b92-c1a2-bd26-c74b-7817ca1bd7cc.png)

何か不明点ありましたらコメントお願いします。