如何在Excel中复制dynamicvba单元格中的所有表格信息
我有一张桌子,如下所示
另外我在所有的OptionButtons
都有vba代码。 我的OptionButtons
代码如下所示:
Private Sub OptionButton11_Click() Worksheets("Sheet1").Activate Range("$J$6").Activate ActiveCell.FormulaR1C1 = "=RC[-5]*4" ActiveCell.Offset(5, 0).Select ActiveCell.Select ActiveCell.FormulaR1C1 = "=SUM(R[-7]C:R[-1]C)" End Sub
像这样:
Private Sub Worksheets("Sheet1").Activate Range("$J$8").Activate ActiveCell.FormulaR1C1 = "=RC[-5]*2" ActiveCell.Offset(3, 0).Select ActiveCell.Select ActiveCell.FormulaR1C1 = "=SUM(R[-7]C:R[-1]C)" End Sub
我在同一张表上有45个这样的表格,我不想用每个单选button的代码。 我的代码适用于第一张桌子,但是我怎样才能复制这个rest?
我想在附件中做一张表
-
您必须先了解代码所遵循的模式。 如果你可以识别模式,那么你所要做的就是对所有的button使用一个非常简单的代码。
-
此外,而不是使用
ActiveX Option Button
,使用Form Control Option Button
。 原因是我们可以使用Assign Macro
将所有选项button绑定到相同的代码 -
我们将使用的下一个技巧是命名选项button的顺序,以便我们可以使用数字(例如“Option Button 1”中的ex:1)进行计算
以下是如何使用多个button来实现相同function的非常基本的示例
假设我们的工作表是这样的。 现在我们想要的是我们select相应行中的单元格J的button应该有一些价值。
把这个代码放在一个模块中。 接下来在每个Option Button
,右键单击并点击Assign Macro
。 select你写的通用代码。 在这个例子中,我们将selectSample
。
请注意,我们如何使用Application.Caller
来获取选项button的名称来实现我们想要的。
Sub Sample() Dim i As Long i = Val(Trim(Replace(Application.Caller, "Option Button", ""))) Sheet1.Range("J" & i + 1).Value = "Blah Blah Blah" End Sub
在你的情况下,代码可以写成这样的东西。 您必须确定模式并相应地修改下面的代码。
Sub Sample() Dim i As Long Dim multiplier As Long i = Val(Trim(Replace(Application.Caller, "Option Button", ""))) multiplier = i + 3 With Sheet1.Range("J" & i + 5) .FormulaR1C1 = "=RC[-5]" & "*" & multiplier .Offset(i + 5, 0).FormulaR1C1 = "=SUM(R[-7]C:R[-1]C)" End With End Sub
注意 :上述操作也可以通过ActiveX控件来实现,但是您必须使用如VBA中所示的数组控件- 控件数组
您可以编写一个vba代码,将循环中的子例程添加到模块中。 例如,如果你想添加子程序Private Sub OptionButton1(),Private Sub OptionButton2(),Private Sub OptionButton3()等等,
Sub AddProcedureToModule() Dim VBProj As VBIDE.VBProject Dim VBComp As VBIDE.VBComponent Dim CodeMod As VBIDE.CodeModule Dim LineNum As Long Const DQUOTE = """" ' one " character Set VBProj = ActiveWorkbook.VBProject Set VBComp = VBProj.VBComponents("Module1") Set CodeMod = VBComp.CodeModule With CodeMod For i = 1 To 5 LineNum = .CountOfLines + 1 .InsertLines LineNum, "Private Sub OptionButton" & i & "_Click()" LineNum = LineNum + 1 .InsertLines LineNum, " MsgBox " & DQUOTE & "Hello World" & DQUOTE LineNum = LineNum + 1 .InsertLines LineNum, "End Sub" Next i End With End Sub
这会将下面的代码插入到Module1中
Private Sub OptionButton1_Click() MsgBox "Hello World" End Sub Private Sub OptionButton2_Click() MsgBox "Hello World" End Sub Private Sub OptionButton3_Click() MsgBox "Hello World" End Sub Private Sub OptionButton4_Click() MsgBox "Hello World" End Sub Private Sub OptionButton5_Click() MsgBox "Hello World" End Sub