2017-05-08 9 views
1

私はVBAフォームを使用してExcelを開発しています。 1つのフォームで私はコンボボックスを持っているので、ユーザーは顧客名を選択できます。このコンボボックスのrowsourceは名前付き範囲(顧客テーブルの名前列)です。すべて正常に動作しますが、テーブルの列に存在しないコンボボックスに1つ以上の追加項目を追加する必要があります。たとえば、ユーザーが特定の顧客名またはAllを選択できるように、cobmoboxに「すべて」の項目を追加する必要があります。他の場所では、コンボボックスに「その他」の項目を同じrowsourceで追加することはできません。したがって、顧客が新規の場合は「その他」を選択し、テキストボックスに名前を入力します。VBAユーザーフォームのコンボボックスに表の列を加えて追加のオプションを追加する

私はアイテム

Private Sub UserForm_Activate() 
With Me.testCombo 
.AddItem "All" 
End With 
End Sub 

を追加するには、次のコードを試みたが、私はその後、コンボボックスから上記のコードを値集合ソースプロパティを削除する場合は、エラー ファイル名を指定して実行時エラー「70」 許可が

を否定しました1つのアイテム "All"が表示されます。

注:顧客テーブルに「すべて」と「その他」を追加したくない場合、これは簡単な解決策ですが、他の問題が発生します。

+1

'RowSource'プロパティが設定されている場合は、項目を追加できません。 'RowSource'をアンセットします。 'UserForm_Initialize'で範囲から1つずつコンボに項目を追加し、それ以外のオプションを追加することができます。 –

+0

これを解決する方法の他に、私は問題を解決しました。 – user21354

答えて

1

次のように試してみてください:コメントで述べたように

Private Sub UserForm_Activate() 

    Dim rowValue  As Variant 
    Dim lngCount  As Long 
    Dim myCell   As Range 
    Dim varCombo()  As Variant 

    With Me.ComboBox1 

     ReDim varCombo(Me.ComboBox1.ListCount)   

     For Each myCell In Range(.RowSource) 
      varCombo(lngCount) = myCell.value 
      lngCount = lngCount + 1 
     Next myCell 

     .RowSource = "" 

     For lngCount = LBound(varCombo) To UBound(varCombo) - 1 
      .AddItem CStr(varCombo(lngCount)) 
     Next lngCount 

     .AddItem "All" 
     .AddItem "Nothing" 

    End With 

End Sub 

は、A.S.H.によって、あなたは.RowSourceプロパティの設定を解除する必要があります。しかし、あなたはそれを失うことはありません。コードを2回実行すると、同じになります。私のコードでは、UBound(varCombo) - 1を使用します。なぜなら、最後にセルをループするときにlngCount=lngCount+1を使用するからです。このような

0

何かがあなたが

Dim a() As Variant 
Dim b() As String 
Dim s As String 

a = Application.Transpose(Range("a1:a5").Value) 
s = "Please select;" & Join(a, ";") 
Erase a 
b = Split(s, ";") 

Me.ComboBox1.List = b 
0

必要なものを行うことができます助けるため、あなたにみんなにありがとうA.S.Hは、値集合ソースが設定されているならば、コンボボックスで任意の項目を追加することはできません言ったように、主な問題は、許可しました。したがって、フォームのプロパティからRowSourceを削除します。次のコードを書いて、うまくいっているようです。私のコードが十分に簡単でいいと思う。

Private Sub fillComboBox() 
     Dim comboData As Range 

     With Me.CWR_CustName 
      ' first option of comobobox will be All 
      .AddItem "All" 

      For RW_Cust = 1 To Range("tblCust").Rows.Count 

       ' add each customer name from customer table name column 
       .AddItem (Range("tblCust[Name]")(RW_Cust)) 

      Next RW_Cust 

     End With 
End Sub 
関連する問題