1234

ExcelHome技术论坛

用户名  找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 运行时错误:91 是怎么回事?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2009-3-24 15:10 | 显示全部楼层 |阅读模式
各位大侠,我在一个EXcel文件中有如下VBA代码(在sheet2中),运行时显示91#错误:“对象变量或 With 块变量未设置”。而且刚写好时是能正常运行的,关了文件,改了文件名,再打开就出错了,反复看不知错在哪里?红色是出错的位置。大家帮我看看问题在哪里,谢谢!

Private Sub Worksheet_Change(ByVal Target As Range)

  Dim reName As String
  Dim chEmpy As Range

  reName = Cells(Target.Row, Target.Column - 1).Value
  Range("BI40").Select
   
    With Sheet1.Range("I2:I101")
     Set chEmpy = .Find(What:=reName, _
                                      After:=.Cells(.Cells.Count), _
                                   LookIn:=xlValues, _
                                  LookAt:=xlWhole, _
                        SearchOrder:=xlByRows, _
                   SearchDirection:=xlNext, _
                          MatchCase:=False)
    End With
   
    For i = 4 To 7
     Cells(31, 52 + i).Value = Sheet1.Cells(chEmpy.Row, chEmpy.Column - 1 + i).Value
    Next
  
End Sub

TA的精华主题

TA的得分主题

发表于 2009-3-24 17:24 | 显示全部楼层
首先打开工作簿的表1的"I2:I101"要有数据。不然就会有这个提示。
第二,"I2:I101"里最后一个数据的第二行的L——O列要有数据,不然表2的BD31:BG31看不到数据。
第三,你用的是单元格更改事件,每改一个数据就会重新触发此事件。这样会不停的运行,如同病毒。
改进方法:可在表2的单元格更改时加入Application.EnableEvents = False,改后一定要Application.EnableEvents = True

修改后如下:
Private Sub Worksheet_Change(ByVal Target As Range)

  Dim reName As String
  Dim chEmpy As Range

  reName = Cells(Target.Row, Target.Column - 1).Value
  Range("BI40").Select
   
    With Sheet1.Range("I2:I101")
     Set chEmpy = .Find(What:=reName, _
                                      After:=.Cells(.Cells.Count), _
                                   LookIn:=xlValues, _
                                  LookAt:=xlWhole, _
                        SearchOrder:=xlByRows, _
                   SearchDirection:=xlNext, _
                          MatchCase:=False)
    End With
   
    For i = 4 To 7
        Application.EnableEvents = False
        Cells(31, 52 + i).Value = Sheet1.Cells(chEmpy.Row, chEmpy.Column - 1 + i).Value
        Application.EnableEvents = True
    Next
  
End Sub

[ 本帖最后由 danielcm 于 2009-3-24 17:26 编辑 ]

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-3-24 17:52 | 显示全部楼层
谢谢2楼。目前情况如下:
1、sheet1的“I2:I101”是有数据的,不过不一定有100个数据,目前是有33个;
2、关于这一点我没太看懂你的意思,不过L~O列也不一定都有数据,我觉得好像不影响;
3、关于这一点怪我,是我没说清楚。这只是代码的一段,虽然我用的是单元格修改事件,但对target有个IF判断,所以不会总不停运行的;
4、最后,我也不知道怎么回事,它有正常了。我反复开关文件,反复测试,又正常了,非常晕。不过不管怎么样,谢谢2楼的帮助,至少我学到了Application.EnableEvents。

TA的精华主题

TA的得分主题

发表于 2012-11-3 17:23 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

1234

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

GMT+8, 2025-3-23 11:06 , Processed in 0.023562 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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