【问题标题】:Select range with VBA - got stuck使用 VBA 选择范围 - 卡住了
【发布时间】:2019-05-10 05:50:14
【问题描述】:

我在 VBA 中有一个小项目,并坚持以下主题。

我需要选择从搜索值到 H 列中第一个空单元格的范围。

所选范围应如下所示

Excel 中的选定范围:

我在 A 列中搜索了特定值,如果找到它,则将其设置为范围内的第一个单元格。 (有效)

然后我需要找到范围内的最后一个单元格,即最后一列中的第一个空单元格。

这是我发现并尝试使用的

Sub Button()

    Dim StringToFind As String

    StringToFind = Application.InputBox("Enter string to find", "Find string")

    Worksheets("SS19").Activate
    ActiveSheet.Range("A:A").Select

    Set cell = Selection.Find(What:=StringToFind, After:=ActiveCell, _
                    LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByRows, _
                    SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)

    cell.Select

    With Worksheets("SS19")

        Set rr = .Range(ActiveCell, .Cells(.Rows.Count, "H").End(xlUp))

        With rr
            rr.Parent.Range(.Cells(1, "A"), .Cells(.Rows.Count, "H").End(xlUp).Offset(1, 0)).Select
        End With

    End With

    If cell Is Nothing Then
        Worksheets("SS19").Activate
        MsgBox "String not found"
    End If

我尝试在先前选择的范围内搜索第一个空单元格,因此它不会搜索整个列,但它不起作用。

【问题讨论】:

  • 这将有助于确保图像中的行号和列字母可见。

标签: excel vba


【解决方案1】:

试试这个...

Dim StringToFind As String
StringToFind = Application.InputBox("Enter string to find", "Find string")

Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Sheet2")

    With ws
        Dim findCel As Range
        Set findCel = .Range("A:A").Find(StringToFind, , , xlWhole, , , False, , False)

        Dim lRow As Long
        lRow = .Range(findCel.Address).Offset(, 7).End(xlDown).Row + 1

        Dim rr As Range
        Set rr = .Range("A" & findCel.Row & ":" & "H" & lRow)

        rr.Select
    End With

【讨论】:

    【解决方案2】:

    我发现在单列搜索时使用工作表的匹配功能比 Range.Find 更容易。

    Option Explicit
    
    Sub Button()
    
        Dim stringToFind As String, m As Variant
    
        Worksheets("SS19").Activate
        stringToFind = Application.InputBox("Enter string to find", "Find string", Type:=xlTextValues)
    
        With Worksheets("SS19")
    
            m = Application.Match(stringToFind, .Range("A:A"), 0)
    
            If Not IsError(m) Then
                If Not IsEmpty(.Cells(m + 1, "H")) Then
                    .Range(.Cells(m, "A"), .Cells(m, "H").End(xlDown).Offset(1)).Select
                Else
                    .Range(.Cells(m, "A"), .Cells(m, "H").Offset(1)).Select
                End If
            End If
    
        End With
    End Sub
    

    如果 H 列中 m 行下的第一个单元格是空白的,则使用 .End(xlDown) 可能会出现问题,并且应该检查这一点,否则您可能会发现选择范围太远,可能所有一直到工作表的底部。检查非空白单元格将发现此潜在问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-17
      • 2017-07-18
      • 1970-01-01
      • 1970-01-01
      • 2021-12-13
      • 2021-05-22
      相关资源
      最近更新 更多