Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
重新启动计算机后引入VBA 1004运行时错误_Vba_Excel - Fatal编程技术网

重新启动计算机后引入VBA 1004运行时错误

重新启动计算机后引入VBA 1004运行时错误,vba,excel,Vba,Excel,我一直在尝试编写一个VBA脚本,它可以解析出其他文件中的特定数据,然后输入到当前打开的Excel工作簿中。这些文件都已清除选项卡,并且位于与当前打开的工作簿不同的目录中。下面的代码一直工作到我重新启动我的计算机,现在我总是得到一个“1004运行时错误”。当代码点击DeliminateCSV子例程的“select.TextToColumns”行时,这个错误总是发生。发生错误的原因是程序正在选择空单元格。我相信程序正在选择当前打开的工作簿,而该工作簿当前为空。我相信ParseSummaryRepor

我一直在尝试编写一个VBA脚本,它可以解析出其他文件中的特定数据,然后输入到当前打开的Excel工作簿中。这些文件都已清除选项卡,并且位于与当前打开的工作簿不同的目录中。下面的代码一直工作到我重新启动我的计算机,现在我总是得到一个“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
当你使用

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")...
当您使用

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")...

也会起作用

谢谢,我没有太多使用with语句。@user1476050每个答案旁边都有一个全息复选框,勾选它可以让每个人都知道这个问题有一个答案就是答案,标记正确的答案也会给你几点:)谢谢,我很少使用with语句。@user1476050每个答案旁边都有一个全息复选框,勾选它可以让每个人都知道这个问题有一个答案,这就是答案,标记正确的答案也会给你几分:)