2013-02-20 101 views
3

我用下面的代碼行導出到單獨的文本文件:VBA:退出For循環當行空

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循環遇到空行時退出。

+0

http://stackoverflow.com/questions/11169445/error-finding-last-used-cell- in-vba – 2013-02-20 21:10:51

+2

此外,由於您使用的是行,建議將它們聲明爲「Long」而不是「整數」:) – 2013-02-20 21:13:01

+0

@Sid在32位操作系統上,您應該_always_使用'Long',除非特別需要使用16位數字('Integer') – 2013-02-21 06:09:14

回答

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的評論來調整這個代碼。 – 2013-02-22 14:20:58

+1

完成。儘管如果你已經做到了,我也不會懷念...... :-) – 2013-02-22 14:27:04

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 2013-02-20 21:17:00

+0

這裏是你的代碼修改後的新代碼。然而,我沒有測試這個,所以你可能需要調整一些 - 它將在主要答案的時刻 – cardmagik 2013-02-20 21:23:41