宏:如果单选按钮然后复制公式下来一个范围

时间:2013-11-15 08:51:02

标签: excel vba excel-vba

我的疑问是:

我希望能够使用宏来复制&如果单选按钮打开,则计算一系列单元格的公式 但我不知道如何在公式中设置变量。下面的宏应该将公式复制到显示的范围(I12:I252,K12:K252,M12:M252)。
该公式本身包括减去C12:C252和C25的范围内的两个细胞。 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 个答案:

答案 0 :(得分:2)

几点改进:

  1. 将公式中的;替换为,;是您的当地人 设置,但.Formula使用英文设置!
  2. 如果您想引用每一列,则需要将i置于quoatation标记之外,即代替=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命名此单元格,并使用此名称引用。使您的代码更灵活/更简单!
  8. 总而言之,我最终得到了:

    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