2011-11-13 37 views
0
If UserForm1.ComboBox1.Value = "One" Then 

    If UserForm1.ComboBox2.Value = "Attentive" Then 

    For Each listItem In ws.Range("D1:D56").SpecialCells(xlConstants) 

    With Me.ListBox1 
    If listItem = "Y" Then .AddItem Sheets("Sheet2").Range("A" & listItem.Row).Value 
    End With 

    Next listItem 

End If 

範圍A具有名稱。範圍C具有「One」,「Two」和「Three」形式的值。範圍D是具有「Y」和「N 」。檢查值

該程序正在執行的操作是: 檢查範圍D1:D56在範圍C中具有「One」值,然後從列表框中打印出「Y」的列A中打印名稱。

現在我想爲「One」添加另一個條目,因此我將不得不將範圍更改爲D57,我不想重複此操作,應該考慮自行考慮而不是手動更改代碼。

這怎麼辦?

+0

請記住,紀念如果你得到了合適的答案,問題就解決了。這樣做可以讓其他開發人員知道你的問題已經解決。 – Reafidy

回答

1

我知道你只是想讓你正在檢查的值範圍動態。由於特殊的細胞使用usedrange你可以使用:

For Each listItem In ws.Columns(4).SpecialCells(xlConstants) 

或者你可以使用:

For Each listItem In ws.Range("D1", ws.cells(rows.count,"D").end(xlup)).SpecialCells(xlConstants) 

基於這裏您的意見是一個更新的答案:

Dim rCell As Range 
Dim sValue As String '// Represents your One, Two, Three values 
Dim sAttentive As String '// Represents your attentive value 

sValue = UserForm1.ComboBox1.Value 

If UserForm1.ComboBox2.Value = "Attentive" Then 
    sAttentive = "Y" 
Else 
    sAttentive = "N" 
End If 

For Each rCell In ws.Columns(4).SpecialCells(xlConstants) 
    If rCell.Value = sAttentive And rCell.Offset(, -1) = sValue Then 
     Me.ListBox1.AddItem Sheets("Sheet2").Range("A" & listItem.Row).Value 
    End If 
Next rCell 
+0

你的代碼正在工作,但它也正在挑選出它不應該的值 例如,如果你在組合框2中選擇「兩個」,那麼它也會從注意力中具有「Y」的「one」柱。 – user1000730

+0

你的問題有點難以遵循,你可以編輯你的文章,以顯示數據的示例或截圖。如果您能以這種方式澄清您的需求,我將能夠幫助您解決問題。 – Reafidy

+0

首先有兩個組合框,第一個選擇「One」,「Two」和「Three」,這三個值在C列,我的意思是很多,取決於其他組合框,列「D」,其形式爲「Y」和「N」。所以如果我從第一個組合框中選擇「One」並且從其他組合中選擇「One」,它應該顯示列A中具有「C」和「Y」的所有名稱。 – user1000730