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 按钮

excel vba检查命令按钮和复选框是不是存在

excel VBA 组合框 取值

从 Excel VBA-检查访问表是不是存在/如果不存在,则创建/复制

Excel VBA 检查目录是不是存在错误

C# - 如何检查用户的输入是不是存在于组合框中(使用的数据绑定项)