Sub SelectAllReleventText()
Do While Range(“A1”).Offset(1, 6) <> Empty
Rows(ActiveCell.Row).Select
ActiveCell.Offset(1, 0).Select
Loop
End Sub
这是我的脚本,有人告诉我它没有达到预期的效果,这是我的预期,因为这是我的第一次尝试。我想出了一个变量未定义的错误。我以为我定义了该变量,但我想它对于 Excel VBA 来说不够具体。
这就是我正在尝试做的事情。
- 在工作簿 1 的 B6 上有一个字母数字名称,我希望选择该行。
- 向下移动一行,如果有文本,请选择该行。
- 继续下去,直到文字不再流行。
- 复制选定的行。
- 粘贴到另一个工作簿 (Workbook2) 的选项卡 1 中,从第 2 行开始,因为第 1 行有标题。
提前致谢。请注意,我在 VBA 中使用显式选项,因为有人告诉我这是“正确的做法”...
最佳答案
是的,使用Option Explicit
是一个好习惯。然而,使用 .Select
则不然:)它会降低代码的速度。还要完全证明工作表名称合理,否则代码将始终针对 Activesheet
运行,这可能不是您真正想要的。
这就是你正在尝试的吗?
Option Explicit
Sub Sample()
Dim lastRow As Long, i As Long
Dim CopyRange As Range
'~~> Change Sheet1 to relevant sheet name
With Sheets("Sheet1")
lastRow = .Range("A" & .Rows.Count).End(xlUp).Row
For i = 2 To lastRow
If Len(Trim(.Range("A" & i).Value)) <> 0 Then
If CopyRange Is Nothing Then
Set CopyRange = .Rows(i)
Else
Set CopyRange = Union(CopyRange, .Rows(i))
End If
Else
Exit For
End If
Next
If Not CopyRange Is Nothing Then
'~~> Change Sheet2 to relevant sheet name
CopyRange.Copy Sheets("Sheet2").Rows(1)
End If
End With
End Sub
注意
如果您有从第 2 行到第 10 行的数据,并且第 11 行为空白,然后您又从第 12 行获得了数据,那么上述代码将仅复制从第 2 行到第 10 行的数据
如果您想复制所有包含数据的行,请使用此代码。
Option Explicit
Sub Sample()
Dim lastRow As Long, i As Long
Dim CopyRange As Range
'~~> Change Sheet1 to relevant sheet name
With Sheets("Sheet1")
lastRow = .Range("A" & .Rows.Count).End(xlUp).Row
For i = 2 To lastRow
If Len(Trim(.Range("A" & i).Value)) <> 0 Then
If CopyRange Is Nothing Then
Set CopyRange = .Rows(i)
Else
Set CopyRange = Union(CopyRange, .Rows(i))
End If
End If
Next
If Not CopyRange Is Nothing Then
'~~> Change Sheet2 to relevant sheet name
CopyRange.Copy Sheets("Sheet2").Rows(1)
End If
End With
End Sub
希望这是您想要的吗?
席德
关于Excel VBA,如何根据列中的数据选择行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9790924/