|
すみません。お世話になります。
計画書を作成するプログラムがあります(アドインで作成しました)
プログラム内で雛形をコピーし計画書を作成しています。
作成された計画書の中には少しだけThisWorkbookにプログラムを記述してます。
今回その箇所に不具合が見つかり記述し直す事になりました。
しかし、ここで問題があります。
コーディングを変更し保存しますと
当然、ファイルの更新日時が変更となってしまします。
シート内にある数値や文章は既にユーザのモノです。
ユーザによっては日付管理をしている方もいらっしゃいます。
ので、更新日時が変更することはマズイとなりました。
そこで、
’パーソナルコントロールボタンに設定したマクロ
Public Sub SetLastDate()
Dim FileName As String
Dim FilePath As String
Dim LastUpdateDate As Date
’初期値セット
FileName = ActiveWorkbook.FullName
FilePath = ActiveWorkbook.Path
If FilePath <> vbNullString Then
’前回の更新日時取得
LastUpdateDate = FileDateTime(FileName)
’シートを閉じる
ActiveWorkbook.Close
’ファイルの最終更新日の変更
Call LsSetFileTime(FilePath, LastUpdateDate)
End If
End Sub
’ファイルの最終更新日の変更の関数(APIを使用しています)
Sub LsSetFileTime(TempFile As String, wDateTime As Date)
Dim RtnCd As Long, hFile As Long
Dim lpCreationTime As FILETIME
Dim lpLastAccessTime As FILETIME
Dim lpLastWriteTime As FILETIME
Dim lpLocalFileTime As FILETIME
Dim lpSystemTime As SYSTEMTIME
'設定する日時をセット
With lpSystemTime
.wYear = Year(wDateTime)
.wMonth = Month(wDateTime)
.wDay = Day(wDateTime)
.wHour = Hour(wDateTime)
.wMinute = Minute(wDateTime)
.wSecond = Second(wDateTime)
End With
'システム時刻をファイル時刻に変換する
RtnCd = SystemTimeToFileTime(lpSystemTime, lpLocalFileTime)
'ローカル時間を UTC に変換する
RtnCd = LocalFileTimeToFileTime(lpLocalFileTime, lpLastWriteTime)
'ファイルハンドルを得る
hFile = CreateFileLong(TempFile, GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_ARCHIVE, 0)
'ファイルの時刻を設定
RtnCd = SetFileTimeLong(hFile, 0, 0, lpLastWriteTime)
'ファイルハンドルを開放
RtnCd = CloseHandle(hFile)
End Sub
を記述しましたが、前回の更新日時取得方法が悪いのか?
閉じるタイミングが悪いのか?
更新日時が通常通りのシステム日付となってしまいます。
すみませんがアドバイスをお願い致します。
|
|