VBAのDateLastModifiedプロパティについての疑問
- VBAのDateLastModifiedプロパティは撮影日時を意味するのか疑問があります。
- https://msdn.microsoft.com/ja-jp/library/cc428100.aspxを見ると、DateLastModifiedプロパティは撮影日時ではないようです。
- しかし、実際にコードを実行すると、撮影日時とDateLastModifiedが一致することがあります。これは偶然なのでしょうか?
- ベストアンサー
VBA DateLastModifiedプロパ
DateLastModifiedプロパティは撮影日時と言う意味にもなりますか? https://msdn.microsoft.com/ja-jp/library/cc428100.aspx を見る限りでは撮影日時ではないのですが Sub 撮影日時を取得する() Dim objFol, shellObj, folderObj, myFile Dim objFS As FileSystemObject Set objFS = CreateObject("Scripting.FileSystemObject") Set shellObj = CreateObject("Shell.Application") MyFolderName = "C:\Users4\Desktop\natsumi\test" Set objFol = objFS.GetFolder(MyFolderName) Set folderObj = shellObj.Namespace(MyFolderName) For Each myFile In objFol.Files Debug.Print myFile.Name & "/" & myFile.DateLastModified Next Set objFS = Nothing Set objFS = Nothing Set objFol = Nothing Set shellObj = Nothing Set folderObj = Nothing End Sub を実行すると撮影日時ががDateLastModifiedと一致するのですが これは偶然ですか?
- AKORHREDL
- お礼率82% (14/17)
- オフィス系ソフト
- 回答数1
- ありがとう数1
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
撮影日時と更新日時が同じだからじゃないですか。 画像処理ソフトでなにか処理して保存し直すと違ってくると思いますよ。
関連するQ&A
- 日付の間にハテナが入る
Sub test() Dim objFS, objFol, shellObj, folderObj, myFol, myFile Dim i As Long Dim myName As String myFol = "C:\Users\test" Set objFS = CreateObject("Scripting.FileSystemObject") Set objFol = objFS.GetFolder(myFol) Set shellObj = CreateObject("Shell.Application") Set folderObj = shellObj.Namespace(myFol) Cells(1, 1) = "ファイル名" Cells(1, 2) = "撮影日時" For Each myFile In objFol.Files myName = myFile.Name If UCase(Right(myName, 3)) = "JPG" Then i = i + 1 Cells(i, 1) = myName Cells(i, 2) = folderObj.GetDetailsOf(folderObj.ParseName(myName), 12) End If Next Set objFS = Nothing Set objFol = Nothing Set shellObj = Nothing Set folderObj = Nothing End Sub このコードをエクセルシート上に書き出せば、問題なく日付が書き出せるのに、 Debug.Print folderObj.GetDetailsOf(folderObj.ParseName(myName), 12) とすると、 撮影日時が ?2010/?02/?28 ??14:04 ?2010/?05/?15 ??15:14 ?2010/?05/?23 ??16:45 ?2010/?06/?03 ??18:19 ?2010/?06/?19 ??13:25 ?2010/?06/?26 ??10:22 ?2010/?06/?29 ??18:39 ?2010/?07/?01 ??18:23 ?2010/?07/?02 ??19:13 のようにハテナが入るのですが、なぜでしょうか?
- ベストアンサー
- Excel(エクセル)
- FileDateTime
Dim MyFileName As String Dim MyPath As String Dim NewName As String Dim objFS As FileSystemObject Dim objFol, shellObj, folderObj, MyFolderName, myFile Dim New撮影日時 As String Sub test() MyFileName = "C:\Users\写真" Set objFS = CreateObject("Scripting.FileSystemObject") Set shellObj = CreateObject("Shell.Application") With objFS With .GetFolder(MyFileName) For Each MyFolder In .SubFolders MyPath = MyFileName & "\" & MyFolder.Name & "\" Set objFol = objFS.GetFolder(MyPath) Set folderObj = shellObj.Namespace(MyPath) MyFileName = Dir(MyPath & "*.*") Do While MyFileName <> "" ’ここでエラー New撮影日時 = FileDateTime(MyPath & folderObj.ParseName(MyFileName)) MyFileName = Dir() Loop Next End With End With Set objFS = Nothing End Sub このコードは何が変ですか? 写真フォルダに入っているサブフォルダの写真ファイルの撮影日時を取得したいのですが FileDateTime(MyPath & folderObj.ParseName(MyFileName)) で 実行時エラー_91「オブジェクト変数またはWithブロック変数が設定されていません」 になります。 原因がわかりません。 オフィス2010、アクセスです。
- ベストアンサー
- オフィス系ソフト
- VBA SFO C:\Windows
Cドライブには、 IntelもWindowsのどちらのフォルダも存在するのに Sub Sample() Dim myFSO As Object Debug.Print CreateObject("scripting.filesystemobject").GetFolder("C:\Intel").Size Debug.Print CreateObject("scripting.filesystemobject").GetFolder("C:\Windows").Size Set myFSO = Nothing End Sub をVBAで実行すると \Windows の方だけエラーになります。 エラー内容は 実行時エラー 70 書き込みできません。 です。 何故でしょうか?
- ベストアンサー
- Visual Basic
- VBA 一つのフォルダの中のフォルダ名とファイル名
一つのフォルダの中のフォルダ名とファイル名を取得したい場合は ************************************** Sub test() Dim MyFileName As String Dim MyFolderName As String Dim myFSO As Object Dim MyFolder As Scripting.Folder MyFolderName = "C:\" 'フォルダを取得 MyFileName = Dir(MyFolderName & "*.*") Do While MyFileName <> "" Debug.Print MyFileName MyFileName = Dir() Loop 'ファイルを取得 Set myFSO = CreateObject("Scripting.FileSystemObject") With myFSO With .GetFolder(MyFolderName) For Each MyFolder In .SubFolders Debug.Print MyFolder.Name Next End With End With Set myFSO = Nothing End Sub ************************************** の様に ファイル名・フォルダ名をそれぞれループして取得しないとダメでしょうか? もうちょっとスマートなコードはありますか?
- ベストアンサー
- その他(プログラミング・開発)
- FSOのDateCreatedプロパティで撮影日時
FSOのDateCreatedプロパティで撮影日時の取得はできますか? フォルダの中のファイルの撮影日時の一覧を取得したいのですが Sub Sample() Dim MyFileName As String Dim MyFolderName As String MyFolderName = "C:\Users\1\Documents\【写真】" MyFileName = Dir(MyFolderName & "\*.*") Do While MyFileName <> "" Debug.Print MyFileName Debug.Print CreateObject("scripting.filesystemobject").GetFile(MyFolderName & "\" & MyFileName).DateCreated MyFileName = Dir() Loop End Sub これで日付は取得できるのですが、この取得した日付は撮影日時を言ってるのでしょうか? 全て画像ファイルで、撮影日時を取得したいのですが正しいのかどうなのかわかりません。
- ベストアンサー
- オフィス系ソフト
- エクセルならうまく行くのですがアクセスだとエラーに
エクセルならうまく行くのですがアクセスだとエラーになるのですがなぜでしょうか? フォルダに入ってるフォルダ名を全て取得して一つにつなげたいのですが Sub フォルダ名を取得() 参照設定:Microsoft Scripting Runtime Dim MyFSO As Object Dim MyGetFolder As String Dim MyFolderName As String Dim MyFolder As Folder Dim i As Long MyGetFolder = "D:\My Documents" Set MyFSO = CreateObject("Scripting.FileSystemObject") With MyFSO With .GetFolder(MyGetFolder) For Each MyFolder In .SubFolders MyFolderName = MyFolderName & "," & MyFolder.Name Next End With End With MsgBox MyFolderName Set MyFSO = Nothing End Sub これを実行するとアクセスだと For Each MyFolder In .SubFolders で、実行時エラー13 型が一致しません。 になります。 エクセルもアクセスも参照設定:Microsoft Scripting Runtimeにチェックを入れています。 コードはネットで拾ってきたコードです。 オフィスの種類は2003・OSはXPです。
- ベストアンサー
- オフィス系ソフト
- 10分おきに自動でバックアップファイルを作成する
エクセルファイルで 「10分おきに自動でバックアップファイルを作成する」 ということは可能ですか? Sub バックアップ作成() Dim myFSO As Object Dim MyFile As Object Dim WSH As Variant Dim strdate As String Set myFSO = CreateObject("Scripting.FileSystemObject") Set WSH = CreateObject("Wscript.Shell") strdate = Format(Now, "yyyy年mm月dd日hh時mm分") myFSO.CopyFile ActiveWorkbook.FullName, "D:\backup\" & strdate & ".xlsm" Set MyFile = Nothing Set myFSO = Nothing Set WSH = Nothing End Sub これでバックアップは作成できるのですが 「10おきに」というのはどうすればいいのでしょうか?
- ベストアンサー
- オフィス系ソフト
- FSOでエクセルファイルを作成したい
FSOでエクセルファイルを作成したいのですが、 ファイルの作成はできますが、作成したファイルが開けません。 Sub 新規Excelファイルを作成する() Dim MyFile As String Dim myFSO As Object MyFile = "管理簿.xlsx" Set myFSO = CreateObject("Scripting.FileSystemObject") With myFSO.CreateTextFile("C:\" & MyFile) .Close End With Set myFSO = Nothing End Sub で、エラーにならずうまくいっています。 が、その出来上がったファイルを開こうとすると 「ファイル形式またはファイル拡張子が正しくありません」 と言う旨のメッセージが表示されます。 何が間違ってますか? よろしくお願いします。
- ベストアンサー
- Excel(エクセル)
- FSOを使いサブフォルダのファイル操作
同じ階層のサブフォルダにxlsm入るが入っており、VBAによりモジュールを解放しようと試みています。 まずは、FSOを使ってサブフォルダにアクセスしようとしましたが、下から6行目でエラー(424 オブジェクトが必要です)が出てしまい、解決できませんので、ご教示いただけないでしょうか? よろしくお願いします Sub DeleteMain() With Application.FileDialog(msoFileDialogFolderPicker) If Not .Show Then Exit Sub Call DeleteSub(folderPath:=.SelectedItems(1)) End With End Sub Sub DeleteSub(folderPath As String, Optional mycount As Long = 0) Dim fso As Object, myFolders As Object, myfile As Object Set fso = CreateObject("Scripting.FileSystemObject") Set myFolders = fso.GetFolder(folderPath).SubFolders For Each myfile In fso.GetFolder(folderPath).Files mycount = mycount + 1 ' Cells(mycount, 1) = myfile.Path Debug.Print myfile.Path Next For Each myFolders In fso.GetFolder(folder.Path).SubFolders Call DeleteSub(myFolder.Path, mycount) Next Set fso = Nothing Set myFolders = Nothing End Sub
- ベストアンサー
- Excel(エクセル)
- vbaでフォルダ属性がうまく取れません
vbaでフォルダ属性が隠しフォルダかどうかを調べるコードを書いています。 C:\ProgramData\ は隠しフォルダなのに、なぜか16が返って来ます。 試しにvbs(wsh)だと18が返って来ます。 環境は Win10 + Excel2013(32ビット) です。 vbaで返値18を求めるにはどうすれば良いのでしょうか。 Sub test() Dim mPath Dim fso, f mPath = "C:\ProgramData\" Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.GetFolder(mPath) MsgBox f.Attributes End Sub
- ベストアンサー
- Visual Basic
お礼
回答ありがとうございました。