Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
12
返回列表 发新帖
楼主: tongxon

[已解决]find函数“运行时错误:'91':对象变量或 With 块变量未设置”

[复制链接]
 楼主| 发表于 2014-1-13 21:50 | 显示全部楼层
hwc2ycy 发表于 2014-1-13 21:40
你都知道问题在M2了,还不赶紧解决。

我无法理解的是,第一个薄片鉴定的钻孔程序运行正常,到了第二个薄片试验程序出错,这种真的不知道怎么解决,我也仔细看了错误的语句,就是找不到错误。
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
回复

使用道具 举报

发表于 2014-1-13 22:39 | 显示全部楼层    本楼为最佳答案   
  1. Sub 自动在勘探总表中备注()
  2.     Dim m, m1, m2, x, k, wh, wb
  3.     Set wh = ThisWorkbook.Sheets("岩样单")
  4.     Set wb = Workbooks.Open(ThisWorkbook.Path & "/4-衢宁初测2测段钻孔信息一览表01.03戴核.xlsx")
  5.     wh.Activate
  6.     For m = 7 To wh.Range("o65536").End(xlUp).Row
  7.         If Range("o" & m) = "√" Then
  8.             If Not [c:c].Find("Jz-*", After:=Range("c" & m), searchdirection:=xlPrevious) Is Nothing Then
  9.                 m1 = [c:c].Find("Jz-*", After:=Range("c" & m), searchdirection:=xlPrevious).Row
  10.                 If Not wb.Sheets(1).[b:b].Find(Range("c" & m1)) Is Nothing Then
  11.                     m2 = wb.Sheets(1).[b:b].Find(Range("c" & m1)).Row
  12.                     wb.Sheets(1).Range("al" & m2) = "薄片"
  13.                     k = k + 1
  14.                 End If
  15.             End If
  16.         End If

  17.         'm2 = wb.Sheets(1).[b:b].Find(Range("c" & m1)).Row
  18.         'wb.Sheets(1).Range("al" & m2) = "薄片"
  19.         'k = k + 1
  20.         'End If
  21.     Next m
  22.     MsgBox "共有" & k & "个数据"
  23. End Sub
复制代码
回复

使用道具 举报

发表于 2014-1-13 22:39 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2014-1-13 22:52 | 显示全部楼层
hwc2ycy 发表于 2014-1-13 22:39
代码就按你的思路,只改了点。

斑竹果然高手,{:171:}但小弟还有两个问题请教:
1.如何理解If Not [c:c].Find("Jz-*", After:=Range("c" & m), searchdirection:=xlPrevious) Is Nothing Then语句,我还没接触过not语句。
2.从形式上看你加的语句并不是比不可少的,我的原语句错误在哪里呢,我真的很困惑,报错的原因在哪里~
回复

使用道具 举报

发表于 2014-1-13 23:01 | 显示全部楼层
tongxon 发表于 2014-1-13 22:52
斑竹果然高手,但小弟还有两个问题请教:
1.如何理解If Not [c:c].Find("Jz-*", After:=Range("c ...

在FIND方法返回RANGE对象后,最好是先检测下是否有找到单元格。
这里用的IS NOTHING主要是检测对象变量是否有指定引用。


回复

使用道具 举报

 楼主| 发表于 2014-1-13 23:07 | 显示全部楼层
本帖最后由 tongxon 于 2014-1-13 23:33 编辑
hwc2ycy 发表于 2014-1-13 23:01
在FIND方法返回RANGE对象后,最好是先检测下是否有找到单元格。
这里用的IS NOTHING主要是检测对象变量是 ...


虽然我还不能确切知道错误的原因,但是我推测应该是这样的,第一次执行find函数函数后,如果没有版主加的判断语句,相当于m1的值不会引用到下一步的m2的find中,这可能是find函数的某个我还不知道的特性。请版主指教。
回复

使用道具 举报

 楼主| 发表于 2014-1-13 23:44 | 显示全部楼层
hwc2ycy 发表于 2014-1-13 23:01
在FIND方法返回RANGE对象后,最好是先检测下是否有找到单元格。
这里用的IS NOTHING主要是检测对象变量是 ...

我用你说的方法
Dim rg As Range
Set rg = wb.Sheets(1).[b:b].Find(Range("c" & m1))
Stop
测试了下,发现第一次薄片鉴定录入总表后,当找到第二个薄片鉴定的钻孔时,rg为nothing,错误就在此时出现。
为什么第二次无法找到正确的单元格呢,斑竹?
1.png
回复

使用道具 举报

发表于 2014-1-14 08:48 | 显示全部楼层
tongxon 发表于 2014-1-13 23:07
虽然我还不能确切知道错误的原因,但是我推测应该是这样的,第一次执行find函数函数后,如果没有版主加 ...

第2个FIND执行的前提是第一个FIND有找到了符合条件的单元格,然后取单元格的行号给M1
因为你第2个FIND要查找的内容在C列M1行单元格,所以,第一个FIND无果的情况下,第二个FIND不需要运行了。


回复

使用道具 举报

发表于 2014-1-14 08:49 | 显示全部楼层
tongxon 发表于 2014-1-13 23:44
我用你说的方法
Dim rg As Range
Set rg = wb.Sheets(1)..Find(Range("c" & m1))

这个你在F8时,要留意C列M1行的内容,然后表里手工找找是否有符合条件的数据。


回复

使用道具 举报

 楼主| 发表于 2014-1-15 22:28 | 显示全部楼层
hwc2ycy 发表于 2014-1-14 08:49
这个你在F8时,要留意C列M1行的内容,然后表里手工找找是否有符合条件的数据。

斑竹,在运用find函数时,经常出现这种情况,明明两者是一致的,但是find函数就是匹配不了(可参见http://www.excelpx.com/forum.php?mod=viewthread&tid=317690&pid=3626646&page=1&extra=#pid3626646),我试过,用格式刷将两者的格式刷为一致,结果不行,但是匹配值复制过去再运行就可以,这是什么原因造成的?
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-28 18:33 , Processed in 0.452458 second(s), 6 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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