在Excel VBA中实现折扣和撤销折扣功能

        Excel VBA:这段VBA代码根据Sheet2中提供的折扣系数对Sheet1中的G列单价 执行折扣。它还包括一个“撤销折扣”功能,可以恢复原始单价。

该代码由两个主要子过程组成:

  1. ApplyDiscount_Click:当单击“应用折扣”按钮时触发。它将折扣应用于指定的单元格范围,并存储原始值以供以后撤销恢复使用。

  2. 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

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值