ComboBox per ricerca o inserimento dati in un database. - dal 04/09/04 pagina vista: volte

Sulla falsariga dell'esercizio precedente "Inserire dati da ComboBox", ampliamo il concetto lì descritto, usando una ComboBox non solo per controllare ed eventualmente aggiungere un dato nell'elenco che forma il RowSource della Combo stessa, ma anche la visualizzazione, l'inserimento o la modifica di dati correlati al dato riportato nella combobox. Tipico esempio potrebbe essere un indirizzario, ma potrebbe riferirsi ad un elenco di articoli, un elenco clienti o fornitori, un archivio dati, o comunque un qualsiasi database che si debba consultare o aggiornare on l'inserimento di nuovi dati. Come esempio lo faremo su una rubrica indirizzi, il cui database lo terremo su un foglio diverso da quello sul quale operiamo, così vediamo come "lavorare a distanza", senza selezionare cioè il foglio del database. Vediamo un esempio, sul Foglio2:

I dati (Nominativo) nella colonna A, da A2 fino a dove vorremo che giunga il nostro elenco (non ci dobbiamo scordare che celle libere ci servono per poter aggiungere dati), verranno identificati assegnando un nome alla zona, dal menù Inserisci/Nome/Definisci, e formeranno il RowSource della ComboBox, cioè sarà la "chiave di ricerca/inserimento" dati nel database. Vediamo un immagine della UserForm usata come maschera di lavoro, e che attiviamo con un CommandButton posto sul Foglio1:

Selezionando un nominativo esistente tramite l'evento Click della ComboBox, porteremo i dati relativi al nominativo nelle tre textbox della userform; questo ci consente di consultare i dati, leggendo magari il numero di telefono, oppure di modificare se necessario i dati presenti nelle textbox, a cui faremo seguire un click sul pulsante "Aggiorna Modifiche ai Dati" per aggiornare il database sul foglio2. Se invece selezioneremo una riga vuota nella combobox attiveremo l'emissione di quatro inputbox, in sequenza, che ci chiederanno di inserire un nominativo, l'indirizzo, la città, il numero di telefono, forniti i dati richiesti, la routine provvede in automatico ad aggiornare sia il database sul foglio2 sia la maschera stessa. Questo esercizio si presta anche all'inserimento dei dati necessari ad una fatturazione (basta prevedere i campi da richiamare insieme al nominativo e l'indirizzo completo, come p.iva o cod.cliente) e poi provvedere un commandbutton che trasferisca i dati nelle celle predisposte del modello fattura, che in questo caso dovrebbe essere il foglio dal quale si richiama la userform. Vediamo le istruzioni:

'sfruttiamo l'Activate della UserForm per assegnare l'area identificata col nome "nomi" al 'RowSource della ComboBox

Private Sub UserForm_Activate()
ComboBox1.RowSource = "nomi"
End Sub

'questa è la routine "responsabile" della ricerca o inserimento dati, e si utilizza l'evento 'Click della Combobox

Private Sub ComboBox1_Click()
riga = ComboBox1.ListIndex + 1 'con la variabile "riga" memorizziamo il numero Indice 'della riga selezionata nella combobox che ci servirà per identificare la riga sul foglio 'database

testo = ComboBox1 'la variabile "testo" assimilerà il valore selezionato nella combo

If testo <> "" Then 
' se "testo" è diverso da vuoto, si caricano le textbox con i valori 'correlati al nominativo selezionato di cui abbiamo il numero riga con "riga", e che si 'trovano nelle colonne indicate sotto sul foglio2
TextBox1 = Worksheets("Foglio2").Range("B" & riga)
TextBox2 = Worksheets("Foglio2").Range("C" & riga)
TextBox3 = Worksheets("Foglio2").Range("D" & riga)
Else
'in caso contrario (cioè se la riga selezionata è vuota), si lanciano le inputbox per 'richiedere i dati da inserire nel database. Unica necessità: il Nominativo. Se non si 'scriverà niente, si rilancia la inputbox fino a che non ci decidiamo a scrivere qualcosa (con GoTo '10). Le inputbox restituiscono dei valori che vengono memorizzati in variabili (dimmi,via,citta,tele) assegnate poi alle rispettive colonne, riga uguale all'indiceriga 'selezionato nella combo, nel foglio2 database.
10:
dimmi = InputBox("INSERISCI IL NOME")
If dimmi = "" Then
MsgBox ("ATTENZIONE INSERIRE IL NOME")
GoTo 10
End If
via = InputBox("INSERISCI L'INDIRIZZO")
TextBox1 = via
citta = InputBox("INSERISCI LA CITTA'")
TextBox2 = citta
tele = InputBox("INSERISCI IL TELEFONO")
TextBox3 = tele

Worksheets("Foglio2").Range("A" & riga) = dimmi
Worksheets("Foglio2").Range("B" & riga) = via
Worksheets("Foglio2").Range("C" & riga) = citta
Worksheets("Foglio2").Range("D" & riga) = "'" & tele

ComboBox1.RowSource = ""
'poi si azzera (si pulisce ) il RowSource

ComboBox1 = dimmi
'si scrive nella combo il Nominativo reperito con "dimmi"

ComboBox1.RowSource = "nomi"
 'si assegna di nuovo la zona "nomi" al RowSource e 'si riprendono i valori dal database inserendoli nelle textbox
TextBox1 = Worksheets("Foglio2").Range("B" & riga)
TextBox2 = Worksheets("Foglio2").Range("C" & riga)
TextBox3 = Worksheets("Foglio2").Range("D" & riga)
MsgBox "DATI REGISTRATI"
'e si avvisa della registrazione avvenuta

End If

End Sub

'questa la routine assegnata al commandbutton per aggiornare ev. modifiche

Private Sub CommandButton1_Click()
If ComboBox1 = "" Then Exit Sub
'se la combo è vuota si esce, altrimenti: si aggiorna il 'database con i valori presenti nelle textbox
riga = ComboBox1.ListIndex + 1
Worksheets("Foglio2").Range("B" & riga) = TextBox1
Worksheets("Foglio2").Range("C" & riga) = TextBox2
Worksheets("Foglio2").Range("D" & riga) = "'" & TextBox3
End Sub

 

File scaricabile e consultabile :  Combo e DB2000.zip   36 Kb   

Buon Lavoro

prelevato sul sito www.ennius.altervista.org