修改Excel VBA宏以适配QuickBooks上传的表单格式需求
调整VBA宏输出起始行以适配QuickBooks上传需求
问题背景
我正在帮叔叔的公司开发Excel基础表单,用来加速会计流程。但目前Invoice_Save宏生成的数据是从Sheet2的首行开始写入的,不符合QuickBooks的上传要求,需要改成从第5行开始写入数据。我尝试新增了InvRow变量但没解决问题,求修改方案。
现有代码
Sub Invoice_Save() Dim InvRow As Long, LastItemRow As Long, InvItenRow As Long, TotalItems As Long Dim InvNumb As String With Sheet1 If .Range("J4").Value = Empty Or .Range("I6").Value = Empty Then MsgBox "Please Make sure to enter and Inovice # and Date" End If InvRow = Sheet2.Range("A999999").End(xlUp).Row + 1 'Invoice Row InvNumb = .Range("J4").Value 'Invoice Number Sheet2.Range("A" & InvRow).Value = Range("I6").Value 'Date Sheet2.Range("B" & InvRow).Value = InvNumb 'InvNumb Sheet2.Range("C" & InvRow).Value = Range("I8").Value 'Customer Sheet2.Range("D" & InvRow).Value = Range("I10").Value 'Provider Sheet2.Range("E" & InvRow).Value = Range("I12").Value 'Service1 Sheet2.Range("F" & InvRow).Value = Range("I16").Value 'Service2 Sheet2.Range("G" & InvRow).Value = Range("I20").Value 'Service3 Sheet2.Range("H" & InvRow).Value = Range("I24").Value 'Service4 Sheet2.Range("I" & InvRow).Value = Range("I28").Value 'Service5 Sheet2.Range("J" & InvRow).Value = Range("I32").Value 'Service6 Sheet2.Range("K" & InvRow).Value = Range("I36").Value 'Service7 Sheet2.Range("L" & InvRow).Value = Range("I40").Value 'Service8 Sheet2.Range("M" & InvRow).Value = Range("I44").Value 'Service9 Sheet2.Range("N" & InvRow).Value = Range("L14").Value 'Quantity1 Sheet2.Range("O" & InvRow).Value = Range("L18").Value 'Quantity2 Sheet2.Range("P" & InvRow).Value = Range("L22").Value 'Quantity3 Sheet2.Range("Q" & InvRow).Value = Range("L26").Value 'Quantity4 Sheet2.Range("R" & InvRow).Value = Range("L30").Value 'Quantity5 Sheet2.Range("S" & InvRow).Value = Range("L34").Value 'Quantity6 Sheet2.Range("T" & InvRow).Value = Range("L38").Value 'Quantity7 Sheet2.Range("U" & InvRow).Value = Range("L42").Value 'Quantity8 Sheet2.Range("V" & InvRow).Value = Range("L46").Value 'Quantity9 Sheet2.Range("W" & InvRow).Value = Range("I48").Value 'Notes End With End Sub
修改方案
- 强制起始行从第5行开始:调整
InvRow的计算逻辑,取“现有最后一行+1”和“5”中的较大值,确保即使Sheet2前4行是空的,也从第5行开始写入。 - 修复Range引用问题:原代码中部分
Range没有使用With Sheet1的前缀,会默认引用当前活动工作表,加上.确保始终从Sheet1取数。 - 补充退出逻辑:当必填项为空时,提示后直接退出宏,避免后续代码执行出错。
修改后的完整代码
Sub Invoice_Save() Dim InvRow As Long, InvNumb As String With Sheet1 ' 检查必填项,为空则提示并退出 If .Range("J4").Value = Empty Or .Range("I6").Value = Empty Then MsgBox "请确保已填写发票编号和日期" Exit Sub End If ' 计算写入行:取现有最后一行+1和5的较大值,确保从第5行开始 InvRow = WorksheetFunction.Max(Sheet2.Range("A999999").End(xlUp).Row + 1, 5) InvNumb = .Range("J4").Value ' 发票编号 ' 写入数据到Sheet2,所有Range引用都加上.确保指向Sheet1 Sheet2.Range("A" & InvRow).Value = .Range("I6").Value ' 日期 Sheet2.Range("B" & InvRow).Value = InvNumb ' 发票编号 Sheet2.Range("C" & InvRow).Value = .Range("I8").Value ' 客户 Sheet2.Range("D" & InvRow).Value = .Range("I10").Value ' 服务商 Sheet2.Range("E" & InvRow).Value = .Range("I12").Value ' 服务1 Sheet2.Range("F" & InvRow).Value = .Range("I16").Value ' 服务2 Sheet2.Range("G" & InvRow).Value = .Range("I20").Value ' 服务3 Sheet2.Range("H" & InvRow).Value = .Range("I24").Value ' 服务4 Sheet2.Range("I" & InvRow).Value = .Range("I28").Value ' 服务5 Sheet2.Range("J" & InvRow).Value = .Range("I32").Value ' 服务6 Sheet2.Range("K" & InvRow).Value = .Range("I36").Value ' 服务7 Sheet2.Range("L" & InvRow).Value = .Range("I40").Value ' 服务8 Sheet2.Range("M" & InvRow).Value = .Range("I44").Value ' 服务9 Sheet2.Range("N" & InvRow).Value = .Range("L14").Value ' 数量1 Sheet2.Range("O" & InvRow).Value = .Range("L18").Value ' 数量2 Sheet2.Range("P" & InvRow).Value = .Range("L22").Value ' 数量3 Sheet2.Range("Q" & InvRow).Value = .Range("L26").Value ' 数量4 Sheet2.Range("R" & InvRow).Value = .Range("L30").Value ' 数量5 Sheet2.Range("S" & InvRow).Value = .Range("L34").Value ' 数量6 Sheet2.Range("T" & InvRow).Value = .Range("L38").Value ' 数量7 Sheet2.Range("U" & InvRow).Value = .Range("L42").Value ' 数量8 Sheet2.Range("V" & InvRow).Value = .Range("L46").Value ' 数量9 Sheet2.Range("W" & InvRow).Value = .Range("I48").Value ' 备注 End With End Sub
内容的提问来源于stack exchange,提问作者Nicolas Kalman-Serdar
相关产品推荐
相关产品推荐

