2012-06-22 2 views
0

Я пытаюсь написать сценарий VBA, который может анализировать другие файлы для конкретных данных, которые затем можно ввести в открытую книгу Excel. Все файлы находятся в разделе «Разделенные флажки» и находятся в другом каталоге, чем текущая открытая книга. Код ниже работал до тех пор, пока я не перезапустил свой компьютер, и теперь я всегда получаю «1004 Runtime Error». Эта ошибка всегда возникает, когда код попадает в строку «select.TextToColumns» подпрограммы DeliminateCSV. Ошибка возникает из-за того, что программа выбирает пустые ячейки. Я считаю, что программа выбирает текущую открытую книгу, которая в настоящее время пуста. Я полагал, что, возможно, моя переменная CSV в ParseSummaryReport открывала неправильную книгу, но я смотрел ее в режиме Debug, и у нее, казалось, был правильный путь к файлу. Любые идеи, что происходит?Ошибка Runtime VBA 1004 после перезагрузки компьютера

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 

ответ

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

также будет работать

+0

Спасибо , Я не использовал его с заявлением. – user1476050

+0

@ user1476050 есть голой флажок рядом с каждым ответом, пометив его, чтобы все знали, что у этого вопроса есть ответ, который является решением, отмечая правильные ответы, дает вам пару пунктов тоже :) –

Смежные вопросы