首页 文章

用VBA选择范围 - 卡住了

提问于
浏览
0

我在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

我试图在普遍选择的范围内搜索第一个空单元格,因此它不会搜索整个列,但它不起作用 .

3 回答

  • 0

    试试这个...

    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
    
  • 0

    我发现在搜索单个列时使用工作表的匹配函数比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
    

    使用.End(xlDown)可能会有问题,如果H列中第m行下的第一个单元格为空白并且应该检查它,或者您可能会发现选择到达太远,可能一直到工作表的底部 . 检查非空白单元格将捕获此潜在问题 .

  • 0

    谢谢你们:)工作完美:)

相关问题