Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 1286|回复: 7

[已解决]新人求助:对象变量或with块变量未设置

[复制链接]
发表于 2022-7-27 10:15 | 显示全部楼层 |阅读模式
3学分
'在黄色区域中查找值为2的单元格,并将这些单元格值变为5
Sub chaozhao3()
    Dim rg As Range
    Dim myaddress As String
    Set rg = Range("a14:f24").Find(2)
    If rg Is Nothing Then
        Debug.Print "not 2"
    Else
        myaddress = rg.address
        Do
            rg.value = 5
            Set rg = Range("a14:f24").FindNext(rg)
        Loop While Not rg Is Nothing And rg.address <> myaddress          每次运行到这句代码就会报错:对象变量未设置
    End If
End Sub

最佳答案
2022-7-27 10:15
本帖最后由 SlimEvans 于 2022-7-27 14:46 编辑

你的代码因为前边数字为2的单元格已经改成5了,所以后边查找不存在循环查找,就用不到address
改了一下你的代码
Sub chaozhao3()
    Dim rg As range
    Set rg = range("a14:f24").Find(2)
    If rg Is Nothing Then
        Debug.Print "not 2"
    Else
        Do
            rg.Value = 5
            Set rg = range("a14:f24").FindNext(rg)
        Loop While Not rg Is Nothing
    End If
End Sub
   

最佳答案

查看完整内容

你的代码因为前边数字为2的单元格已经改成5了,所以后边查找不存在循环查找,就用不到address 改了一下你的代码 Sub chaozhao3() Dim rg As range Set rg = range("a14:f24").Find(2) If rg Is Nothing Then Debug.Print "not 2" Else Do rg.Value = 5 Set rg = range("a14:f24").FindNext(rg) Loop While Not rg Is Nothing End If End Sub ...
发表于 2022-7-27 10:15 | 显示全部楼层    本楼为最佳答案   
本帖最后由 SlimEvans 于 2022-7-27 14:46 编辑

你的代码因为前边数字为2的单元格已经改成5了,所以后边查找不存在循环查找,就用不到address
改了一下你的代码
Sub chaozhao3()
    Dim rg As range
    Set rg = range("a14:f24").Find(2)
    If rg Is Nothing Then
        Debug.Print "not 2"
    Else
        Do
            rg.Value = 5
            Set rg = range("a14:f24").FindNext(rg)
        Loop While Not rg Is Nothing
    End If
End Sub
   
回复

使用道具 举报

 楼主| 发表于 2022-7-27 10:25 | 显示全部楼层
回复

使用道具 举报

发表于 2022-7-27 11:16 | 显示全部楼层
Sub chaozhao3()
    Dim rg As Range
    for each rg in Range("a14:f24")
        if rg .value = 2 then rg.value =5
    next rg
End Sub
回复

使用道具 举报

 楼主| 发表于 2022-7-27 11:23 | 显示全部楼层
我行我速2008 发表于 2022-7-27 11:16
Sub chaozhao3()
    Dim rg As Range
    for each rg in Range("a14:f24")

大神,没有用find函数啊,用find函数来完成需求
回复

使用道具 举报

发表于 2022-7-27 14:26 | 显示全部楼层
本帖最后由 SlimEvans 于 2022-7-27 14:30 编辑

Sub findnum1()
    Dim r As range, s As String
    Set r = Cells.Find(2, lookat:=xlWhole, searchorder:=xlRows)
    If Not r Is Nothing Then
        Do While Not r Is Nothing
            r.Value = 5
            Set r = Cells.Find(2, after:=r)
        Loop
    Else
        MsgBox "未找到数字2"
    End If
End Sub
回复

使用道具 举报

 楼主| 发表于 2022-7-27 15:01 | 显示全部楼层
SlimEvans 发表于 2022-7-27 14:44
你的代码因为前边数字为2的单元格已经改成5了,所以后边查找不存在循环查找,就用不到address
改了一下你 ...

大神,我按照你的意思删除掉这句And rg.address <> myaddress,程序能正常运行了,也不报错了。却有个疑问,下面这句代码,不是先判断rg存在,然后才判断address么?
如果rg不存在,就不向后判断了?

Loop While Not rg Is Nothing And rg.address <> myaddress

回复

使用道具 举报

发表于 2022-7-27 15:57 | 显示全部楼层
442039099 发表于 2022-7-27 15:01
大神,我按照你的意思删除掉这句And rg.address  myaddress,程序能正常运行了,也不报错了。却有个疑问 ...

当所有rg单元格的值改为5后,最后执行Loop While Not rg Is Nothing And rg.address <> myaddress的时候,rg不存在,rg.address就会发生错误,一个不存在的东西怎么会有地址的属性???
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-6 16:56 , Processed in 0.337554 second(s), 8 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表