2017-01-22 3 views
1

ワークシートに動的検索を使用するコンボボックスがあります。動的検索は、別のワークシートにあるリストの型付き文字を検索することによって行われます。検索はExcel式で行います。リストは定義された範囲であり、コンボボックスのリストフィールドは名前付き範囲に設定されます。 ドロップダウンリストを入力すると、コンボボックスでリストから選択することができる特定のアイテムが表示されます。他のアイテムでは、選択したとおりに選択が消えます。私はなぜこれらのアイテムが消えてしまうのかを試しました。リストは長く(10,000項目)なので、動作が遅いですが、これが問題かどうかはわかりません。Excel VBAコンボボックスでリストから特定の項目を選択することができません

このような問題を解決するにはどうすればよいですか?ドロップダウンリストからマウスクリックの変数を定義する方法はありますか?事前に

おかげで、 タリ

これは私のコードです:

Private Sub ComboBox1_Change() 
    Sheets("PS").EnableCalculation = True 
    ComboBox1.ListFillRange = "DropDownList" 
    ComboBox1.DropDown 

End Sub 

Private Sub CommandButton21_Click() 
    Dim PS As Worksheet 
    Application.ScreenUpdating = False 
    Application.ErrorCheckingOptions.BackgroundChecking = False 
    Sheets("PharmaSoft").Select 
    Set PS = Sheets("PS") 
    SelectionA = PS.Range("J2").Value 
    If ComboBox1.Value = SelectionA Then 
    Range("J19") = "Pharmacy purchase price" 
    Range("N19") = PS.Range("K2") 
    Range("O19") = "ILS" 
    Range("J21") = "Pharmacy selling price Incl.VAT" 
    Range("N21") = PS.Range("L2") 
    Range("O21") = "ILS" 
    Range("J23") = "Package size" 
    Range("N23") = PS.Range("M2") 
    Range("J19:O23").Select 
    With Selection.Font 
     .ThemeColor = xlThemeColorDark1 
     .TintAndShade = 0 
     End With 
     Selection.Font.Bold = True 
     Application.ScreenUpdating = True 
     Range("N19").Errors.Item(1).Ignore = True 
     Range("N21").Errors.Item(1).Ignore = True 
     Range("N23").Errors.Item(1).Ignore = True 
    Else 
    MsgBox "Please select a product", vbCritical, "Error" 
    End If 
    Sheets("PS").EnableCalculation = False 
End Sub 

Private Sub CommandButton22_Click() 
    Application.ScreenUpdating = False 
    Sheets("PharmaSoft").Select 
    ComboBox1.Value = Null 
    Range("J19:O23").Value = Null 
    Application.ScreenUpdating = True 
End Sub 

Also the code for the workbook: 

Private Sub Workbook_Open() 
    Sheets("PharmaSoft").Select 
    Application.ScreenUpdating = False 
    Sheets("PharmaSoft").ComboBox1.Value = Null 
    Range("J19:O23").Value = Null 
    Application.ScreenUpdating = True 
End Sub 
+0

データの例やスクリーンショット、コード – user3598756

+0

を追加して、使用しているコントロールのタイプやコードの場所を教えてください。私は意味:ComboBox1とすべてのボタン_ActiveX_コントロールまたは_Forms_ものですか? 「PS」はComboBox1が配置されているワークシートの名前ですか?どのワークブックが "PS"シートに属していますか?どのワークシートにボタンが配置されていますか?どのワークブックが「Workbook_Open()」に属していますか? – user3598756

+0

私はフォームではなくActiveXコントロールのみを使用します。コードは「Pharmasoft」というワークシートにあり、データを検索してクリアするためのボタンが付いたGoogle検索フィールドを表示します。「PS」はアイテムのリストとコンボボックスのリストを計算する場所です。 workbook_openは、ブック全体に対して定義されています。 – Talilit82

答えて

0

私はあなたがExcelの数式に言及して検索が行われていることを考えれば何をやっているにコメントすることはできませんが、 。私は、コンボボックスによるデータ検証の使用がかなり早いことを知っています。私が使用する方法は、このpageに従っており、非常に高速です。これは、約15k行の検証範囲ではかなり瞬間的です。それについての最も重要な部分は、自動補完を提供することです。したがって、コンボボックスに値を入力すると、その値がリストにない場合、1文字前に一致したエントリが消えます。あなたが選択したものが有効であるかどうかにかかわらず、それは良い視覚的な手がかりです。もちろん、通常の方法でドロップダウンボックスを使用することはできます。唯一の欠点は、提供されたリンクでコード化されているように、自動補完モードに入るためにダブルクリックする必要があることです。

+0

ありがとうございますが、検索可能なフィールドを使用していますが、オートコンプリートではありません。 "Tom skuller"や "Tom Blum"のような特定の仕事に2つのオプションがある場合は、 "Tom"と入力すると両方のオプションが必要です。問題は、リストに両方の名前が表示されていますが、1つの名前を選択できますが、他の名前は選択できないということです。 – Talilit82

+0

これがエラーの原因であるかどうかわかりませんが、ListValueRangeを変更するときは、これを行う必要があります: 'ComboBox1.ListFillRange = "= DropDownList"あなたは 'DropDownList'を変更していますか? – Amorpheuses

関連する問題