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
|