[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『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 >
(γ) 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.