Salvare il contenuto (Lista) di una ListBox. (valido
anche per ComboBox ActiveX) -
dal 04/09/04 pagina vista:
volte
Questa volta ci
occupiamo di come poter salvare il contenuto di una
ListBox (ActiveX, cioè presa da "Casella
degli strumenti" alias "Strumenti di controllo", non da "Moduli"), copiando
la Lista in un file di testo. Lo scopo di questa operazione potrà essere
quello di salvare una determinata combinazione di valori (testo, numeri o
altro) presenti nella ListBox, oppure di stampare il file di testo così
ottenuto. Ricordo che una ListBox si "popola"
sfruttando tre metodi o proprietà:
-
AddItem - (metodo) serve ad aggiungere una voce
nell'elenco di una ListBox
-
ListFillRange - (proprietà) Specifica l'origine
(range di celle) da cui proviene un elenco di una ListBox. Si usa questa
proprietà quando la ListBox (ActiveX) è inserita sul
foglio di lavoro.
-
RowSource - (proprietà) Specifica l'origine (range
di celle) da cui proviene un elenco di una ListBox. Si usa questa proprietà
quando la ListBox (ActiveX) è inserita in una UserForm.
Presento tre
soluzioni, per ListBox su UserfForm, tutte e tre si basano sul reperire il
numero di voci presenti nell'elenco della ListBox, e con un ciclo For..Next,
copiare un valore ad ogni ciclo in un file di testo. Le prime due
necessitano di un file di testo (vuoto) precedentemente creato e posto in
una cartella a vostro piacere, la terza invece provvederà anche alla
creazione diretta del file di testo di cui forniremo noi il nome,
scrivendolo nel codice, file che verrà salvato nella cartella Documenti di
sistema (quindi
C:\Documenti per le versioni antecedenti WindowsXP, in
C:\Documents
And Settings\Nome Utente\Documenti in XP). I più attenti potranno
rendere con una variabile questo nome, in modo da creare nuovi file.Txt
senza sovrascrivere i precedenti. Ma passiamo alle routines. La prima si
basa sull'Istruzione Open che consente di
eseguire operazioni di input/output (I/O) su un file, e ci affideremo ad un
CommandButton per attivare le istruzioni:
Private Sub
CommandButton1_Click()
'apriamo il file di testo precedentemente
creato
Open "C:\TuaCartella\Tuonome.txt" For Output As #1
'con la variabile "n" prendiamo il numero
di quante voci compongono l'elenco della 'ListBox
n = ListBox1.ListCount - 1
For i = 0 To n 'inizializziamo il
ciclo For Next assegnando alla variabile "i" il valore che 'partendo
da zero si incrementa di uno e si concluderà quando il valore sarà "n"
ListBox1.ListIndex = i
'identifichiamo il valore indice della ListBox rendendolo uguale a
'"i", ottenendo (sotto) con la proprietà List il corrispondente valore
presente nella riga 'dell'elenco "i" (testo, numero o altro) e con
Print #1 copiamo (scriviamo) questo valore nel 'file di testo
Print #1, ListBox1.List(ListBox1.ListIndex)
Next i 'passiamo al successivo "i"
Close #1 'chiudiamo il file di testo così
riempito e lo salviamo
MsgBox ("Eseguito!") 'indi si avvisa con
il messaggio
End Sub |
Il secondo
esempio, simile al primo, sfrutta la Funzione CreateObject per l'apertura
del file di testo(le istruzioni che spiegano questa funzione le potete
leggere nell'articolo, stesa sezione, "DriveList, DirList,FileList"). Unica
precisazione: poichè questa soluzione formerebbe un file di testo con i nomi
della lista posto uno di seguito all'altro, anzichè riga per riga, viene
inserita l'istruzione " f.WriteLine (" ") " che
provvede a scrivere i nomi riga per riga:
Private Sub
CommandButton2_Click()
Dim fs, f
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.OpenTextFile("C:\TuaCartella\Tuonome.txt", 2, -2)
n = ListBox1.ListCount - 1
For i = 0 To n
ListBox1.ListIndex = i
'diversamente dall'esempio precedente, qui si
usa l'istruzione Write #. A differenza 'dell'istruzione Print #,
l'istruzione Write # inserisce virgole tra gli elementi e
racchiude le 'stringhe tra virgolette mentre vengono scritte nel file.
Non è necessario inserire nell'elenco 'delimitatori espliciti. Si
potrebbe usare Write # per inserire un carattere di nuova riga,
'ovvero una sequenza ritorno a capo–avanzamento riga (Chr(13)
+ Chr(10)), dopo aver 'scritto nel file l'ultimo
carattere dell'argomento elencooutput (ListBox1.List)
f.Write ListBox1.List(ListBox1.ListIndex)
f.WriteLine (" ")
Next i
f.Close
MsgBox ("Eseguito!")
Set fs = Nothing
Set f = Nothing
End Sub |
Il terzo esempio
invece, non richiede che si sia preventivamente creato un file di testo
perchè lo creiamo direttamente con le istruzioni, usando la Funzione
CreateObject, con il metodo
CreateTextFile per la creazione di un file di
testo, seguito da dal metodo GetFile che
restituisce il file appena creato e che viene aperto col metodo
OpenAsTextStream il quale consente ci di
leggere il file oppure di sovrascrivere il file o inserire altre
informazioni alla fine del file. Infatti la sintassi del metodo
OpenAsTextStream è composta dalle seguenti
parti:
-
oggetto.OpenAsTextStream([modoIO,
[formato]]), dove:
-
modoIO = Facoltativa. Indica la modalità di
input/output e può corrispondere a una delle seguenti tre costanti:
ForReading ( valore
1 = Apre un file in sola lettura. Non è
possibile scrivere nel file), ForWriting
( valore 2 = Apre un file in
scrittura. Se esiste un file con lo stesso nome, il suo contenuto verrà
sovrascritto) o ForAppending ( valore
8 = Apre un file e scrive alla fine del
file.)
-
formato = Facoltativa. Uno dei tre valori
Tristate utilizzati per indicare il formato del
file aperto. Se viene omesso, il file verrà aperto in formato ASCII.(TristateUseDefault,
valore -2 = Apre il file utilizzando
l'impostazione predefinita di sistema. -
TristateTrue, valore -1 =
Apre il file in formato Unicode - TristateFalse,
valore 0 = Apre il file in formato
ASCII.)
Private Sub
CommandButton3_Click()
Dim fs, f, ts, s 'dichiarazione variabili
Set fs = CreateObject("Scripting.FileSystemObject")
fs.CreateTextFile "Miotesto.txt" 'Crea un
file di testo nella cartella di sistema
Set f = fs.GetFile("Miotesto.txt")
Set ts = f.OpenAsTextStream(2, -2)
n = ListBox1.ListCount - 1
For i = 0 To n
ListBox1.ListIndex = i
ts.Write ListBox1.List(ListBox1.ListIndex)
'vedi esempio precedente
ts.WriteLine (" ")
Next i
ts.Close
MsgBox ("Eseguito!")
Set fs = Nothing
Set f = Nothing
Set ts = Nothing
End Sub
|
Potrete divertirvi
e fare prove, imparando ad usare la guida in linea per approfondire i metodi
e le funzioni qui usate.
Buon lavoro.
prelevato sul sito
www.ennius.altervista.org
|