You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 00:40:17