find方法是不是有莫名其妙的bug
vba吧
全部回复
仅看楼主
level 1
我用find找“8:15”这种时间格式的单元格然后返回行号,刚写完第一次没问题,然后批量做测试跑到第遍Excel闪退之后,让另一个人试就死活在find这个地方一直nothing跑不下去,然后我自己试也不能跑了,一直nothing。
把对应单元格格式固定成“8:15”不行,在find之前用“h:mm”刷一遍格式也不行,就是一直nothing,然后Ctrl+f调用查找与替换功能,发现查找的内容变成了“8:15:00 AM”而不是我要的“8:15”,然后尝试把要被find的单元格格式改成“h:mm:ss AM/PM”之后就能找到并返回行号。
我现在到底怎么样才能让find去找我想要的“8:15”而不是“8:15:00 AM”,它为什么会变成这个格式啊[怒]
2025年04月07日 09点04分 1
level 8
find不行吧,包含8:15就会被搜索到
2025年04月08日 00点04分 2
level 8
值变化试试自定义格式给他固定住
2025年04月08日 01点04分 3
我把i列的格式改成了8:15这种格式,然后在这一列里面find“8:15”,但实际上它在给我find“8:15:00 AM”,导致我i列里面就算有“8:15”它也返回nothing[怒] 明明我find给what附的变量值就是8:15,而且我还f8一行一行摁下来,到了what的变量显示的值就是8:15,可它实际就是给我在找“8:15:00 AM”不是在找“8:15”
2025年04月08日 04点04分
@应龙丶庚辰 然后就算我把给what赋值的变量先cdate一下改个“h:mm”的格式,最终跑下来还是在给我find“8:15:00 AM”,我把i列改成这个格式之后就能find到,固定成“8:15”的格式就什么都find不到[怒]
2025年04月08日 04点04分
@应龙丶庚辰 把你FIND的代码发出来看看你是怎么写的
2025年04月08日 05点04分
回复 ISD_狮子座 :在5楼,有劳看一下了[困成狗]
2025年04月08日 10点04分
level 4
find的方法都没搞清楚呀
2025年04月08日 02点04分 4
level 1
先说明一下,表格在公司电脑,我不能拍照不能外发,所以只能给出find这个位置的代码,其他的一个是没问题一个是我记不住。[狂汗]
dim a as date
dim found as range
a 的值来源于i列,但是经过了几次单元格引用,a本身不是从i列里面引用的单元格,所以用find找a在i列的位置。
set found = columns("i
:i").find(what:=a,lookin:=xlvalues,lookat:=xlwhole)
就只是这样,found的结果是nothing。
然后把i列固定成"8:15"的格式,把a也固定成"8:15"的格式,也是nothing,这里再强调一次,a的值来源于列,手动Ctrl+f是能找到的。
接着我手动f8一行一行摁,能看到a被赋值"8:15",i列第二个单元格也是"8:25",但是found的结果依旧是nothing,这个时候Ctrl+f调出查找于替换功能发现查找的值写的是"8:15:00 AM"。
我认为是a的值可能转错了,所以在find之前先把a格式化一遍a=format (xx,"h:mm"),但是find依旧查找不到a的值,此时再次Ctrl+f调出查找于替换功能发现查找的值依旧写的是"8:15:00 AM"。
然后我认为是find保留了上次的格式,所以加了SearchFormat:=false,但是依旧不行,找不到a。
直到我把i列的格式改成"8:15:00 AM",此时find才能正确找到a的值并返回a在i列的单元格,可a被赋予的值在立即窗口里面看到的明明是"8:15"。
2025年04月08日 10点04分 5
典型的数据类型问题,你DIM的时候把A字义为DATE类型,但找的又是字符型的数据,肯定有问题啊
2025年04月08日 10点04分
@ISD_狮子座 i列是时间啊,我把a定义成string也一样找不到,会去找"0.3*"这种小数,而且我 i列把格式改成am那种之后就能找到a了
2025年04月08日 10点04分
@应龙丶庚辰 我明天回去试一下只dim a不赋数据类型行不行吧,虽然我现在已经不用find来找直接用xlookup找到之后再在vba里引想要的单元格
2025年04月08日 10点04分
@应龙丶庚辰 你的数情情况不太了解,但这个可以肯定的就是数据类型的问题,自己研究一下吧
2025年04月09日 00点04分
level 5
@应龙丶庚辰
你看这两图,F列是文本格式,E列是日期格式,你FINDF列可以用Find("8:15", LookIn:=xlValues, LOOKAT:=xlWhole),这是绝对没问题的,但这是文本格式,单元格的.VALUE出的也是这个数据,但如果是E列的话,8:15那个单元格的VALUE值是0.34375 ,那是必然找不到结果的,所以才需要你转成日期格式才能找到
2025年04月09日 05点04分 6
你想直接找到8:15也不是不可以的,但必须转义,例如.Find(CVar("8:15"), LookIn:=xlValues, LOOKAT:=xlWhole)
2025年04月09日 05点04分
我知道问题在哪了,是因为date储存的时间点格式就算f8或立即窗口显示的是"8:15",对vba来说它的输出值只会是"8:15:00 AM",所以我对date储存的变量重新改格式成"h:mm"是不生效但也不会报错。解决的方法就是用string储存那个变量然后再用format格式成"h:mm",这样就变成了你这里说的以文本格式去做查找,或者是把find的检索范围改格式成"8:15:00 AM",这样用date储存也没问题
2025年04月09日 09点04分
@应龙丶庚辰 我不理解vba对date储存的时间点的认知为什么会是那样,但是好像的确是它只会输出它认为的"8:15:00 AM"这种"标准时间格式"[困成狗]
2025年04月09日 09点04分
@应龙丶庚辰 其实这个不是它认为,这个是你系统的时间格式,你修改系统时间格式后,这个输出也会相应改变的
2025年05月15日 06点05分
1