【发布时间】:2017-11-12 18:23:41
【问题描述】:
我在 VBA 中创建了一个代码来使用多页控件收集数据。在每个页面中,我根据 Excel 工作表中的行动态添加了复选框,并且对于每个复选框,都有一个文本框和 2 个命令按钮,如下图所示:
输入窗口:
自动添加控件的代码是:
Private Sub UserForm_Initialize()
fmat_disp.Value = 0
fmat_set.Value = 0
'---------------------------------------------------------------------------------------------
'Inspeção de Mecânica
Sheets("Mecânica").Activate
n_anom = Application.WorksheetFunction.CountA(Range("1:1")) - 1
AreasInspecao.mecanica.ScrollHeight = 10 + 18 * (n_anom)
For i = 1 To n_anom
'Selecionar anomalia
Set SelAnom = AreasInspecao.mecanica.Controls.Add("Forms.CheckBox.1", "sel_anom_" & i)
SelAnom.Caption = Worksheets("Mecânica").Cells(1, i + 1)
SelAnom.AutoSize = True
SelAnom.Height = 18
SelAnom.Left = 5
SelAnom.Top = 5 + (SelAnom.Height) * (i - 1)
SelAnom.Tag = i
文本框和加号/减号按钮也是如此,只是更改了标题。
我想要的是: 1) 当CHECKBOX被CHECKED时,相应的TEXTBOX必须显示1 2)当减号被按下时,相应的文本框必须递减 3)当加号被按下时,相应的文本框必须增加 4) 当“Finalizar Inspeção”被按下时,所有收集的数据必须发送到 Excel,填写工作表。
我根本不知道如何在不为每个按钮/复选框创建子例程的情况下将每个按钮/复选框链接到您各自的文本框!我将有大约 500 个子例程......这是无法手动管理的......
【问题讨论】:
-
图片在哪里?
-
抱歉...已添加图片的imgurl链接!
-
如果您要动态添加控件,那么您需要这样的东西:siddharthrout.com/2011/08/05/vba-control-arrays 这向您展示了如何捕获事件:您需要做的就是为您的控件命名,以便相关控件组可以在触发代码中识别出来。
-
但在我的情况下,对于每个文本框,只有它们旁边的两个按钮(加号/减号)控制它...这将需要我为每个文本框创建事件?还是我错了?
-
您需要遵循链接中显示的方法的两个类实例集合:一个用于复选框,一个用于按钮。文本框不会在您描述的过程中引发任何事件。
标签: excel checkbox dynamic vba