search值,然后展开列中的所选单元格

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

我收到错误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

我正在寻找04/05/2017的单元格还包含其他对话,所以我不知道这是为什么我的代码不工作的原因。

它还有其他的文字以及@SiddharthRout。 例如:“04/05/2017已完成” – Peter Droz 2分钟前

使用.Find是非常危险的。 很less有人知道这一点。我们记得这是最后一次设置。 因此,你应该总是指定你想要的。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 

截图

在这里输入图像说明

您可能还想要查看.Find和.FindNext在Excel VBA中

将其更改为

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

当range.find没有find该值时,将不会返回任何内容。 在这种情况下,你不能在任何东西上包装。 也许你应该写这个

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

编辑:如果单元默认包装,然后简单地写

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

当通过一列或一行查看时,我更喜欢MATCH。

与比赛,我们仍然需要处理它不find匹配:

 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