Access フォームでバインドされた ListBox コントロールをいくつか使用しています。ListBox の内容は関連しているため、ユーザーが 1 つの ListBox をクリックすると、選択された行が他の ListBox で変更される可能性があります。ListBox に単一の列がある限り、すべて正常に動作します。これを何度も行いました。私は非常に単純な VBA 構文 lstBoxWhosis = "SomeText" を使用します
ListBox にその項目が含まれている限り、選択された行はそのテキストを含む行になり、他の検索、検索、または再配置コマンドは必要ありません。
私の現在の頭痛の種は、複数列の ListBox です。一番左の列には一意のエントリがありません。上記の構文を使用すると、位置が変更されますが、テキストを含む最初の行にのみ移動します。TWO 列の値に従って配置する必要があります。複数の列でこれを行う同様の方法はありますか、それとも ListBox の内容を手動で検索する必要がありますか?
列をスペース、コンマ、セミコロン、および構文で連結しようとしました
lstBoxWhosis = array("SomeText1","SomeText2")
それらのどれにも運がありません。
レモウ:
私は今そのようにしていますが、実際にはかなり単純です。コードは次のとおりです。
lstSpoje = lstKatastr
Do Until lstSpoje.Column(1) = lstOblast
lstSpoje.Selected(lstSpoje.ListIndex + 1) = True
Loop
最初の行は、最初の列のブロックの先頭に直接配置され、2 番目のステップは 1 つずつ、正しい行が得られるまで 2 番目の列をチェックします。重複の数は、より効率的な検索方法を保証するものではありません。再配置中にディスプレイがバタバタすることを除いて、問題なく動作します。
それ以外の場合は、関連すると思われるすべてを投稿しました。最初の文で述べたように、ListBoxes はバインドされています。これは、テーブルまたはクエリに基づいていることを意味します。誰かがこれを解決するのに役立つと思われる他の情報がある場合は、それが何であるか教えてください.
レモウ:
はい、それは間違いなく機能します。私は実際に似たようなことをすでに行っています。ListBox の 1 つには約 15,000 個のアイテムがあるため、ユーザーがアイテムを見つけやすくするために、26 個の CommandButtons を文字で配置し、ListBox をその文字の先頭に移動します。次のコードを使用して ListBox を配置します
x = ActiveControl.Caption
i = CurrentDb.OpenRecordset("SELECT Count(*) FROM TableOfKatastrs WHERE Left(Katastr,1)<'" & x & "'").Fields(0)
lstKatastr.Selected(i) = True
これについても同様のスキームを使用する可能性があります。これにより、ちらつきの問題が解消され、起動が速くなります。しかし、1 行のコードですべてが実行される最初の例の単純さを備えた、あまり知られていない構文を期待していました。
lstBoxWhosis = "SomeText"
レモウ:
2 つの列を使用しているので、2 つで解決します。:) しかし真剣に、単純な代入構文は非常に簡単でエレガントであり、このような問題を解決する、ほとんど使用されておらず、ほとんど知られていない奇妙な言い回しが非常によくあります。私は他のあらゆる種類のことを試しました
lstSpoje.Column(1) = "SomeText2"
しかし、私が得るのは構文エラーだけです。おそらく、実際には最初の (または唯一の) 列にのみ適用されます。