您好我在那里尝试选择范围"A2:H2"
到最后填充单元格基于column A
(所以在这种情况下,它应该选择"A2:H59"
)。范围不固定,因此无法使用确切的数字定义。我有以下代码,但它选择了第402行的所有内容,即使工作表中没有"A59"
之外的数据。知道发生了什么事吗?谢谢您的帮助!
Global ssaw As Worksheet
Global trckr As Worksheet
Sub DataF()
Dim myRange As Range
Dim myCell As Range
Set ssaw = Sheets("SSAW_DATA")
Set trckr = Sheets("SQL_DATA_FEED")
Set myRange = trckr.Range("A2:H2").end(xlDown)
With myRange
.SpecialCells(xlCellTypeBlanks).Interior.Color = RGB(255, 102, 102)
.SpecialCells(xlCellTypeBlanks).Value = "#missing#"
End With
End Sub
如果我们假设您在A列中最后使用过的单元格是A59
那么......
… 这个
Set myRange = trckr.Range("A2", trckr.Range("A2").End(xlDown))
将选择A2:A59
和这
.Resize(ColumnSize:=8)
将调整大小使其为8列宽度,即A2:H59
。
我们一起得到:
Set myRange = trckr.Range("A2", trckr.Range("A2").End(xlDown)).Resize(ColumnSize:=8)
用这个
trckr.Range("A" & trckr.Rows.Count).End(xlUp)
或者,如果中间可能存在空单元格,则查找A列中最后使用的单元格:
Set myRange = trckr.Range("A2", trckr.Range("A" & trckr.Rows.Count).End(xlUp)).Resize(ColumnSize:=8)
利用Range(cell1, cell2)
相当于Range(cell2, cell1)
的事实
Set myRange = trckr.Range("H2", trckr.Range("A2").End(xlDown))
而如果你想选择一个范围从A2:H2到A列最后一个非空单元格(即在第一个和最后一个非空单元格之间沿着A列包含空单元格):
Set myRange = trckr.Range("H2", trckr.Cells(trckr.Rows.Count, 1).End(xlUp))
我建议使用以下代码
Option Explicit
Function LastRowInColumn(colName As String)
Dim lastRow As Long
With ActiveSheet
lastRow = .Cells(.Rows.Count, colName).End(xlUp).Row
End With
LastRowInColumn = lastRow
End Function
Sub SelectRg()
Dim rg As Range
Dim wks As Worksheet
Dim lastRow As Long
lastRow = LastRowInColumn("A")
Debug.Print lastRow
If lastRow = 1 Then
' do nothing
Else
Set wks = ActiveSheet
With wks
Set rg = Range(.Cells(2, 1), .Cells(lastRow, "H"))
rg.Select
End With
End If
End Sub
代码确定A列中最后一个填充的行,并根据此信息选择所有列到H列
编辑改进功能
Function LastRowInColumn(ByVal wks As Worksheet, ByVal colName As String) As Long
With wks
LastRowInColumn = .Cells(.Rows.Count, colName).End(xlUp).Row
End With
End Function
EDIT2如果你不想使用额外的功能,你可以这样做
Sub SetRg()
Dim rg As Range
Dim wks As Worksheet
Dim lastRow As Long
Set wks = ActiveSheet
With wks
lastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
'lastRow = LastRowInColumn(wks, "A")
If lastRow > 1 Then
Set rg = Range(.Cells(2, 1), .Cells(lastRow, "H"))
End If
End With
End Sub