0

現在開いている 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
4

1 に答える 1

3

使用するとき

With wrkBook
...
End with

次に、「。」を追加する必要があります。そのワークブックに属するプロパティまたはメソッドの前

With wrkBook
    Columns("A:A").Select             
    Selection.TextToColumns Destination:=Range("A1")...
End With

する必要があります

With wrkBook
    .Columns("A:A").Select             
    Selection.TextToColumns Destination:=.Range("A1")...
End With

ただし、選択する必要はありません。

.Columns("A:A").TextToColumns Destination:=.Range("A1")...

も機能します

于 2012-06-22T22:57:47.067 に答える