2013-03-12 30 views
5

Mam dwukolumnowe pole kombi na formularzu Dostęp reprezentującym mapowanie z kluczem do kodu. Pierwsza kolumna pola kombi jest "kolumną wiązaną" (tj. Kolumną używaną przy wywołaniu MyComboBox.Value).Dostęp do VBA: Znajdź pozycję w polu kombi opartym na niezaznaczonej kolumnie

Muszę dynamicznie ustawić Value mojego pola kombi na podstawie wartości znalezionej w drugiej kolumnie. Np, jeśli źródłem jest pole kombi:

mogę ustawić wartość pola kombi prosto z ComboBox.Value = "A2", ale jak to zrobić to samo przy użyciu drugą kolumnę? ComboBox.Value = "EFGH" oczywiście nie jest prawidłowy. Zasadniczo szukam logiki wzdłuż linii ComboBox.Value = ComboBox.ValueWhereSecondColumnEquals("EFGH")

Odpowiedz

5

i zakładając, że nie jest oparta na stole/zapytania:

Dim i As Integer 

For i = 0 To ComboBox.ListCount-1 
    If ComboBox.Column(1, i) = "EFGH" Then 
     ComboBox.Value = ComboBox.ItemData(i) 
     Exit For 
    End If 
Next i 
+1

'do ListCount-1' :) Właśnie miałem dodać to. – Fionnuala

+0

Dobre miejsce! Zmieniono :) – RichardC

+0

Czasami najlepsza odpowiedź jest najprostsza - nie mogę uwierzyć, że przepłynięcie przez nią nigdy nie przyszło mi do głowy! – Kai

3

Zakładając, że combo oparty jest na stole, można DLookup wartości w tabeli:

ComboBox.Value = Dlookup("Value","Table","Code='" & sCode & "'") 
+0

To też działa. W tej chwili nie jest oparty na stole, ale prawdopodobnie będzie w pewnym momencie – Kai

+0

Kai, chyba że masz bardzo mało wartości, a przez bardzo niewiele rozumiem 2 lub 3, powinien być oparty na stole dla łatwości konserwacji i użytkowania w raportowaniu i kwerendach. – Fionnuala

+0

Wiem - całość zostanie później przywrócona do SQL Server, ale w tej chwili czekam na pełną listę mapowania, a ja po prostu łączę projekt interfejsu użytkownika (z zerowym zapleczem), aby pokazać klientowi początkowe informacje zwrotne. – Kai

0

Jeśli źródłem jest wybrana wartość w combobox, a celem jest niezwiązana ComboBox ustawienia właściwości .BoundColumn combobox docelowej odpowiedniej kolumnie, a następnie po prostu powiązanie wartości COMBOBOX normalnie jak w Cbox = cboY. Nawet jeśli docelowy combobox jest powiązany, możesz dynamicznie zmieniać zależną kolumnę w razie potrzeby.