VBA实现点击Sheet1任意行自动复制该行数据到发票模板对应位置
点击Sheet1任意行自动填充发票模板的VBA实现
- 完全保留原有发票模板的固定单元格映射关系,通过工作表选中事件替代硬编码的固定行宏,适配500余行账单的按需生成需求。
- 逻辑上取消原代码反复切换工作表、调用剪贴板的冗余操作,直接动态获取当前点击行的列值赋值给模板对应位置,运行无闪烁、速度更快。
实现步骤
- 按
Alt+F11打开VBA编辑器,在左侧工程导航栏双击Sheet1对象,打开对应代码编辑窗口。 - 将如下代码粘贴到编辑窗口中:
Private Sub Worksheet_SelectionChange(ByVal Target As Range) ' 仅当选中区域落在A:C列范围时触发,避免误操作 If Intersect(Target, Me.Range("A:C")) Is Nothing Then Exit Sub Dim currentRow As Long currentRow = Target.Row Application.ScreenUpdating = False ' 完全沿用原Macro13的目标单元格映射规则 With ThisWorkbook.Sheets("Sheet3") ' 账单号:当前行A列 → 模板C4单元格 .Range("C4").Value = Me.Cells(currentRow, "A").Value ' 名称:当前行B列 → C4偏移(0,4)即G4单元格 .Range("C4").Offset(0, 4).Value = Me.Cells(currentRow, "B").Value ' 金额:当前行C列 → C4偏移(17,3)即F21单元格 .Range("C4").Offset(17, 3).Value = Me.Cells(currentRow, "C").Value End With Application.ScreenUpdating = True End Sub
效果说明
- 在Sheet1的账单列表中,点击任意一行的A/B/C列单元格,系统会自动抓取该行三个列的数值,按照原有顺序填充到发票模板的对应位置,无需手动执行宏。
- 触发范围做了限制:点击A:C列以外的区域不会触发填充,避免误操作打乱模板内容。
- 三个填充位置和原固定行代码的执行结果完全一致,不会改动已调试好的发票格式。
内容的提问来源于stack exchange,提问作者Malcolm Dias
相关产品推荐
相关产品推荐

