[[20211119211212]] 『VBAでPowerShellの実行』(フォーキー) >>BOT

[ 初めての方へ | 一覧(最新更新順) |

| 全文検索 | 過去ログ ]

 

『VBAでPowerShellの実行』(フォーキー)

お世話になります。VBAを使ったPowershell操作についての質問です。

写真やPDFファイルの更新日時を現在の日時に変更したいため、いろいろ調べたところ、Powershellでできることが分かりました。

そのコマンドをVBAで操作するため、ネットで見つけたものを参考にコードを組んでみましたが日時が更新されません。

(更新シートA列にフルパスを入力)

 Option Explicit
 Sub LastWriteTime()
     Dim ws As Worksheet
     Dim LastR As Long
     Dim i As Long
     Dim Path As String

     Dim psCmd As String
     Dim hoge As Variant

     Set ws = ThisWorkbook.Worksheets("更新")
     LastR = ws.Cells(Rows.Count, 1).End(xlUp).Row

     For i = 2 To LastR
         Path = ws.Cells(i, 1)
         psCmd = "Set-ItemProperty " & Path & " -Name LastWriteTime -Value $(Get-Date)"
         hoge = runPshell(psCmd, 0, True)
     Next

 End Sub

 Function runPshell(psCmd As String, intVsbl As Integer, waitFlg As Boolean)
     Dim objWSH As Object
     Set objWSH = CreateObject("WScript.Shell")

     objWSH.Run "powershell -NoLogo -ExecutionPolicy RemoteSigned -Command " & psCmd, intVsbl, waitFlg
 End Function

いろいろ調べた結果、パスに空白があるとダメだということは分かったのですが、対策がうまくいきません。
ネットで見つけた、シングルクォーテーションで囲む、アンパサンドを頭につける等は試してみました。

変数psCmdをイミディエイトウィンドウに出力してPowershellに直接入力してみましたが、パスが存在しないというエラーが返ってきます。(一時うまく動作したときがありましたが、その後再現しなかったです)

コードの内容を理解できていないため、Powershellに渡す部分がダメなのか、VBAコードが間違っているのか判断できません。

この掲示板でする質問ではないかもしれませんが、よろしくお願いいたします。

< 使用 Excel:Excel2010、使用 OS:unknown >


Path = "'" & ws.Cells(i, 1) & "'"
などとしてみたらどうでしょうか。
(γ) 2021/11/19(金) 22:46

手元では実行できました。
ちなみに、セル上で直接、文字列の頭と尻尾に ' をつけてしまうと、
頭のものは、文字列を示す特殊文字とみなされて、
変数には取り込まれないので注意が必要ですね。

(γ) 2021/11/19(金) 23:16


遅くなってすみません。

 >Path = "'" & ws.Cells(i, 1) & "'"

で更新できましたが、一部フォルダ内の写真ファイルが更新されず、原因を特定するのに時間がかかってました。
結果として、そのフォルダだけ見出しが「更新日時」ではなく「作成日付」になっていただけでした。
コードは正しく動いていました。
ありがとうございました。
(フォーキー) 2021/11/22(月) 07:22


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.