VBA代码查找指定日期返回行失败,始终得到0值求助
问题修复:VBA查找日期返回行号始终为0
问题根源
你的代码核心问题是将日期变量格式化为字符串后去匹配单元格内容,但Excel中的日期本质是存储为数值的,单元格显示的日期格式只是数值的展示形式。用格式化后的字符串去匹配,会因为单元格显示格式和你指定的MM/DD/YY不一致导致匹配失败,最终返回0。
修正后的代码
Dim monthEnd As Date Dim rngFound As Range Dim ReturnRow As Long ' 行号是数值,改用Long类型 ' 获取输入日期,CDate会自动识别合法日期格式 monthEnd = CDate(InputBox("请输入月末日期", "月末日期", "格式示例:MM/DD/YY")) ' 直接引用第12个工作表,避免激活操作 With Worksheets(12) ' 直接用日期变量查找,不转字符串,匹配Excel存储的日期数值 Set rngFound = .Columns("K").Find(What:=monthEnd, _ LookIn:=xlValues, _ LookAt:=xlWhole, _ SearchOrder:=xlByRows, _ SearchDirection:=xlNext, _ MatchCase:=False, _ SearchFormat:=False) End With ' 判断是否找到匹配项 If rngFound Is Nothing Then ReturnRow = 0 Else ReturnRow = rngFound.Row End If
关键修改说明
- 取消日期格式化:直接使用
monthEnd日期变量作为查找值,让Excel匹配单元格存储的日期数值,不受显示格式影响。 - 优化工作表引用:去掉
Activate操作,直接通过Worksheets(12)引用目标工作表,代码更高效且避免切换工作表的干扰。 - 修正变量类型:
ReturnRow改为Long类型,行号是整数数值,比字符串类型更合适。
额外排查建议
如果还是找不到,检查K列的日期是否为真正的日期格式:
- 选中K列单元格,右键查看单元格格式,如果是“文本”格式,需要先转为日期格式(选中列→数据→分列→完成,快速转换文本型日期为数值型日期)。
内容的提问来源于stack exchange,提问作者VMose45
相关产品推荐
相关产品推荐

