所以我一直在努力工作几个小时,我觉得解决方案很简单,但我不确定我做错了什么。
我收到错误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
答案 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
<强>截图强>
答案 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