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

能否通过InputBox输入值匹配其他工作表列标题并写入对应数据

VBA按输入日期匹配库存表列写入数据实现方案

你的需求可以通过VBA的Find方法实现,你原有代码存在逻辑分支错误,查找逻辑被放在了不触发的分支中,修正后的完整代码如下:

Private Sub Label1_Click()
    ' 变量声明
    Dim inputValue As Variant
    Dim inputValue2 As Variant
    Dim lowerLimit As Long
    Dim upperLimit As Long
    Dim SearchRange As Range
    Dim foundCol As Range
    Dim ws As Worksheet
    
    ' 当月日期范围限制
    lowerLimit = 1
    upperLimit = 31
    
    ' 输入并校验日期
    inputValue = InputBox("请输入日期")
    If Not IsNumeric(inputValue) Then
        MsgBox "日期只能为数字!"
        Exit Sub
    End If
    If inputValue < lowerLimit Or inputValue > upperLimit Then
        MsgBox "日期范围只能是1-31!"
        Exit Sub
    End If
    
    ' 输入并校验数量
    inputValue2 = InputBox("请输入使用数量")
    If Not IsNumeric(inputValue2) Then
        MsgBox "数量只能为数字!"
        Exit Sub
    End If
    
    ' --------------------
    ' 查找匹配日期的列逻辑
    ' --------------------
    ' 此处指定要操作的库存工作表,如需遍历所有非第一个工作表可替换为循环逻辑
    Set ws = ThisWorkbook.Worksheets("Sheet2")
    ' 设定标题行查找范围,对应你原代码的D2到AH2
    Set SearchRange = ws.Range("D2:AH2")
    
    ' 完全匹配查找输入的日期
    Set foundCol = SearchRange.Find( _
        What:=inputValue, _
        LookIn:=xlValues, _
        LookAt:=xlWhole, _
        MatchCase:=False _
    )
    
    ' 判断是否找到匹配列
    If Not foundCol Is Nothing Then
        ' 写入数量到对应列的第3行(标题行下第一行,可根据你实际需要修改行号)
        ' 如果你需要匹配指定物料行,可以再加一次Find查找物料名称对应的行号
        ws.Cells(3, foundCol.Column).Value = inputValue2
        MsgBox "数据写入成功!"
    Else
        MsgBox "未找到匹配的日期列,请检查库存表标题设置!"
    End If
End Sub

关键逻辑说明

  • 修正了原代码的分支错误,将查找逻辑放在两次输入校验都通过的路径下
  • 使用Find方法的LookAt:=xlWhole参数实现完全匹配,避免11匹配到1这类模糊匹配错误
  • 代码默认写入匹配列的第3行,如果你需要写入对应物料的行,可新增查找物料名称的逻辑获取行号后替换3即可
  • 如果你需要操作所有库存工作表,可新增循环遍历ThisWorkbook.Worksheets的逻辑,跳过第一个输入用的工作表即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 01:36:01