これ何て呼びますか

Sub GetExcelFileNamesAndDates()
Dim folderPath As String
Dim searchDate As Date
Dim folder As Object, subFolder As Object, file As Object
Dim excelApp As Object
Dim rowNum As Integer
Dim pasteRange As Range

' フォルダーパスと検索日付を設定
folderPath = "C:\Users\kes1o\Desktop\新しいフォルダー"
searchDate = Sheets("Sheet1").Range("A1").Value

' Excelアプリケーションを作成
Set excelApp = CreateObject("Excel.Application")
excelApp.Visible = False

' フォルダー内のサブフォルダーとファイルを検索
Set folder = CreateObject("Scripting.FileSystemObject").GetFolder(folderPath)

' 結果をシート1のA3セルから貼り付け
Set pasteRange = Sheets("Sheet1").Range("A3")

rowNum = 0 ' 貼り付ける行番号を初期化

For Each subFolder In folder.SubFolders
For Each file In subFolder.Files
' ファイルがExcelファイルかつ更新日が検索日付以降の場合、ファイル名と更新日時を表示
If (Right(file.Name, 5) = ".xlsx" Or Right(file.Name, 4) = ".xls") And file.DateLastModified >= searchDate Then
pasteRange.Offset(rowNum, 0).Value = file.Name
pasteRange.Offset(rowNum, 1).Value = file.DateLastModified
rowNum = rowNum + 1
End If
Next file
Next subFolder

' Excelアプリケーションを終了
excelApp.Quit


End Sub

ChatGPTで作成しましたがExcelアプリケーションを作成の部分は必要でしょうか?

質問者からの補足コメント

  • うーん・・・

    上記のVBAを別のpcで使用した所同じ動作になりませんでした。どいうことでしょうか?
    具体的にはファイル名と日時が貼り付けられません。何かVBA使用する際に設定することがあるのでしょうか?他のVBAは使用できるのですが?

      補足日時:2023/07/20 21:51

A 回答 (3件)

まずは、どう「動かない」なのか?


エラーメッセージが出るのか?出ないのか?
出るならどんなメッセージか?

次に、動かない理由を調査すること。
考えられるのは
・フォルダーが無い。
 そもそも無い/元のPCと場所が違う
・ファイルが無い。
 そもそも無い/[更新日]ファイル名に該当するファイルが無い


「vba デバッグ やり方」
で検索して、デバッグ方法を勉強しましょう。

ブレークポイントやステップ実行で、以下の箇所をとくに重点的にしらべましょう

Set folder = CreateObject("Scripting.FileSystemObject").GetFolder(folderPath)
エラーになっていないか?

For Each file In subFolder.Files
このループに入ってくるか?(=folder.SubFolders が空なのかそうでないのか)

If (Right(file.Name, 5) = ".xlsx" Or Right(file.Name, 4) = ".xls") And file.DateLastModified >= searchDate Then
この行に到達するか?(=subFolder.Filesが空なのかそうでないのか)
file.Name は期待通りかそうでないのか?
file.DateLastModified は期待通りかそうでないのか?
searchDateは期待通りなのかそうでないのか
    • good
    • 0

まずは、そのプログラムで、excelApp が使われているところを確認することです。



Set excelApp = CreateObject("Excel.Application")
excelApp.Visible = False
excelApp.Quit

の3箇所だけです。
アプリを起動→隠す→アプリ終了
です。
excelAppを利用して何かをするのなら、もっと excelApp が使われているはずです。
※ excelApp.Visible = False は画面を隠しただけなので、excelAppを利用しているとは言えません。


また、新規にExcelを起動しなくても、大抵のことはVBAを動かしているExcelでできます。

excelAppは不要です。
    • good
    • 0
この回答へのお礼

返信ありがとうございます。では指摘の3箇所を削除しも問題なく動作するということでしょうか?

お礼日時:2023/07/20 07:37

' Excelアプリケーションを終了


excelApp.Quit

ここで「Excelアプリケーション」終了なので、作成の部分は
Set excelApp = CreateObject("Excel.Application")
ここってことになるのかしら。
    • good
    • 0
この回答へのお礼

返信ありがとうございます。やりたい事はフォルダー内に複数のフォルダーがありその中のExcelファイル名を更新日時で絞ってファイル名と日時を直接Excelシートに貼り付けたいです。動作できには問題ないのですが、今までExcelアプリケーションを作成を使った事がなくこの部分がどういう動作になっているのかもわからずまた必要なのかもわからない状況です。

お礼日時:2023/07/19 21:31

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報