ウインドウズに実装されている"Power Shell"は、少しなじみの薄い存在です。
これと違って、コマンドプロンプトの入力画面なら、使った人もいるでしょう。
違いは何かと言えば、後から追加されて機能が強化されたのが”Power Shell”。
より高度な操作が可能であり、.NET Frameworkを利用することができます。
まあ、Webアプリケーションの開発で基本的な枠組みや機能をまとめたものね。
なので、プロンプトより強力なスクリプトを作成することができて便利なのだ。
システム管理や自動化などに利用されることが多いので、覚えると便利かもな。
それで、このパワーシェルは圧縮ファイルを作るコマンドが実装されています。
ならば、VBAで圧縮ファイルを作ってしまえと試しにコードを書いてみました。
ブックを起動したら最小化して、”InputBox”に圧縮するファイルを入力します。
なので、あたかもアプリが動いている感じですが、ファイル名は固定しました。
もし、圧縮するファイル名を指定するのなら、”InputBox”を追加してください。
なぜ、セルからフルパスのファイル名を引っ張らないのかは、?マークの存在。
つまり、文字列をセルへ入力すれば、先頭にシングルコーテーションが付くな。
これを取っ払うのがややこしくて、テキストをまま取得する手法を使いました。
それで、ADODBへ参照設定を行わないと、このブックは動いてくれないんだ。
参照設定ダイアログから、”Microsoft ActiveX Data Objects Library”を選ぶ。
というわけで、バージョンは、”6.1”の最新にしておけば問題なく動作するよ。
それから、解凍する場合も”powershell expand-archive”と似たようなコマンドなので、次回、チャレンジしようと思う自分なのでした。
☆サンプルコード
’ThisWorkbookの記述
Private Sub Workbook_Open() 'ブックを最小化して自動実行
Application.Visible = False
Call ArchiveOutput_ANSI '処理を記述
Call RunBatShell
Application.Visible = True
Application.Quit '圧縮ファイル保存が終わればブックを閉じる
End Sub
'Module1の記述
Sub ArchiveOutput_ANSI() 'ANSIでファイル出力・ANSIとShift-Jisは同じ
Dim i As Integer, str As String, ado As Object 'ADODB.Stream生成
Set ado = CreateObject("ADODB.Stream")
ado.Charset = "Shift-Jis" '扱う文字コードの設定(ANSI)
ado.Open 'ADODB.Stream開く
ado.WriteText "@echo off", adWriteLine 'adWriteLineは改行で挿入
ado.WriteText BatScriptMaking(), adWriteLine '内容保管
str = ""
str = str & Environ("homedrive")
str = str & Environ("homepath")
str = str & "\Downloads\archive.bat"
ado.SaveToFile str, 2 'ADODB.Streamの保管内容を保存
ado.Close 'ADODB.Streamを閉じる
End Sub
Function BatScriptMaking() As String '関数プロシージャ
Dim str As String, str2 As String, str3 As String
str = ""
str = str & Environ("homedrive")
str = str & Environ("homepath")
str = str & "\HOGEHOGE.bak" 'ダミーのファイル名を参考に表示
str2 = ""
str2 = str2 & Environ("homedrive")
str2 = str2 & Environ("homepath")
str2 = str2 & "\Documents\Compressed.zip"
str3 = ""
str3 = str3 & "powershell compress-archive -Path "
str3 = str3 & InputBox("フルパスでファイル名", "ファイル名", str)
str3 = str3 & " -Force -DestinationPath "
str3 = str3 & str2
str3 = str3 & ""
BatScriptMaking = str3
End Function
Sub RunBatShell() '保存したバッチファイルをShell関数で起動
Dim dProcessId As Double, str As String
str = ""
str = str & Environ("homedrive")
str = str & Environ("homepath")
str = str & "\Downloads\archive.bat"
dProcessId = Shell(str)
End Sub
0 件のコメント:
コメントを投稿