我正在尝试实现一个代码,如果你点击某个单元格;你去了某一列的第一个空单元格。
现在我有了这段代码:
If Selection.Count = 1 Then
If Not Intersect(Target, Range("B2")) Is Nothing Then
Columns("E").Find(vbNullString, Cells(Rows.Count, "E")).Select
End If
End If
但是这段代码存在问题:我希望它开始检查第一个空单元格;从第3行开始。我该怎么做?
EDIT1:
我对代码做了一些调整以适应我的需求(对于练习和美学);
Dim lastCell As Range
Set lastCell = Range("E:E").Find(vbNullString, [E3], , , , xlNext)
lastCell.Interior.Color = RGB(100, 200, 100)
lastCell.Offset(0, -3) = "Last Cell -->"
lastCell.Offset(0, -3).Interior.Color = RGB(0, 110, 250)
lastCell.Offset(0, -3).Font.Color = vbWhite
If Not Intersect(Target, [B2]) Is Nothing Then
lastCell.Select
旁注 向右偏移三列的原因是因为工作表的布局:) 如果更改了lastCell,我会清除单元格和其他文本的格式。如果有人有兴趣,请告诉我。
答案 0 :(得分:3)
您可以通过提供SearchDirection
参数来重写这样的代码。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Selection.Count = 1 Then
If Not Intersect(Target, Range("B2")) Is Nothing Then
Columns("E").Find(vbNullString, Cells(Rows.Count, "E") _
, , , , xlPrevious).Select
End If
End If
End Sub
或者你可以尝试这个:
编辑1:对于brettdj:)
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error Goto errhandler
Application.EnableEvents = False
If Target.Cells.Count = 1 Then
If Not Intersect(Target, [B2]) Is Nothing Then _
Range("E:E").Find(vbNullString, [E3], , , , xlNext).Select
End If
continue:
Application.EnableEvents = True
Exit Sub
errhandler:
MsgBox Err.Description
Resume continue
End Sub
除非E3:E(x)之间有空白单元格,否则两个代码的工作方式相同
您的修订代码在E列中找到第一个空单元格,并引用最后一个非空单元格
下一个代码从字面上找到E3
的第一个空单元格。不知道你真正需要的是什么。
旁注:
Columns("E")
与Range("E:E")
相同
为什么要使用Range("E:E")
呢?好吧,Intellisense
使用Range
而非Columns
开始
所以我更喜欢使用Range
,因此您可以看到.Find
方法的所有可用参数。
答案 1 :(得分:0)
这就是我要做的事情:
Dim maxrows&, iRow&, iCol&, zcell As Range
maxrows = Excel.Rows.Count
If Selection.Count = 1 Then
iRow = Target.Row
iCol = Target.Column
Set zcell = Range(Cells(3, iCol), Cells(maxrows, iCol)).Find(vbNullString)
zcell.Select
End If