首页 > 解决方案 > 如何使用vba获取同一单元格中的百分比值

问题描述

我在工作表 7 中有一个范围,范围(“A1:A10”),我正在尝试下面的代码以在同一个单元格中获取百分比值,但是每当我在 Range(“A1:A10”中键入一个数字时,Excel 就会挂起),有时,它给我一个运行时错误“28”,堆栈空间不足。但不能显示任何行号或突出显示该行。

例如,我正在尝试这个

如果我在 A1 到 A10 范围内键入任何数字,例如单元格 A2 中的 1499,则值应在单元格 A2(相同单元格)中更改为 1338.46,因为 1338.46 是 1499 的 89.29%。

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    
Dim rngCell As Range, m, v

For Each rngCell In Range("A1:A10")

        v = rngCell.Value

        If Len(v) > 0 Then

m = v * 89.29 / 100

If Not IsError(m) Then rngCell.Value = m

End If

Next

End Sub

标签: vba

解决方案


相同单元格计算(工作表更改)

  • 您必须在计算之前关闭事件,然后再打开它们(或在出现错误的情况下)。

编码

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    
    Const rngAddress As String = "A1:A10"
    Const Perc As Double = 89.29
    
    Dim rng As Range
    Set rng = Intersect(Target, Range(rngAddress))
    
    If rng Is Nothing Then
        Exit Sub
    End If
    
    Dim rngCell As Range
    Dim v As Variant
    
    Application.EnableEvents = False
    On Error GoTo SafeExit
    
    For Each rngCell In rng.Cells
        v = rngCell.Value
        If VarType(v) = vbDouble Then
            rngCell.Value = v * Perc / 100
        End If
    Next

SafeExit:
    Application.EnableEvents = True

End Sub

推荐阅读