Excel VBA:这段VBA代码根据Sheet2中提供的折扣系数对Sheet1中的G列单价 执行折扣。它还包括一个“撤销折扣”功能,可以恢复原始单价。
该代码由两个主要子过程组成:
-
ApplyDiscount_Click
:当单击“应用折扣”按钮时触发。它将折扣应用于指定的单元格范围,并存储原始值以供以后撤销恢复使用。 -
UndoDiscount_Click
:当单击“撤销折扣”按钮时触发。它将单元格的原始值恢复以撤销折扣。
以下是VBA代码:
' 声明一个全局变量来存储单元格的原始值
Dim originalValues As Variant
' 当单击“应用折扣”按钮时触发的子例程
Private Sub ApplyDiscount_Click()
Dim rng As Range
Dim factor As Double
Dim lastRow As Long
Dim dataRange As Range
' 确定Sheet1中列G中最后一个带有数据的行
lastRow = Sheet1.Cells(Sheet1.Rows.Count, "G").End(xlUp).Row
' 将数据范围设置为从行1到最后一个带有数据的行的列G中的单元格范围
Set dataRange = Sheet1.Range("G1:G" & lastRow)
' 存储数据范围中单元格的原始值
originalValues = dataRange.Value
' 禁用屏幕更新和事件处理以提高性能
Application.ScreenUpdating = False
Application.EnableEvents = False
' 从Sheet2的单元格B1获取折扣
factor = Sheet2.Range("B1").Value
' 遍历数据范围中的每个单元格
For Each rng In dataRange
' 检查单元格是否包含数值
If IsNumeric(rng.Value) And rng.Value <> "" Then
' 将折扣应用于单元格值
rng.Value = rng.Value * factor
End If
Next rng
' 启用屏幕更新和事件处理
Application.EnableEvents = True
Application.ScreenUpdating = True
' 启用“撤销折扣”按钮
UndoDiscount.Enabled = True
End Sub
' 当单击“撤销折扣”按钮时触发的子例程
Private Sub UndoDiscount_Click()
Dim lastRow As Long
Dim dataRange As Range
' 确定Sheet1中列G中最后一个带有数据的行
lastRow = Sheet1.Cells(Sheet1.Rows.Count, "G").End(xlUp).Row
' 将数据范围设置为从行1到最后一个带有数据的行的列G中的单元格范围
Set dataRange = Sheet1.Range("G1:G" & lastRow)
' 禁用屏幕更新和事件处理以提高性能
Application.ScreenUpdating = False
Application.EnableEvents = False
' 恢复数据范围中单元格的原始值
dataRange.Value = originalValues
' 启用屏幕更新和事件处理
Application.EnableEvents = True
Application.ScreenUpdating = True
' 禁用“撤销折扣”按钮
UndoDiscount.Enabled = False
End Sub