Sub SelectAllReleventText()
Do While Range(“A1”).Offset(1, 6) <> Empty
Rows(ActiveCell.Row).Select
ActiveCell.Offset(1, 0).Select
Loop
End Sub
这是我的剧本,我已经被告知它没有做到它的意图,这是我的预期,因为这是我的第一次尝试。我想出一个未定义错误的变量。我以为我定义了变量,但我猜它对Excel VBA来说还不够具体。
这就是我想要做的。
提前致谢。只是抬头,我在我的VBA中使用选项显式,因为我被告知这是&#34;正确的做事方式&#34; ...
答案 0 :(得分:10)
使用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
希望这是你想要的?
西特
答案 1 :(得分:3)
最简单的方法是使用End
方法,通过按结束键,然后在单元格上的方向(在这种情况下为B6),为您提供到达的单元格)。但是,如果B6或B7为空,这将无法满足您的期望。
Dim start_cell As Range
Set start_cell = Range("[Workbook1.xlsx]Sheet1!B6")
Range(start_cell, start_cell.End(xlDown)).Copy Range("[Workbook2.xlsx]Sheet1!A2")
如果您无法使用End
,则必须使用循环。
Dim start_cell As Range, end_cell As Range
Set start_cell = Range("[Workbook1.xlsx]Sheet1!B6")
Set end_cell = start_cell
Do Until IsEmpty(end_cell.Offset(1, 0))
Set end_cell = end_cell.Offset(1, 0)
Loop
Range(start_cell, end_cell).Copy Range("[Workbook2.xlsx]Sheet1!A2")