2

列からの一意のテキスト値のみをコンボボックスに入力しようとしています。列の値が空の場合 (つまり "")、左隣の列から値が取得されます (ただし、重複していないことを確認します)。

Userform モジュール内に Public Sub を埋め込んで、アイテムを重複なく追加しました。

Public Sub addIfUnique(CB As ComboBox, value As String)

If CB.ListCount = 0 Then GoTo doAdd
    Dim i As Integer
    For i = 0 To CB.ListCount - 1
        If CB.List(i) = value Then Exit Sub
    Next
    doAdd:
        CB.AddItem value

End Sub

ただし、サブを呼び出そうとすると、オブジェクトが必要であることがわかります。私がこれまでに得たものは次のとおりです。

Worksheets("Scrapers").Activate
Range("M9").Activate

Dim intX As Integer
Dim value As String

push_lt_cbo.Clear

Do Until ActiveCell.Offset(0, -1).value = 0
    If ActiveCell.value = "" Then
        value = ActiveCell.Offset(0, -1).Text
        Call addIfUnique((push_lt_cbo), (value))
    Else
        value = ActiveCell.Text
        Call addIfUnique((CB), (value))
    End If
Loop

どんな助けでも大歓迎です!

LW

4

1 に答える 1

1

あなたは近いです:

Option Explicit 'Add this if you don't already have it

Private Sub UserForm_Initialize()
    Worksheets("Scrapers").Activate
    Range("M9").Activate

    Dim intX As Integer
    Dim value As String

    push_lt_cbo.Clear


    'Your loop will never end like this:
    'Do Until ActiveCell.Offset(0, -1).value = 0

    'Instead use a variable:
    Dim rowOffset As Integer
    rowOffset = 0
    Do Until ActiveCell.Offset(rowOffset, -1).value = 0
        'There was a lot of extra stuff here.  Simplifying:
        value = ActiveCell.Offset(rowOffset, -1).value

        'Remove optional CALL keyword.
        'Also remove paranthesis; they caused the error:
        addIfUnique push_lt_cbo, value

        'increment offset:
        rowOffset = rowOffset + 1
    Loop
End Sub
'Use 'msforms.ComboBox' to clarify.
Public Sub addIfUnique(CB As msforms.ComboBox, value As String)

If CB.ListCount = 0 Then GoTo doAdd
    Dim i As Integer
    For i = 0 To CB.ListCount - 1
        If CB.List(i) = value Then Exit Sub
    Next
doAdd:
        CB.AddItem value

End Sub
于 2012-09-17T01:50:41.350 に答える