VBAでDOSのコマンドを使用する
DOSのコマンドを操作できるようになるとExcelやOutlook、Internet Explorer以外のアプリケーションでも操作できるものがあります。
私はDOSのコマンドを使用して画像の編集アプリを操作することで、たくさんある画像ファイルを一括でトリミングするのに使用しています。
今回はこのDOSのコマンドを実行するVBAで画像ファイルを編集する方法を紹介します。
紹介するVBAコードで使用するアプリケーション
IrfanViewというアプリケーションを使用します。
http://forest.watch.impress.co.jp/library/software/irfanview/でダウンロードできます。
元々たくさんのファイルを同時に処理することに優れたアプリケーションですが、これをDOSコマンドで実行することでさらに自由度が高く便利に画像編集が可能になります。
スポンサーリンク
DOSコマンドを実行するVBAメソッド
DOSコマンドを実行するVBAのメソッドはRunとExecの2つがあります。
RunはDOSのウインドウを表示しないように設定したり、ウインドウを最大で表示したりすることができるのが大きなメリットです。
ExecはよりVBAとDOSを同期させるときに便利なコマンドで、出力結果をVBAで取得したりする場合にExecを使用する方が良いようです。
VBAでDOSコマンドの出力結果を取得する必要がない今回のケースのような場合、Runを用いておくと、プログラムの動作中にも他の作業ができるので便利になります。
DOSコマンドを実行するVBAのサンプルコード
VBAでコマンドラインを操作して、IrfanViewを起動し、画像ファイルの拡張子を変更し、画像ファイルをトリミングして名前を変更するサンプルコードは以下のようになります。
デスクトップにある「編集前」というフォルダにある「a.png」というファイルをトリミングして「編集後」というフォルダに「b.jpg」というファイル名と形式に変更するサンプルです。
①Execを使用する
Dim wExec As Object, WSH As Object
Dim Cmd As String, DesktopPath As String
Set WSH = CreateObject(“Wscript.Shell”)
WSH.CurrentDirectory = “C:\Program Files (x86)\IrfanView”
DesktopPath = WSH.SpecialFolders(“Desktop”)
Cmd = “i_view32.exe ” & DesktopPath & “\編集前\a.png” & ” /crop=(0,100,1000,1500,)” & _
” /convert=” & DesktopPath & “\編集後\b.jpg”
Set wExec = WSH.Exec(“%ComSpec% /c ” & Cmd)’”%ComSpec% /c “はコマンドラインの種類を特定するものです。そのまま記載すればOKです
Do While wExec.Status = 0
DoEvents
Sleep 1
Loop
End Sub
②Run使用
Dim WSH As Object
Dim Cmd As String, DesktopPath As String
Set WSH = CreateObject(“Wscript.Shell”)
WSH.CurrentDirectory = “C:\Program Files (x86)\IrfanView”
DesktopPath = WSH.SpecialFolders(“Desktop”)
Cmd = “i_view32.exe ” & DesktopPath & “\編集前\a.png” & ” /crop=(0,100,1000,1500,)” & _
” /convert=” & DesktopPath & “\編集後\b.jpg”
WSH.Run “%ComSpec% /c ” & Cmd, 7, True
’Runメソッドの引数「7」にすると最小化して起動。「1」が通常のウインドウ表示、「3」が最大化
End Sub
DOSコマンドに指令を出す部分は変数を使うこともできますので、変数を使用してたくさんのファイルに一括で処理を実行することができます。
コメント