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

基于发票号将RECEIPT表数据同步至DATABASE表的VBA按钮需求

VBA实现点击按钮同步收据数据至数据库表

需求说明

点击「UPDATE RECEIPT」按钮时,将RECEIPT工作表中标记为A的值,根据对应发票号B,添加或更新至DATABASE工作表的C列对应行。

修正后的完整代码

Sub UpdateReceiptToDatabase()
    Dim wsReceipt As Worksheet
    Dim wsDatabase As Worksheet
    Dim receiptInvoice As Variant
    Dim receiptValue As Variant
    Dim foundRow As Range
    
    ' 指定工作表对象(用表名而非索引,避免工作表顺序变动导致错误)
    Set wsReceipt = ThisWorkbook.Worksheets("RECEIPT")
    Set wsDatabase = ThisWorkbook.Worksheets("DATABASE")
    
    ' 获取RECEIPT表中的发票号和待同步的值(请根据实际单元格地址修改B、A对应的Range)
    receiptInvoice = wsReceipt.Range("B2").Value ' 假设发票号在B2
    receiptValue = wsReceipt.Range("A2").Value   ' 假设待同步值在A2
    
    ' 校验必要数据是否为空
    If IsEmpty(receiptInvoice) Then
        MsgBox "发票号不能为空,请检查!", vbExclamation
        Exit Sub
    End If
    
    ' 在DATABASE表中查找匹配的发票号(假设发票号在DATABASE的第一列,可根据实际修改)
    Set foundRow = wsDatabase.Columns(1).Find(What:=receiptInvoice, LookIn:=xlValues, LookAt:=xlWhole)
    
    If Not foundRow Is Nothing Then
        ' 找到匹配行,更新C列对应值
        wsDatabase.Cells(foundRow.Row, "C").Value = receiptValue
        MsgBox "已更新发票号为 " & receiptInvoice & " 的数据!", vbInformation
    Else
        ' 未找到匹配行,新增一行写入数据
        Dim lastRow As Long
        lastRow = wsDatabase.Cells(Rows.Count, 1).End(xlUp).Row + 1 ' 找到数据库表最后一行的下一行
        wsDatabase.Cells(lastRow, 1).Value = receiptInvoice ' 写入发票号
        wsDatabase.Cells(lastRow, "C").Value = receiptValue ' 写入待同步值
        MsgBox "已新增发票号为 " & receiptInvoice & " 的数据!", vbInformation
    End If
    
    ' 可选:清空RECEIPT表中已同步的单元格(根据需求调整)
    wsReceipt.Range("A2:B2").ClearContents
End Sub

代码关键说明

  • 工作表对象定义:用Worksheets("表名")替代SheetX,避免工作表顺序调整后代码失效
  • 发票号查找:使用Find方法精准匹配完整发票号,比循环遍历更高效
  • 新增/更新逻辑:通过判断foundRow是否为空,区分是更新已有数据还是新增行
  • 数据校验:增加发票号为空的判断,避免无效操作

原代码问题分析

  1. 工作表引用错误:硬编码Sheet10/Sheet9,工作表顺序变动会直接报错;且Sheets("Sheet9").Range("Receipt!H5")写法错误,跨表引用应直接用Sheets("Receipt").Range("H5")
  2. 逻辑不符需求:原代码是按日期匹配列,和你需要的「按发票号匹配行」逻辑完全不一致
  3. 无效语句:Sheets("Sheet10").Range("").Value = ""是空Range赋值,无任何作用

按钮绑定方法

右键点击「UPDATE RECEIPT」按钮 → 选择「指定宏」→ 选中上述UpdateReceiptToDatabase宏即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 23:20:42