2014-03-04 66 views
0

如果您認爲這是一個愚蠢的問題,我很抱歉提出寫請求幫助。Excel VBA檢查值是否存在於各種組合框中,然後添加相應的文本框值

我有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代碼是將所有的文本框,不承認當有不同成本代碼在一個組合框中。我可以看到我做錯了什麼,但我不知道如何解決它。有人可以幫助我弄清楚如何解決它?或者可能提出另一種選擇?也許我需要通過組合框循環...我不知道如何做到這一點。 請不要對此問題給予否定。我真的研究過這個問題,不能拿出一些東西。

謝謝大家提前。

回答

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 

幾個關鍵的事情(我想你可能已經從代碼片段我前面貼想通了 - 但我顯然是錯誤的):在所有的組合框

  1. 您自動循環
  2. 你看看,看看名字你匹配正在尋找
  3. 最後一個字符名字是一個數字
  4. 您找到相應編號的「文本框」
  5. 您累積值到totalValue

你認爲你可以把它從這裏?我想知道你爲什麼要用用戶表單完成所有這些工作 - 看起來像是工作的錯誤工具 - 但是假設你這樣做了,上面的(或它的變體)應該可以工作。

注 - 你必須重新命名控制...

+0

我很抱歉,但我真的不知道是什麼這些代碼做。它究竟如何只添加某些文本框? – Dora

+0

@Dora - 我已經更新了答案。現在它更有意義嗎? – Floris

+1

是的,它的工作(我是VBA新手,所以如果我不明白你的代碼,我很抱歉,我明白我必須重新命名控件,並認爲是的,我可以從這裏開始)。謝謝你的幫助。 – Dora

相關問題