2016-02-04 2 views
0

У меня есть следующий код, где я пытаюсь изменить некоторые файлы Txt в определенной папке. Сначала я хочу проверить, работает ли Loop. Однако, когда я запускаю макрос, код может читать только первый файл, а затем появляется ошибка времени выполнения в strFileName = Dir(). Я не уверен, в чем проблема. Единственная проблема, о которой я могу думать, это то, что я перемещаю код между двумя модульными листами. Местоположение папки сохраняется в поле txt в Листе 1 книги Excel.Looping Through Txt Files with VBA - DIR() issue

Sub Txt_File_Loop() 
Public TextFile As String 
Dim FolderLocation As String 
Dim strFielName As String 
Dim SaveLocation As String 
'Location is present in a Text box 
FolderLocation = Sheets(1).FolderLocationTXTBX.Text 
strFileName = Dir(FolderLocation & " \ * ") 
Do Until strFileName = "" 
TextFile = FolderLocation & "\" & strFileName 
Module2.Macro1 
strFileName = Dir() 'ERROR is Here 
Loop 

End Sub 

Sub Macro1() 
Dim x As String 
Open TextFile For Input As #1 
Do Until EOF(1) 
Line Input #1, textline 
x = x & textline 
Loop 

Close #1 
MsgBox x 

End Sub 
+0

Ухх .. как ваш код скомпилирован? Вам не хватает инструкции 'Loop' для закрытия' Do While ... 'У вас также есть строка' Open TextFile' * внутри * цикла, поэтому как она может знать, где End Of File ('EOF') является прежде чем открыть его? Ваша первая часть не является частью какой-либо подпрограммы. Существует некоторая ошибка, с которой ваша ошибка происходит на 'strFileName = Dir()' на основе кода, который вы предоставили ... – tigeravatar

+0

'strFileName = Dir (FolderLocation &" \ * ")' вы имеете в виду 'strFileName = Dir (FolderLocation & \ ")'? И что дает вам 'debug.print FolderLocation'? – findwindow

+0

Я хотел добавить оператор Loop в макрос1. – Dinks123

ответ

1

Ознакомьтесь с этими изменениями. Кажется, они исправляют несколько вещей и хорошо проходят.

Option Explicit 

Sub Txt_File_Loop() 
    Dim FolderLocation As String 
    Dim strFileName As String 
    Dim SaveLocation As String 
    'Location is present in a Text box 
    FolderLocation = Sheets(1).FolderLocationTXTBX.Text 'Environ("TMP") 
    strFileName = Dir(FolderLocation & "\*.txt") 
    Do Until strFileName = "" 
     Debug.Print FolderLocation & "\" & strFileName 
     Module2.Macro1 FolderLocation & "\" & strFileName 
     strFileName = Dir() 'ERROR is Here 
    Loop 
End Sub 

Sub Macro1(sFPFN As String) 
    Dim x As String, textline As String 
    Debug.Print sFPFN 

    Open sFPFN For Input As #1 
    Do Until EOF(1) 
     Line Input #1, textline 
     x = x & textline 
    Loop 

    Close #1 
    MsgBox x 

End Sub 

Я передал имя папки и имени файла как параметр строкового типа. Кроме того, я не знаю, почему у вас были дополнительные пробелы в (FolderLocation & " \ * "; Я сжал это. Было несколько орфографических ошибок и необъявленных переменных; их можно избежать с помощью Option Explicit ¹ в верхней части кода модуля. Войдите в практику стандартного отступов с кодом. Это, безусловно, улучшает читаемость, если ничего другого.


¹ Установка требует объявления переменных в утилите VBE в ► Параметры ► Редактор страницы свойств поместит заявление Option Explicit в верхней части каждого вновь созданного кода листа. Это позволит избежать ошибок глупого кодирования, таких как орфографические ошибки, а также повлиять на использование правильного типа переменной в объявлении переменной. Переменные, созданные на лету без объявления, представляют собой тип варианта/объекта. Использование Опция Явная широко считается «лучшей практикой».

+0

Спасибо, я проверю, работает ли это в понедельник на работе. – Dinks123

+0

Теперь он работает. Спасибо, я буду использовать Option Explicit в моих макросах в будущем. – Dinks123