現在開いている Excel ワークブックに入力できる特定のデータについて、他のファイルを解析できる VBA スクリプトを作成しようとしています。ファイルはすべてタブ区切りで、現在開いているワークブックとは別のディレクトリにあります。以下のコードは、コンピューターを再起動するまでは機能していましたが、今では常に「1004 ランタイム エラー」が発生します。このエラーは、コードが DeliminateCSV サブルーチンの「select.TextToColumns」行にヒットしたときに常に発生します。プログラムが空のセルを選択しているため、エラーが発生します。プログラムは、現在開いている空のワークブックを選択していると思います。ParseSummaryReport の CSV 変数が間違ったワークブックを開いているのではないかと思いましたが、デバッグ モードで確認したところ、開くための正しいファイル パスがあるように見えました。何が起こっているのですか?
Option Explicit
Sub PopulateSpreadSheet()
Dim fso As Object
Dim fPath As String
Dim fsoFolder As Scripting.folder
Dim startingFolder As Scripting.folder
Dim iNumFiles As Integer
Set fso = CreateObject("Scripting.FileSystemObject")
'Get path of current workbook
fPath = ActiveWorkbook.Path
Set fsoFolder = fso.GetFolder(fPath)
'Move up one directory
Set startingFolder = fsoFolder.ParentFolder
iNumFiles = 0
Call RecursiveFileCheck(startingFolder, iNumFiles)
End Sub
Sub ParseSummaryReport(ByRef i As Integer, fileName As String)
Dim CSV As Workbook
Dim Excel As Excel.Application
'Data From CSV To Put In Tracking
Dim ES_Number As String
Dim custodian As String
Dim EDoc_Size As Double
Dim Email_Size As Double
Set Excel = New Excel.Application
'Set CSV = Excel.Workbooks.Open(fileName)
Set CSV = Excel.Workbooks.Open(fileName, , , , , , , , " ")
'Deliminate the CSV File
'Call DeliminateCSV(CSV)
Call CSV.Close(False)
End Sub
Sub RecursiveFileCheck(ByRef folder As Scripting.folder, ByRef iNumFiles As Integer)
Dim nextFolder As Scripting.folder
Dim fileName As String
Dim nextFile, files, subFolders
Set files = folder.files
Set subFolders = folder.subFolders
'Search through all the files in this folder
For Each nextFile In files
'Check if this is one of the files we want
If nextFile Like "*_SummaryReport.csv" Then
'Summary Report Found, Parse It
fileName = nextFile
Call ParseSummaryReport(iNumFiles, fileName)
End If
Next nextFile
'Search through all the subfolders recursively
For Each nextFolder In subFolders
Call RecursiveFileCheck(nextFolder, iNumFiles)
Next nextFolder
End Sub
Sub DeliminateCSV(ByRef wrkBook As Workbook)
With wrkBook
Columns("A:A").Select
Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
:=Array(Array(1, 1), Array(2, 1)), TrailingMinusNumbers:=True
End With
End Sub