【问题标题】:VBA: Exit For Loop when row is emptyVBA:当行为空时退出循环
【发布时间】:2013-02-20 21:08:25
【问题描述】:

我正在使用以下代码将行导出到单个文本文件:

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 循环。

【问题讨论】:

  • 另外,由于您使用的是 Rows,建议将它们声明为 Long 而不是 integers :)
  • @Sid 在 32 位操作系统上,您应该始终使用 Long,除非特别需要使用 16 位数字 (Integer)

标签: vba excel


【解决方案1】:

此代码将从第 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

【讨论】:

  • 您可能需要根据上面@SiddharthRout 的评论调整此代码。
  • 完成。虽然我也不会介意你这样做... :-)
【解决方案2】:

这是我的一个项目中的代码,它完全符合您的要求 - 以空白值结尾

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

【讨论】:

  • 我对 vba 还是很陌生。我的 For 循环会进入这段代码吗?
  • 这是用新代码修改的代码。但是,我没有对此进行测试,因此您可能需要对其进行一些调整 - 稍后它将出现在主要答案中
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-27
  • 2014-04-12
  • 2010-11-19
相关资源
最近更新 更多