【发布时间】:2021-04-10 07:06:51
【问题描述】:
正如您在上面看到的,我在 Excel 工作表中有一个表格,其中指示 A 可以包含产品 1、产品 2 等等(产品名称因指示而异,这只是为了简单起见!)。
在我的用户表单中显示了类似的格式。我想基本上将我的 excel 表上的指示名称与我的用户表单中的指示名称相匹配。如果它们匹配,则产品 11 获得 A 的产品 1 名称,产品 12 获得 A 的产品 2 名称,依此类推。
我尝试了以下方法,但我才刚刚开始使用 VBA,所以我确信它甚至可能没有意义。
Dim code_ind As String
Dim sel_ind As String
Dim chkbx As Control
Dim labx As Control
Dim i As Integer
Dim col_value As Integer
Dim row_value As Integer
For i = 1 To 8
For j = 1 To 4
For row_value = 4 To 11
col_value = 0
Set chkbx = Me.Controls("seg_l_selInd_" & i)
Set labx = Me.Controls("seg_cb_selInd_" & i & j)
sel_ind = tWb.Worksheets("LALALA").Columns(2).Find(what:=chkbx)
If code_ind = sel_ind Then
labx.Name = tWb.Worksheets("LALALA").Cells(row_value, 3 + col_value)
col_value = col_value + 1
End If
Next row_value
Next j
Next i
有什么办法可以做到吗?我知道我可以手动编写名称,但我需要我的工具尽可能灵活。理想情况下,如果将更多信息添加到 excel 表中,用户表单将自动更新。
【问题讨论】:
-
您的代码不完整。
tWb、code_ind、chkbx等的值是多少? -
不确定我是否理解您想要完成的任务...您最终想用这个匹配做什么?您想根据它们在表格与控件矩阵中的位置将它们的标题更改为产品名称吗?在那之后你打算如何使用它们?你知道,我想,这个匹配是无法保存的。它仅对表格工作寿命有效。如果您选中,让我们说出标题为“Product22”的复选框,您要选择第二行的“Prod 2”吗?
-
@FaneDuru 作为第一步,你是对的。我想根据它们在表格与控件矩阵中的位置将它们的标题更改为产品名称。请在下面查看我的解决方案并告诉我您的想法。其次,勾选任何值/复选框都需要保存在工作表中,理想情况下,采用以下格式:指示 - 产品。希望它现在更有意义。谢谢!
-
您没有说明“seg_l_selInd_”的含义。我知道匹配将根据控件标题完成。 “_”字符后的第一个数字表示产品所在的行,第二个表示列。但即使忘记了这方面,我问你想要完成什么。您将如何使用每个控件(新)标题以使其引用特定产品?我想有可能在不同的位置存在相同的产品名称。这个假设是否正确。即使没有,你打算如何在讨论中使用匹配?
-
例如讨论中的匹配是在Form Initialization事件期间完成的,但是在匹配过程中一个Dictionary(表单模块级别的私有变量)具有通过控件Left之间的串联获得的key属性和控件 Top 属性和值对应产品所在的单元格地址。更改其值时,应根据字典键/值完成真正的匹配。