如果你们都认为这是一个愚蠢的问题,我会提前为写作寻求帮助而道歉。
我有一个包含6个组合框和6个文本框的用户表单,我可以输入值。
Combobox1 Textbox1 Combobox2 Textbox2 Combobox3 Textbox3 Combobox4 Textbox4 Combobox5 Textbox5 Combobox6 Textbox6
这个问题需要知道组合/排列。
首先我在其中一个组合框中输入一个代码,然后在它旁边的文本框中输入一个总CY。然后我点击命令按钮给我一个报告。我想要实现的是编写一个代码,可以查看6个组合框中的每一个,查看代码“131010”是否存在于其中一些,如果是,则添加textbox1 ...同时排除textbox2(如果代码不在combobox2中。
因此,如果只有combobox1,3,5,6具有该代码,我只需添加textbox1,3,5,6,同时排除textbox4。
到目前为止,我有以下代码:
If ComboBox1.Value = "131010" Or ComboBox3.Value = "131010" Or ComboBox5.Value = "131010" Or ComboBox7.Value = "131010" Or ComboBox9.Value = "131010" Or ComboBox11.Value = "131010" Then
TextBox59.Value = Val(TextBox6) + Val(TextBox11) + Val(TextBox16) + Val(TextBox21) + Val(TextBox26) + Val(TextBox31)
TextBox52.Value = ComboBox1.Value
Else
或者我找到了这个代码:
For i = 1 To 6
If IsNull(Me.Controls("combobox" & i)) = False Then
if combobox & i="131010" then
textbox59=val(textbox6)+val(textbox & i+5)
End If
Next i
VBA代码正在添加所有文本框,并且无法识别组合框中何时存在不同的成本代码。我可以看到我做错了什么,但我不知道如何解决它。有人可以帮我弄清楚如何解决它?或者提出另一种选择?也许我需要循环组合框...我不知道该怎么做。 请不要对此问题表示否定。我确实对此进行了长时间的研究,并且无法想出一些东西。
提前谢谢大家。
答案 0 :(得分:1)
你可以像这样循环组合框:
' at top of module:
Option Compare Text ' make text comparison case insensitive
' in function:
Dim s as string
s = ""
for each b in UserForm.Controls
If left(b.Name, 8) = "combobox" Then
' you found a combobox and its name
' you can append things to s as needed.
End If
Next
或者,您可以先遍历所有这些值并生成一组值以便于操作:
Dim boxSelection(6)
Dim textValues(6) As String
Dim b
For Each b In UserForm1.Controls
If Left(b.Name, 8) = "ComboBox" Then
Index = Right(b.Name, 1)
boxSelection(Index) = b.Value
End If
If Left(b.Name, 7) = "TextBox" Then
Index = Right(b.Name, 1)
textValues(Index) = b.Value
End If
Next
你最终得到两个长度为6的数组 - 我根据你的例子硬编码 - 包含每个组合框的值。现在,您可以使用“更简单”的VBA例程进行比较,组合,等等。
更新假设您的文本框通过“textbox6”被称为“textbox1”(如上例所示,尽管在代码中它们似乎有不同的名称......),并且您的组合框是calles “combobox1”通过“combobox6”(再次,如果需要,我建议你重命名它们以使生活更轻松),然后你可以做到
Dim totalValue
totalValue = 0
for each b in UserForm.Controls
If left(b.Name, 8) = "combobox" Then
index = Right(b.name, 1)
If b.Value = "131010" Then
totalValue = totalValue & UserForm.Controls("textbox" & index).value
End If
End If
Next
一些关键的事情(我以为你可以从我之前发布的代码片段中找到它 - 但我显然是错的):
totalValue
注意 - 您必须重命名控件...