デスクトップに保存してあるVBSファイルをダブルクリックした際に
コードが開始され
Aというフォルダ内に
300近いフォルダがあるのですが
このAフォルダ内の最新(更新日)のフォルダ名を取得し
それをメモ帳に記入して、そのメモをデスクトップに保存するということを行いたいです。
保存名【最新】という名前で、もし新たにコードを実行した際は
その都度上書きされるといった感じです。
このような事が可能でしたら
コードを教えて頂きたいです。
参考までにネット拾ったコードが下記のものです。
このコードでは指定フォルダ内のサブフォルダ名すべてが
メモに書き込まれますが
これを最新のものだけにしたいという感じです。
よろしくお願いします。
Option Explicit
Dim objFileSys
Dim objFolder
Dim objSubFolder
Dim objOutputTextStream
'ファイルシステムを扱うオブジェクトを作成
Set objFileSys = CreateObject("Scripting.FileSystemObject")
'ログ出力用 TextStream オブジェクトを作成
'第2引数は 1 :読み取り、2 :上書き、3 :追記。
Set objOutputTextStream = objFileSys.OpenTextFile("log.txt", 2, True)
'c:\temp フォルダのオブジェクトを取得
Set objFolder = objFileSys.GetFolder("V:\工程\test")
'FolderオブジェクトのFilesプロパティからFileオブジェクトを取得
For Each objSubFolder In objFolder.SubFolders
'ファイル名を取得し、ログファイルに出力
objOutputTextStream.WriteLine objSubFolder.Name
Next
'TextStream は Close を忘れずに
objOutputTextStream.Close
Set objOutputTextStream = Nothing
Set objSubFolder = Nothing
Set objFileSys = Nothing
No.1
- 回答日時:
' 拾ったサブフォルダーの一覧を ADODB で取り扱うのはどうでしょうか。
' メモリ上にデータベースのテーブルを作り、ファイル一覧をレコードとして格納すればソートが出来ます。
' 更新日時の降順でソートした 1件目が質問者さんが求めるレコードになるはずです。
Option Explicit
Const adDBTimeStamp = 135
Const adVarWChar = 202
Const targetPath = "E:\test"
Dim fso ' As Scripting.FileSystemObject
Dim rootDir ' As Scripting.Folder
Dim subDir ' As Scripting.Folder
Dim recSet ' As ADODB.Recordset
Set fso = CreateObject("Scripting.FileSystemObject")
Set rootDir = fso.GetFolder(targetPath)
Set recSet = CreateObject("ADODB.Recordset")
recSet.Fields.Append "Name", adVarWChar, 255
recSet.Fields.Append "LastModified", adDBTimeStamp
' フォルダー一覧の名前と更新日をレコードセットに格納する
recSet.Open
For Each subDir In rootDir.SubFolders
recSet.AddNew
recSet.Fields("Name").Value = subDir.Name
recSet.Fields("LastModified").Value = subDir.DateLastModified
recSet.Update
Next
' 更新日の降順でソートし、1件目のレコードの値だけ拾ったらレコードセットを閉じる
recSet.Sort = "LastModified DESC"
recSet.MoveFirst
objOutputTextStream.WriteLine recSet.Fields("Name").Value
recSet.Close
objOutputTextStream.Close
Set recSet = Nothing
set rootDir = nothing
Set fso = Nothing
No.2ベストアンサー
- 回答日時:
あなたから提示されたスクリプトを更新しました。
以下のようにしてください。Option Explicit
Dim objFileSys
Dim objFolder
Dim objSubFolder
Dim objOutputTextStream
Dim lasttime '最終更新時刻
Dim lastfolder '最新のフォルダ
'ファイルシステムを扱うオブジェクトを作成
Set objFileSys = CreateObject("Scripting.FileSystemObject")
'ログ出力用 TextStream オブジェクトを作成
'第2引数は 1 :読み取り、2 :上書き、3 :追記。
Set objOutputTextStream = objFileSys.OpenTextFile("log.txt", 2, True)
'c:\temp フォルダのオブジェクトを取得
Set objFolder = objFileSys.GetFolder("V:\工程\test")
'FolderオブジェクトのFilesプロパティからFileオブジェクトを取得
lasttime = 0
For Each objSubFolder In objFolder.SubFolders
if objSubFolder.DateLastModified > lasttime then
'最終更新時刻が新しければ、その時刻とフォルダ名を更新する
lasttime = objSubFolder.DateLastModified
lastfolder = objSubFolder.Name
End If
Next
'最新のフォルダ名をログファイルに出力
objOutputTextStream.WriteLine lastfolder
'TextStream は Close を忘れずに
objOutputTextStream.Close
Set objOutputTextStream = Nothing
Set objSubFolder = Nothing
Set objFileSys = Nothing
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA This Workbookモジュールを別ファイルにコピーする方法 1 2022/09/14 01:51
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- Visual Basic(VBA) outlook マクロが終了しません。 1 2022/09/02 11:14
- Excel(エクセル) フォルダ内のワードファイルをPDFに一括変換するVBA 3 2023/06/09 16:51
- Excel(エクセル) VBA フォルダ見える化のコードについて 2 2023/06/19 15:04
- Visual Basic(VBA) エクセルVBA(実行時エラー438)の対処法を教えてもらえないでしょうか 3 2023/04/22 13:43
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/05/24 08:33
- Visual Basic(VBA) VBA★PDFをPDFアプリで印刷しようと思っていますが上手くゆきません 1 2022/06/06 22:04
- Visual Basic(VBA) vbaの構文の修正相談(xmlファイルを順に開いてコピペ作業) 1 2023/04/22 01:18
- Excel(エクセル) マクロのコードを、少しでも削って短くしたい 3 2022/08/30 07:46
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
worksheetFunctionクラスのVloo...
-
「Columns("A:C")」の列文字を...
-
VBAで既に開いている別アプリケ...
-
実行時エラー 3265「要求された...
-
Excelでフィルタをかけると警告...
-
エクセルマクロエラー「'Cells'...
-
エクセルのVBAの標準モジュール...
-
VBAについてです。 初心者です...
-
EXCEL VBA オートシェイプナン...
-
UserForm1.Showでエラーになり...
-
テキストボックス中の文字列の...
-
ある文字列が全て数字であるか...
-
エクセルVBAでFor each文
-
横軸ラベルの追加に関するエラ...
-
メモリ解放について(ASP)
-
VBA (Row とRowsの違いについて)
-
VBで引数にDictionaryオブジェ...
-
PowerPointVBAでスライドマスタ...
-
EDINETの情報をEXCELにダウンロ...
-
VBScriptでExcelのグラフを貼り...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
worksheetFunctionクラスのVloo...
-
「Columns("A:C")」の列文字を...
-
実行時エラー 3265「要求された...
-
エクセルのVBAの標準モジュール...
-
VBAで既に開いている別アプリケ...
-
VBAで Set wb = Sheets(1).Cop...
-
テキストボックス中の文字列の...
-
PowerPointVBAでスライドマスタ...
-
エクセルマクロエラー「'Cells'...
-
VBAからPDFファイルにパスワー...
-
Excelでフィルタをかけると警告...
-
オブジェクトが見つかりません
-
ある文字列が全て数字であるか...
-
EXCEL VBA オートシェイプナン...
-
[VBA]CDOメッセージ送信エラー
-
VBAで作成するメール(開封確認...
-
VBAについてです。 初心者です...
-
VBA:オートシェイプの線の長...
-
VBで引数にDictionaryオブジェ...
-
AccessVBAで「dim dbs as datab...
おすすめ情報
ありがとうございます。
objOutputTextStream.WriteLine recSet.Fields("Name").Value
の部分でエラーが発生するのですが
なぜでしょうか?