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
几点改进:
- replace
;
在你的公式中,
。;
是你的本地设置,但是.Formula
使用英文设置! - 如果你想引用每一列,你需要把
i
放在quoatation马克之外,即而不是=IFERROR(((C & i)...
write=IFERROR(((C" & i & ")...
- 不需要循环每个单元格并设置公式。 如果您在公式中正确使用
$
,则可以用一个公式replace所有公式:=IFERROR(($C12-$B12)*I$6/($E$7-$E$6),"")
- 更好的使用
.FormulaR1C1
– 这样,你的公式也可以工作,当你将它应用到其他范围。 要轻松转换公式,请将其正常input到单元格中并运行? Selection.FormulaR1C1
VBA即时窗口中的? Selection.FormulaR1C1
。 上述公式转换为=IFERROR((RC3-RC2)*R6C/(R7C5-R6C5),"")
- 不要硬编码单元格引用(在你的情况下
I12:K252
)。 更好地将这个范围分配给一个命名的范围,并将其用作参考。 这样,如果以后添加/删除行或列,代码也可以工作。 - 不要使用
On Error Resume Next
! 这是一个监督应该修复的错误的邀请 - 可选:也可以直接在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