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

VBA运行时错误1004:Application.WorksheetFunction.Match无法获取Match属性求助

问题描述

我尝试创建多个用户窗体来更新我的数据表,我有一个CTR汇总信息数据表,由于需要填写的列太多,将所有信息放在同一个表单里会非常混乱,因此我根据需要更新的板块拆分了多个分段表单。
CTR汇总信息数据表
点击更新命令按钮后会跳转到更新表单,从列表框中拉取我需要的对应板块数据信息,如下图所示:
更新表单
我修改文本框中的值后点击更新,就抛出错误:Application.WorksheetFunction.Match Unable to get the Match Property of the Work,以下是我的代码:

Private Sub UPDATE_Click()
    If MsgBox(" Check the Data Again ", vbYesNo, "Proceed to Subcontractor Form Information if Any") = vbYes Then
        ' write the data to the worksheet from controls
        Call WriteDataToTheSheet
        ' empty the textboxes
        Call EmptyTextBoxes
    Else
        ' empty the textboxes
        Call EmptyTextBoxes
    End If 
End Sub
'UPDATE CODE
Private Sub WriteDataToTheSheet()
    With Sheet2
        Dim selectedRow As Long
        LRow = .Range("A" & .Rows.Count).End(xlUp).row
        selectedRow = Application.WorksheetFunction.Match(WONUMBER.Value, Sheet2.Range("I2:I" & LRow), 0)
        
        .Cells(selectedRow, 1).Value = Now
        .Cells(selectedRow, 2).Value = NAMACLIENT.Value
        .Cells(selectedRow, 3).Value = BLANKETNUMBER.Value
        .Cells(selectedRow, 4).Value = CTRNUMBER.Value
        .Cells(selectedRow, 5).Value = PICBIRU.Value
        .Cells(selectedRow, 6).Value = PICCLIENT.Value
        .Cells(selectedRow, 7).Value = PROJECTSTATUS.Value
        .Cells(selectedRow, 8).Value = PROJECTTITLE.Value
        .Cells(selectedRow, 9).Value = WONUMBER.Value
        .Cells(selectedRow, 10).Value = WODIR.Value
        .Cells(selectedRow, 11).Value = WOSTARTDATE.Value
        .Cells(selectedRow, 12).Value = WOENDDATE.Value
        .Cells(selectedRow, 13).Value = REMARKS.Value
        .Cells(selectedRow, 14).Value = WAPU.Value
        .Cells(selectedRow, 17).Value = ENGVALUE.Value
        .Cells(selectedRow, 18).Value = REIMBURSABLE.Value
    End With
End Sub

补充说明:
Excel数据截图:
Excel数据截图
调试代码截图:
调试代码截图

问题原因及修复方案

错误原因

这个报错的核心是Application.WorksheetFunction.Match在指定范围内找不到和WONUMBER.Value匹配的值时,会直接抛出运行时错误,常见触发场景有3种:

  1. WONUMBER文本框的内容和I列存储的WO编号格式不匹配,比如I列是数字格式、文本框取到的是字符串格式,或者内容前后多了空格、不可见字符
  2. 要匹配的WO编号确实不存在于指定的搜索范围内
  3. 原代码用A列统计最后一行,若A列存在空值、I列数据比A列更长,会导致搜索范围漏掉后面的行,无法匹配到目标值

修复代码

把WriteDataToTheSheet的逻辑替换为以下内容即可:

Private Sub WriteDataToTheSheet()
    With Sheet2
        Dim selectedRow As Variant ' 用Variant类型接收,匹配不到时会存储错误值
        Dim LRow As Long
        ' 改用I列统计最后一行,避免搜索范围漏行
        LRow = .Range("I" & .Rows.Count).End(xlUp).Row
        ' 改用Application.Match不会直接抛错,返回错误值可被捕获
        selectedRow = Application.Match(Trim(WONUMBER.Value), .Range("I2:I" & LRow), 0)
        ' 先判断是否匹配到结果
        If IsError(selectedRow) Then
            MsgBox "找不到WO编号为【" & WONUMBER.Value & "】的记录,请检查编号是否正确", vbCritical
            Exit Sub
        End If
        ' Match返回的是搜索范围(从I2开始)的相对行,加1才是工作表实际行号
        selectedRow = selectedRow + 1
        
        ' 原有赋值逻辑保持不变
        .Cells(selectedRow, 1).Value = Now
        .Cells(selectedRow, 2).Value = NAMACLIENT.Value
        .Cells(selectedRow, 3).Value = BLANKETNUMBER.Value
        .Cells(selectedRow, 4).Value = CTRNUMBER.Value
        .Cells(selectedRow, 5).Value = PICBIRU.Value
        .Cells(selectedRow, 6).Value = PICCLIENT.Value
        .Cells(selectedRow, 7).Value = PROJECTSTATUS.Value
        .Cells(selectedRow, 8).Value = PROJECTTITLE.Value
        .Cells(selectedRow, 9).Value = WONUMBER.Value
        .Cells(selectedRow, 10).Value = WODIR.Value
        .Cells(selectedRow, 11).Value = WOSTARTDATE.Value
        .Cells(selectedRow, 12).Value = WOENDDATE.Value
        .Cells(selectedRow, 13).Value = REMARKS.Value
        .Cells(selectedRow, 14).Value = WAPU.Value
        .Cells(selectedRow, 17).Value = ENGVALUE.Value
        .Cells(selectedRow, 18).Value = REIMBURSABLE.Value
    End With
End Sub

如果修改后仍然提示找不到记录,确认WO编号是数字类型的话,可以把匹配语句里的Trim(WONUMBER.Value)改成Val(WONUMBER.Value)统一格式即可。

内容的提问来源于stack exchange,提问作者muntun

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 20:24:03