2024年11月29日金曜日

新しくパソコンを買えば、環境構築をしなくてもすぐに利用できる開発環境が用意されている分けさ ー Windows PowerShell(VBAマクロ)

        
ウインドウズに実装されている"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 件のコメント:

コメントを投稿