搜索值,然后在列

时间:2017-06-26 19:09:26

标签: excel excel-vba find vba

所以我一直在努力工作几个小时,我觉得解决方案很简单,但我不确定我做错了什么。

我收到错误Object Variable or With block variable not set

Sub unwrap()
    Dim rgFound As Range
    Set rgFound = Range("A1:A500").Find("04/05/2017", LookIn:=xlValues)   
    If rgFound Is Nothing Then
        rgFound.WrapText = True
    Else
        rgFound.WrapText = False
    End If
End Sub

我正在寻找04/05/2017的单元格还包含其他对话框,因此我不确定这是否是我的代码无效的原因。

rgFound也等于Nothing,这没有意义,因为列中的单元格明显包含04/05/2017

3 个答案:

答案 0 :(得分:1)

  

我正在寻找的小组04/05/2017还包含其他对话,所以我不确定这是否是我的代码无效的原因。

     

还有其他文字@SiddharthRout。例如:“04/05/2017 completed” - Peter Droz 2分钟前

使用.Find非常冒险。很少有人知道.Find会记住它的最后设置。因此,您应该始终指定您希望.Find实现的目标。您需要使用LookAt:=xlPart

试试这个

Sub Sample()
    Dim oSht As Worksheet
    Dim strSearch As String
    Dim aCell As Range

    '~~> Change this as applicable
    Set oSht = Sheets("Sheet1")

    strSearch = "04/05/2017"

    Set aCell = oSht.Range("A1:A500").Find(What:=strSearch, LookIn:=xlValues, _
    LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
    MatchCase:=False, SearchFormat:=False)

    If Not aCell Is Nothing Then
        MsgBox "found at " & aCell.Address
    Else
        MsgBox "Not Found"
    End If
End Sub

<强>截图

enter image description here

您可能还想查看.Find and .FindNext In Excel VBA

答案 1 :(得分:0)

在查看一列或一行时,我更喜欢MATCH。

使用Match我们仍然需要处理它而不是找到匹配:

Sub unwrap()

Dim i as long

On Error Resume Next
i = Application.WorksheetFunction.Match("*04/05/2017*",Range("A1:A500"),0)
On Error Goto 0

If i <> 0 then
    Range("A1:A500")(i).WrapText = True
Else
    Range("A1:A500").WrapText = False
End If

End Sub

答案 2 :(得分:0)

将其更改为

Set rgFound = Range("A1:A500").Find("4/5/2017", LookIn:=xlValues)

Plus range.find在找不到值时不返回任何内容。在这种情况下,你无法将文字包装在任何东西上。也许你应该写这个

Range("A1:A500").WrapText = True

编辑:如果默认情况下包裹单元格,则只需编写

If Not (rgFound Is Nothing) Then
    rgFound.WrapText = False
End If