您好,根据您的需求,我为您提供以下的 VBA 代码实现:
Option Explicit
' 定义全局变量,用于记录当前的单号
Public currentOrderNumber As Long
Private Sub Workbook_Open()
' 在工作簿打开时,初始化单号为1
currentOrderNumber = 1
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
' 监听Sheet1中G2单元格的改变,当其有变化时,更新数据到Sheet2
If Target.Address = "$G$2" Then
' 当G2单元格被修改时,将数据复制到Sheet2中
Dim orderNumber As Long
orderNumber = currentOrderNumber ' 获取当前单号
Worksheets("Sheet2").Cells(orderNumber, 1).Value = orderNumber ' 保存单号
Worksheets("Sheet2").Cells(orderNumber, 2).Value = Worksheets("Sheet1").Range("B2").Value ' 保存客户名称
Worksheets("Sheet2").Cells(orderNumber, 3).Value = Worksheets("Sheet1").Range("F2").Value ' 保存送货日期
Worksheets("Sheet2").Cells(orderNumber, 4).Value = Worksheets("Sheet1").Range("G2").Value ' 保存订单号
' 更新单号为下一个值
currentOrderNumber = currentOrderNumber + 1
' 清空Sheet1中B2、F2、G2单元格的数据
Worksheets("Sheet1").Range("B2").ClearContents
Worksheets("Sheet1").Range("F2").ClearContents
' 注意:这里没有清空G2单元格,因为它是一个公式单元格,需要保留
End If
End Sub
Private Sub Workbook_BeforePrint(Cancel As Boolean)
' 打印前自动保存数据
Dim lastRow As Long
lastRow = Worksheets("Sheet2").Range("A" & Rows.Count).End(xlUp).Row ' 获取最后一行
Worksheets("Sheet2").Range("A1:D" & lastRow).Copy Destination:=Worksheets("Sheet2").Range("F1") ' 复制数据到Sheet2的F1单元格(方便打印)
Worksheets("Sheet2").Range("A2:D" & lastRow).ClearContents ' 清空Sheet2中保存的数据
currentOrderNumber = 1 ' 重置单号为1
End Sub