2013-03-12 16 views
5

Ho una casella combinata a due colonne in un modulo di accesso che rappresenta un mapping da codice a codice. La prima colonna della casella combinata è la 'colonna vincolata' (cioè, la colonna utilizzata quando viene chiamato MyComboBox.Value).Accesso VBA: Trova elemento in una casella combinata basata su colonna non vincolata

Ho bisogno di impostare dinamicamente il Value della mia casella combinata in base a un valore trovato nella seconda colonna. Per esempio, se la mia fonte casella combinata è:

posso impostare il valore della casella combinata in modo semplice con ComboBox.Value = "A2", ma come farei lo stesso con la seconda colonna? ComboBox.Value = "EFGH" ovviamente non è valido. In sostanza alla ricerca di logica lungo le linee di ComboBox.Value = ComboBox.ValueWhereSecondColumnEquals("EFGH")

risposta

5

e assumendo che non è basato su una tabella/query:

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

'to ListCount-1' :) Stavo per aggiungere questo. – Fionnuala

+0

Buon posto! Modificato :) – RichardC

+0

A volte la risposta migliore è la più semplice - non posso credere che il solo scorrere attraverso di essa non mi sia mai passato per la testa! – Kai

3

Supponendo che il combo si basa su una tabella, è possibile DLookup il valore in tabella:

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

Anche questo funziona. Al momento non è basato su un tavolo, ma probabilmente sarà ad un certo punto – Kai

+0

Kai, a meno che tu non abbia pochissimi valori, e per pochissimi intendo 2 o 3, dovrebbe essere basato su una tabella per facilità di manutenzione e uso nei rapporti e nelle query. – Fionnuala

+0

Lo so - il tutto verrà successivamente posticipato a SQL Server ma al momento sto aspettando che venga fornito un elenco completo di mappatura e sto solo mettendo insieme un design dell'interfaccia utente (con zero back-end) per mostrare al client feeback iniziale. – Kai

0

Se la fonte è il valore selezionato in una casella combinata, e il bersaglio è un combobox non associato impostare la proprietà .BoundColumn del combobox bersaglio alla colonna appropriata e poi semplicemente assegnare i valori ComboBox normalmente, come in CBOX = cboY. Anche se la combobox di destinazione è vincolata, è possibile modificare dinamicamente la colonna associata secondo necessità.

Problemi correlati