ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 710|回复: 12

[求助] 代码为什么运行错误

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-7-23 12:49 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
写了一段如下代码:


Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rng As Range
    If Target.Address = "$B$3" Then
        With ThisWorkbook.Sheets("统计模板")
            Set rng = .Range("b:b").Find(ThisWorkbook.Sheets("兑换小票").Range("b3").Value)
        End With
        With ThisWorkbook.Sheets("兑换小票")
            .[j2] = rng(1, 0)
            .[D2] = rng(1, 2)
            .[D3] = rng(1, 3)
            .[B4] = rng(1, 7)
        End With
    End If
End Sub

现在的问题是:单独打开此工作簿时运行完全正常!但是只要打开了另一个工作簿,这个代码就运行不正常了,rng就显示Nothing了.请教高手,这是怎么回事呢?(需要说明的是:两个工作簿也没有同名的工作表)



TA的精华主题

TA的得分主题

发表于 2023-7-23 15:24 | 显示全部楼层
关键是thisworkbook,你新打开一个工作簿,thisworkbook就表示新工作簿,所以就。。。。
解决:试试workbooks("名称").worksheet()

TA的精华主题

TA的得分主题

发表于 2023-7-23 16:12 | 显示全部楼层
这句Set rng = .Range("b:b").Find(ThisWorkbook.Sheets("兑换小票").Range("b3").Value),当没有找到值就会报错。后面加一句 if rng is nothing then exit sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-7-23 18:30 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
512008404 发表于 2023-7-23 16:12
这句Set rng = .Range("b:b").Find(ThisWorkbook.Sheets("兑换小票").Range("b3").Value),当没有找到值就 ...

问题是此工作簿中有值的。单独打开工作簿,每次都能找到值。如果打开有其它工作簿,此代码就找不到值了。

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-7-23 18:38 | 显示全部楼层
本帖最后由 wenjie242922 于 2023-7-23 18:44 编辑
ww87725244 发表于 2023-7-23 15:24
关键是thisworkbook,你新打开一个工作簿,thisworkbook就表示新工作簿,所以就。。。。
解决:试试workbo ...

还是一样的,只要随便打开一个工作簿,rng就找不到值了。而这个值肯定是存在的。因为单独打开有此代码的工作簿,就完全运行正常。我试过很多次了,任何时候单独打开此工作簿,就完全运行正常。一旦打开了任意一个工作簿,rng就找不到值了。

TA的精华主题

TA的得分主题

发表于 2023-7-24 00:51 | 显示全部楼层
wenjie242922 发表于 2023-7-23 18:38
还是一样的,只要随便打开一个工作簿,rng就找不到值了。而这个值肯定是存在的。因为单独打开有此代码的 ...

如2 楼所述,你用的是thisworkbook,当打开其他工作簿时,就默认新打开的工作簿为thisworkbook了,自然就找不到值了.所以
With ThisWorkbook.Sheets("统计模板")改成 with workbooks(工作簿名称).sheets()才能始终指向执行代码的工作簿.

TA的精华主题

TA的得分主题

发表于 2023-7-24 07:16 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
2楼正解,更换成对应的worksheets名称试一下

TA的精华主题

TA的得分主题

发表于 2023-7-24 16:37 | 显示全部楼层
你在打开另外一个工作簿的情况下,执行到这段代码时,添加打印 ThisWorkbook.Sheets("兑换小票").Range("b3").Value ,看能否取到数据,多加几个Debug.Print() 看看是哪里取的数据不正确。

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-7-26 14:34 | 显示全部楼层
xunanming 发表于 2023-7-24 00:51
如2 楼所述,你用的是thisworkbook,当打开其他工作簿时,就默认新打开的工作簿为thisworkbook了,自然就找不 ...

谢谢您!我试过了,还是不行。

TA的精华主题

TA的得分主题

发表于 2023-7-26 14:39 | 显示全部楼层
ww87725244 发表于 2023-7-23 15:24
关键是thisworkbook,你新打开一个工作簿,thisworkbook就表示新工作簿,所以就。。。。
解决:试试workbo ...

你说的是activeworkbook,thisworkbook不一样
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-17 07:46 , Processed in 0.042652 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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