VBA UserForm中使用DTPicker查找工作表日期触发错误91的求助
问题解决:DTPicker控件查找日期触发Error 91
错误原因
Error 91的本质是Cells.Find方法未找到匹配的日期,返回了Nothing,此时直接访问.Row属性就会触发“对象变量或With块变量未设置”的错误。用Date能正常运行,是因为工作表A列恰好存在当天的日期,而DTPicker选定的日期要么不存在,要么查找参数、数据格式不匹配导致查找失败。
修正方案
1. 先捕获查找结果,判断是否找到
永远不要直接对Find的结果调用属性,先将结果存入Range对象,检查是否为Nothing后再操作。
2. 明确查找范围与参数
指定A列为查找范围,添加LookIn、LookAt等参数,避免默认参数导致的匹配偏差。
3. 统一日期格式/类型
确保DTPicker的日期与A列数据类型一致:如果A列是纯日期(无时间),提取DTPicker的纯日期部分;如果A列是文本型日期,需转换查找值为对应文本格式。
修正代码示例
Dim input_row As Long Dim foundCell As Range Dim targetDate As Date ' 提取DTPicker的纯日期(忽略时间部分) targetDate = DateValue(DTPicker1.Value) ' 限定A列查找,明确匹配规则 Set foundCell = Columns("A").Find( _ What:=targetDate, _ LookIn:=xlValues, _ LookAt:=xlWhole, _ MatchCase:=False) ' 判断是否找到匹配项 If Not foundCell Is Nothing Then input_row = foundCell.Row ' 这里添加找到行后的处理逻辑 MsgBox "目标日期位于第" & input_row & "行" Else MsgBox "A列未找到选定的日期" End If
额外排查点
- 检查A列单元格格式:如果A列是文本格式存储的日期,需将查找值转换为文本,比如把
What:=targetDate改为What:=CStr(targetDate),同时确保文本格式与A列一致(如"yyyy/mm/dd"或"yyyy-mm-dd")。 - 若A列日期包含时间,可将
targetDate改为CDbl(DTPicker1.Value),用Excel的日期数值进行匹配。
内容的提问来源于stack exchange,提问作者Maurus
相关产品推荐
相关产品推荐

