如何在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?

我想在附件中做一张表

在这里输入图像说明

  1. 您必须先了解代码所遵循的模式。 如果你可以识别模式,那么你所要做的就是对所有的button使用一个非常简单的代码。

  2. 此外,而不是使用ActiveX Option Button ,使用Form Control Option Button 。 原因是我们可以使用Assign Macro将所有选项button绑定到相同的代码

  3. 我们将使用的下一个技巧是命名选项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