能否通过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
相关产品推荐
相关产品推荐

