【VBA】ファイルの更新日時を変更する | あじゅWeb

【VBA】ファイルの更新日時を変更する

エクセルVBAで使うコードの備忘録。VBAで指定ファイルの更新日時を変更するコード。ファイルシステムオブジェクトでは変更できないので、Windowsのエクスプローラーを操作するための「Shell.Application」オブジェクトを使用します。

スポンサーリンク

Shall.Applicationオブジェクト

機能を実装するだけなら必要はありませんが、意味も分からずに使うのも気持ちが悪いと思うので、今回利用する「Shell.Application」オブジェクトについての概要を書いておきます。

「Shell.Application」オブジェクトは、Windowsの「Shell(シェル)」と呼ばれるソフトウェアを表すオブジェクトです。この「Shell」と呼ばれるプログラムは、Windowsというオペレーティングシステム(PCの核となる中枢)と人間による入力の間を取り持つインターフェースのような役割を担っています。

VBAではこの「Shell.Application」オブジェクトを利用することによって、Windowsのインターフェースである「Shell」に指示を送り、ファイル操作などのWindows上で人間が行うことができる操作を実現します。

「Shell.Application」オブジェクトは下記のように宣言して作成します(ここでは「objShell」という変数を使用していますが、名前はなんでも構いません)。

Dim objShell As Object
Set objShell = CreateObject("Shell.Application")

サンプルコード

下記のサンプルコードでは「Shell.Application」オブジェクトを利用してファイルの更新日時を変更しています。「Shell.Application」オブジェクトを使い、まずは変更したいファイルを表すオブジェクトを取得し、「ModifyDate」プロパティに変更後の日時を設定しています。「Shell.Application」オブジェクトの「Namespace」メソッドではフォルダの取得しかできないので、一度変更したいファイルが入っているフォルダを取得してから、ファイルオブジェクトを取得するという二段構えになっています。

ちなみに、「Namespace」メソッドの引数として渡すフォルダのパスはVariant型変数として宣言しておきましょう。String型だどうまく取得ができませんでした。

Public Sub ChangeModifiedDate()
    
    '--- Shell.Applicationオブジェクトの生成 ---'
    Dim objShell As Object
    Set objShell = CreateObject("Shell.Application")
    
    '--- 変更したいファイルのフォルダパス ---'
    Dim folderPath As Variant
    folderPath = "[フォルダパス]"
    
    '--- ファイル名 ---'
    Dim fileName As String
    fileName = "[ファイル名]"
    
    '--- 変更後の日付(今回は現在時刻) ---'
    Dim modDate As Date
    modDate = Now
    
    '--- フォルダオブジェクトを取得 ---'
    Dim objFolder As Object
    Set objFolder = objShell.Namespace(folderPath)
    
    '--- ファイルオブジェクトを取得 ---'
    Dim objFile As Object
    Set objFile = objFolder.ParseName(fileName)
    
    '--- 更新日時を変更する ---'
    objFile.ModifyDate = modDate
    
End Sub