Trasferire dati di TextBox di UserForm a celle del
foglio di lavoro
Ancora un esempio
che mostra come trasferire dei dati introdotti in
TextBox presenti su una UserForm, in
modo da formare una tabella dati sul foglio di
lavoro. E' una
condizione operativa che viene usata spesso nei nostri lavori e quindi
vediamo come sia possibile usare delle istruzioni che si possono applicare,
una volta per tutte, in queste occasioni.
Le condizioni : da una UserForm che useremo come maschera di introduzione
dati che inseriremo in apposite TextBox, dovremo trasferire questi dati sul
foglio di lavoro, partendo da una determinata riga (che sceglieremo noi via
codice), e scalando di una riga ad ogni introduzione. I dati saranno
inseriti in altrettante celle, sulla stessa riga, per quanto saranno le
TextBox. Non ci occuperemo del "Formato dati"
nè del "Tipo di dati" che trasferiremo
(peraltro già descritti su altri paragrafi di questa sezione), ma di
reperire l'"indice riga" per identificare su
quale riga copiare i dati, e come identificare le colonne. Questo esempio lo
imposto su quattro TexBox, ma potrà essere usato su quante TextBox vorremo.
Ultima condizione: vogliamo creare un numero riga progressivo, che ci
indichi il numero dei record (righe) presenti nella tabella
Private Sub
CommandButton1_Click()
'queste istruzioni sotto cercano la prima
riga in cui la prima cella (cioè la cella della 'colonna A sia vuota,
a partire dalla riga 2 (iRow = 2). La colonna è identificata dal
'numero 1 nell'istruzione While Cells(iRow,
1). Se avessimo voluto creare la tabella
a 'partire dalla colonna C, avremmo dovuto scrivere 3, cioè
While Cells(iRow, 3)
Dim iRow As Integer
iRow = 2 'si comincia dalla
riga 2
While Cells(iRow, 1).Value <> "" 'se
la cella contiene dati, si passa alla successiva
iRow = iRow + 1
Wend
'trovata la riga con la cella vuota,
inserisco i dati contenuti nelle textbox, trovando per
'ogni textbox la colonna (iRow 1,2,3,4,5).
Poi per incrementare il numero progressivo, gli 'faccio leggere il
numero presente nella riga sopra (con Offset), stessa colonna, ed
'aggiungo 1. In totale quindi useremo 5 celle sul foglio di lavoro, la
prima ci servirà per il 'numeratore, e le altre quattro per ospitare i
dati delle quattro TextBox.
Cells(iRow, 1) = Cells(iRow, 1).Offset(-1, 0) + 1
Cells(iRow, 2) = TextBox1
Cells(iRow, 3) = TextBox2
Cells(iRow, 4) = TextBox3
Cells(iRow, 5) = TextBox4
'poi dopo che ho copiato i dati sul
foglio devo pulire le textbox per inserire nuovi dati
TextBox1 = ""
TextBox2 = ""
TextBox3 = ""
TextBox4 = ""
End Sub |
Con questa routine credo di avere chiarito una procedura standard da seguire
quando vorremo inserire dati da una maschera di introduzione dati a celle
sul foglio di lavoro. E' possibile ovviamente, lavorando su un foglio,
inserire dati su un altro foglio; sarà sufficiente indicare nelle istruzioni
su quale foglio "scaricare" i dati, selezionando prima il foglio, e
ritornando poi al foglio di partenza . Usando
Application.ScreenUpdating=False, eviteremo i saltellamenti a video.
Questa la modifica:
Private Sub
CommandButton1_Click()
Application.ScreenUpdating = False
Sheets(2).Select 'si seleziona
un'altro foglio
Dim iRow As Integer
iRow = 2
While Cells(iRow, 1).Value <> ""
iRow = iRow + 1
Wend
Cells(iRow, 1) = Cells(iRow, 1).Offset(-1, 0) + 1
Cells(iRow, 2) = TextBox1
Cells(iRow, 3) = TextBox2
Cells(iRow, 4) = TextBox3
Cells(iRow, 5) = TextBox4
TextBox1 = ""
TextBox2 = ""
TextBox3 = ""
TextBox4 = ""
Sheets(1).Select 'si ritorna
al foglio di partenza
End Sub
|
Se invece vogliamo
vedere come compilare delle istruzioni che sfruttino un ciclo
For...Next sugli insiemi,
potremo sostituire le righe che identificano le
TextBox e le Celle, in questa maniera
(scrivo solo le istruzioni da modificare):
'...omissis
Wend
'da questa riga si sostituiscono le precedenti istruzioni con:
'la prima cella non la
inseriamo nel ciclo perchè dispone un'istruzione singola, non comune
'alle altre celle (contatore)
Cells(iRow, 1) = Cells(iRow,
1).Offset(-1, 0) + 1
'iniziamo il ciclo dalla
seconda cella ( n = 2 To..) a cui assegniamo però la Textbox1, quindi
l'indice 'della textbox sarà uguale al valore di n - 1 (n meno
uno)
For n = 2 To 5
Cells(iRow, n) = UserForm1.Controls("TextBox" & n - 1).Text
'con lo stesso concetto
dell'indice per le textbox, e di seguito nello stesso ciclo, facciamo
'pulire le textbox
UserForm1.Controls("TextBox" & n - 1) = ""
Next
Sheets(1).Select
'si ritorna al foglio di partenza
End Sub |
Buon lavoro.
prelevato sul sito http://ennius.interfree.it |