选定单元格后转到第一个空单元格

时间:2014-05-11 22:01:27

标签: excel vba

我正在尝试实现一个代码,如果你点击某个单元格;你去了某一列的第一个空单元格。

现在我有了这段代码:

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,我会清除单元格和其他文本的格式。如果有人有兴趣,请告诉我。

2 个答案:

答案 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