macros:如果单选button然后复制公式下来一个范围

我的概率是这样的:

如果单选button打开,我希望能够使用macros来复制和计算公式的单元格范围。
但是我不知道如何在公式里设置variables。 下面的macros应将公式复制到所示范围(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. replace; 在你的公式中,; 是你的本地设置,但是.Formula使用英文设置!
  2. 如果你想引用每一列,你需要把i放在quoatation马克之外,即而不是=IFERROR(((C & i)... write =IFERROR(((C" & i & ")...
  3. 不需要循环每个单元格并设置公式。 如果您在公式中正确使用$ ,则可以用一个公式replace所有公式: =IFERROR(($C12-$B12)*I$6/($E$7-$E$6),"")
  4. 更好的使用.FormulaR1C1 – 这样,你的公式也可以工作,当你将它应用到其他范围。 要轻松转换公式,请将其正常input到单元格中并运行? Selection.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