宏:如果单选按钮打开,则沿范围复制公式



我的概率是这样的:

如果单选按钮打开,我希望能够使用宏在一系列单元格中复制和计算公式。
但是我不知道如何在公式中设置变量。下面的宏应将公式复制到显示的范围(I12:I252、K12:K252、M12:M252)。
公式本身包括减去 C12:C252 和 B12:B252 范围内的两个单元格。我似乎无法引用这些单元格。我认为这就是问题所在...

无论如何,它不起作用。任何帮助将不胜感激。

谢谢!

Dim shp1 As Shape
Dim shp2 As Shape
Dim i As Long
On Error Resume Next
Set shp1 = Worksheets("Worksheet").Shapes("Button 1")
Set shp2 = Worksheets("Worksheet").Shapes("Button 2")
If shp1.ControlFormat.Value = xlOn Then
    MsgBox "Auto Calculating"
    For i = 12 To 252
        Range("I" & i).Formula = "=IFERROR(((C & i)-(B & i))*I6/(E7-E6);"")"
        Range("K" & i).Formula = "=IFERROR(((C & i)-(B & i))*J6/(E7-E6);"")"
        Range("M" & i).Formula = "=IFERROR(((C & i)-(B & i))*K6/(E7-E6);"")"
    Next i
Else
    If shp2.ControlFormat.Value = xlOn Then
        MsgBox "Manually insert calculation"
    End If
End If

一些改进:

  1. 将公式中的;替换为 ,;是您本地的设置,但.Formula使用英语设置!
  2. 如果要引用每一列,则需要将i放在引号之外,即=IFERROR(((C & i)...=IFERROR(((C" & i & ")...
  3. 无需循环每个单元格并设置公式。如果在公式中正确使用$,则可以将所有公式替换为一个公式:=IFERROR(($C12-$B12)*I$6/($E$7-$E$6),"")
  4. 更好地使用.FormulaR1C1 - 这样,当您将其应用于其他范围时,您的公式也将起作用。要轻松转换公式,请将其正常键入单元格,并在VBA即时窗口中运行? Selection.FormulaR1C1。上面的公式转换为=IFERROR((RC3-RC2)*R6C/(R7C5-R6C5),"")
  5. 不要对单元格引用进行硬编码(在您的情况下I12:K252)。最好将此范围分配给命名范围,并将其用作参考。这样,如果以后添加/删除行或列,您的代码也将起作用。
  6. 不要使用On Error Resume Next!这是监督应修复错误的邀请
  7. 可选:除了直接在VBA中访问控件之外,您还可以将每个控件分配给一个单元格,按照步骤4中的名称命名此单元格,并使用此名称引用。使您的代码更灵活/更简单!

总而言之,我最终得到:

Public Sub YourSub()
    If Range("SwitchOne") Then
        Range("YourRange").FormulaR1C1 = _
            "=IFERROR((RC3-RC2)*R6C/(R7C5-R6C5),"""")"
    Else
        If Range("SwitchTwo") Then
            MsgBox "Manually insert calculation"
        End If
    End If
End Sub

相关内容

最新更新