2013-02-20 3 views
3

Я использую следующий код для экспорта строк в отдельных текстовых файлов:VBA: Exit For Loop, когда строка пуста

Sub export_Test() 

Dim firstRow As Integer, lastRow As Integer, fileName As String 
Dim myRow As Integer, myStr As String 

firstRow = 10 
lastRow = 29 

For myRow = firstRow To lastRow 

    fileName = "C:\mallet\test\" & Cells(myRow, 1) & ".txt" 
    Open fileName For Append As #1 
    myStr = Cells(myRow, 2).Value 
    Print #1, myStr 
    Close #1 
Next 

End Sub 

Проблема заключается в том, что этот код для определенного количества строк. Я хочу использовать этот код для разных образцов данных, поэтому количество строк в файле excel будет меняться и может числиться в тысячах. Мне нужно, чтобы переменная lastRow была установлена ​​на бесконечное число и вышла из цикла For Loop, когда она попала в пустую строку.

+0

http://stackoverflow.com/questions/11169445/error-finding-last-used-cell- in-vba –

+2

Также, поскольку вы используете строки, рекомендуется порекомендовать объявить их как 'Long' вместо' integers' :) –

+0

@Sid на 32-битной ОС вы должны использовать _ longways 'Long', если только не требуется конкретная необходимость использования 16-разрядные номера ('Integer') –

ответ

4

Этот код запускается в строке 10 и работать до тех пор, пока не найдет пустую ячейку во второй колонке , Обратите внимание, что я также укороченный код немного (хотя она по-прежнему делает то же запись в файл):

Sub export_Test() 
    Dim myRow As Long 
    myRow = 10 
    While Cells(myRow, 2).Value <> "" 
     Open "C:\mallet\test\" & Cells(myRow, 1) & ".txt" For Append As #1 
     Print #1, Cells(myRow, 2).Value 
     Close #1 
     myRow = myRow + 1 
    Wend 
End Sub 
+1

Возможно, вы захотите отрегулировать этот код за комментарий @ SiddharthRout выше. –

+1

сделано. хотя я бы не подумал, если бы вы это сделали ... :-) –

0

Это код из проекта шахты, что делает именно то, что вы хотите - конец с пустым значением

Sub export_Test() 

Dim firstRow As Integer, lastRow As Integer, fileName As String 
Dim myRow As Integer, myStr As String 

    firstRow = 10 
    myRow = firstRow 

    ' Seed initial value 
    Cells(myRow, 1).Select 

    ' Keep going until a blank cell is found 
    While Trim(ActiveCell.Value) <> "" 

     fileName = "C:\mallet\test\" & ActiveCell.Value & ".txt" 

     Open fileName For Append As #1 

     myStr = Cells(myRow, 2).Value 
     Print #1, myStr 
     Close #1 

     ' Get the next value  
     myRow = myRow + 1 
     Cells(myRow, NameCol).Select 
    Wend 

End Sub 
+0

Я все еще довольно новичок в vba. Будет ли мой цикл for внутри этого кода? – Momo

+0

Вот ваш код с новым кодом. Тем не менее, я не тестировал это, поэтому вам, возможно, придется немного подкорректировать его - он будет в главном ответе в один момент – cardmagik

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