Excel VBA检查各种组合框中是不是存在值,然后添加相应的文本框值
Posted
技术标签:
【中文标题】Excel VBA检查各种组合框中是不是存在值,然后添加相应的文本框值【英文标题】:Excel VBA check if values exist in various comboboxes then add corresponding textbox valuesExcel VBA检查各种组合框中是否存在值,然后添加相应的文本框值 【发布时间】:2014-04-06 10:54:33 【问题描述】:如果你们都认为这是一个愚蠢的问题,我提前致歉。
我有一个带有 6 个组合框和 6 个文本框的用户表单,我可以在其中输入值。
组合框1 文本框1 组合框 2 文本框 2 组合框 3 文本框 3 组合框 4 文本框 4 组合框 5 文本框 5 Combobox6 文本框6
这个问题需要组合/排列的知识。
首先我在其中一个组合框中输入一个代码,然后在它旁边的文本框中输入一个总 CY。然后我点击一个命令按钮给我一个报告。我想要实现的是编写一个可以查看 6 个组合框中的每一个的代码,查看其中一些组合框中是否存在代码“131010”,如果是,则添加 textbox1 ...同时排除 textbox2(如果代码不在组合框2)。
所以如果只有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 代码正在添加所有文本框,当组合框中有不同的成本代码时无法识别。我可以看到我做错了什么,但我不知道如何解决它。有人可以帮我弄清楚如何解决它吗?或者也许提出另一种选择?也许我需要遍历组合框...我不知道该怎么做。 请不要对这个问题给出否定的答案。我确实对此进行了详细研究,但无法提出任何建议。
提前谢谢大家。
【问题讨论】:
【参考方案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 例程来进行比较、组合等任何操作。
UPDATE 假设您的文本框被称为“textbox1”到“textbox6”(如您上面的示例,尽管在代码中它们似乎有不同的名称......),并且您的组合框是调用“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
一些关键的事情(我认为你可以从我之前发布的代码 sn-ps 中弄清楚 - 但我显然错了):
-
您会自动循环浏览所有组合框
您查看名称是否与您要查找的内容相符
名称的最后一个字符是数字
你找到对应编号的“文本框”
您将值累积到
totalValue
你认为你可以从这里拿走它吗?我想知道您为什么要使用用户表单来完成所有这些工作 - 似乎是适合这项工作的错误工具 - 但鉴于您这样做,上述(或它的变体)应该可以工作。
注意 - 您必须重命名控件...
【讨论】:
对不起,但我不确定这些代码的作用。它究竟是如何只添加某些文本框的? @Dora - 我已经更新了答案。现在更有意义了吗? 是的,它可以完成这项工作(我是 VBA 新手,所以如果我无法理解您的代码,我深表歉意。我明白我必须重命名控件并认为,是的,我可以从这里拿走)。感谢您的帮助。 @dora - 无需道歉。如果答案的目的是帮助提出问题的人,那么在我提供帮助之前,我并没有真正回答这个问题……这就是评论系统存在的原因。 :-)以上是关于Excel VBA检查各种组合框中是不是存在值,然后添加相应的文本框值的主要内容,如果未能解决你的问题,请参考以下文章
从组合框中选择下一个项目,然后单击 Excel VBA 按钮