Scrivere e salvare e/o aprire file di testo (.TXT) usando un CommonDialog ActiveX. - dal 04/09/04 pagina vista: volte

Può necessitare a volte, lavorando su Excel, di consultare istruzioni o appunti scritti su file .Txt, oppure di dover scrivere note o appunti, anche di ampie dimensioni, e di volerli salvare per successive consultazioni. Il discorso si fa ampio, se si pensa che sarà possibile non solo prendere e scrivere memorial o comunque testo, ma copiare un'elenco di una colonna del foglio di lavoro , ed incollarlo in un file di testo, salvando in questo modo una serie di dati che potranno in seguito essere consultati, oppure prelevare, copiando, da un file di testo, una serie di dati incolonnati e incollarli in una colonna sul foglio di Excel. Il tutto disponendo delle classiche finestre "Apri File" o "Salva File con nome", scegliendo anche il percorso dove salvarlo. Per le operazioni di copia/incolla da/sul file di testo, dovremo usare le combinazioni di tasti:

  • CTRL + C  per copiare una selezione fatta sul file di testo.

  • CTRL + V per incollare una selezione (copiata in modo tradizionale dal foglio) e incollarla nel file di testo.

Vediamo un'immagine che mostra la UserForm per scrivere un File di testo, che illustra meglio un possibile esempio di copia/incolla : sul foglio, colonna A, un elenco di nomi, selezionato, copiato e poi incollato nella finestra in un file di testo pronto da salvare:

Se vi interessa, proseguite leggendo come fare. Innanzi tutto bisogna poter disporre del controllo .ocx giusto che servirà a caricare dal menù dell'Editor di visual basic,  Strumenti/Controlli Aggiuntivi, il controllo COMDLG32.OCX  che si trova nella cartella System32 di Windows, ed il cui nome identificativo è Microsoft Common Dialog Control 6.0 (SP3). Il CommonDialog non è un Controllo tipico di Excel, ma lui lo riconosce e lo accetta. Questo Controllo CommonDialog (finestre di dialogo comuni) rende disponibile un gruppo di finestre di dialogo standard per l'esecuzione di operazioni quali l'apertura e il salvataggio di file, l'impostazione di opzioni di stampa e la selezione di colori e tipi di carattere, e funge da interfaccia tra il Visual Basic e le routine nella libreria a collegamento dinamico di Microsoft Windows Commdlg.dll.

La procedura per caricarlo è la stessa già descritta nella pagina "UserForm e Gif animate" (vedi) presente nella sezione Vba di http://ennius.interfree.it . Per chi ne fosse sprovvisto, può scaricare da qui il file COMDLG32.zip, 61 Kb, decomprimerlo, e copiarlo nella cartella System32 (questa è la versione per XP). Fatto questo, potremo usarlo inserendolo nelle nostre UserForm. Questo controllo lo vedremo solo quando saremo in modalità progettazione, quando apriremo le userform sul foglio di lavoro, risulterà invisibile. In questa applicazione non è necessario preimpostare nessuna delle proprietà del controllo. Questa un'immagine di come vedremo il CommonDialog nella "Casella degli strumenti" della userform, e come sarà sulla userform:

Per questo progetto inseriremo due UserForm, una per scrivere e salvare un file di testo, l'altra per aprire e leggere file di testo. Cominciamo a vedere come impostare la UserForm per la scrittura di un file di testo

  • inseriamo sulla userform un Controllo CommomDialog, una casella di testo (textbox, di cui vedremo le proprietà da impostare), e tre CommandButton: uno per inserire la data del giorno (opzionale), una per attivare la routine di salvataggio del file sull'hard-disk, ed una per chiudere l'userform.

  • impostiamo la proprietà ShowModal  della UserForm a False - questo ci consentirà di lavorare sul foglio di lavoro nonostante la presenza della UserForm.

Dimensioneremo a piacere la nostra UserForm e altrettanto faremo con la nostra TextBox: non dobbiamo dimenticare che dovrà, se necessario, contenere molte righe di testo, come se fosse un file realizzato col Notepad. Le proprietà della textbox che dovremo modificare sono:

  •  

  • MultiLine impostata a True - questo consentirà di poter scrivere su più righe.

  • EnterKeyBehavior impostata a True - questo consente di andare a capo quando si preme il tasto Invio.

  • ScrollBars impostata a 2-fmScrollBarsVertical - questo munisce di barra di scorrimento verticale la textbox, in modo che si possa scorrere il testo.

  • WordWrap impostata a True - questo consente l'automatismo di andare a capo al termine della riga.

Ora vediamo le istruzioni da usare, per prima

  • la routine per la scrittura e il salvataggio:

Private Sub CommandButton1_Click()
'nota: tutto il file viene salvato come testo (stringa)
CommonDialog1.Filter = "Text files (*.TXT)|*.TXT"
CommonDialog1.ShowSave
'apre la finestra "Salva con nome"
If CommonDialog1.Filename <> "" Then 
Open CommonDialog1.Filename For Output As #1
Print #1, TextBox1.Text
'salva il testo scritto nel file
Close #1
'chiude il file
End If
End Sub

poi la routine per inserire la data del giorno:

Private Sub CommandButton2_Click()
Dim Pippo As Date
Pippo = Date
TextBox1.Text = Pippo & vbLf  
'inserita la data, và a capo ( & vbLf )
TextBox1.SetFocus
'e mette il focus sulla nuova riga
End Sub

Sul pulsante 3, "Chiudi", inseriamo l'istruzione End così oltre a chiudere la form, ne cancella il contenuto dalla memoria:

Private Sub CommandButton3_Click()
End
End Sub

Per quanto riguarda la seconda UserForm, il procedimento è uguale a quanto detto per la prima, compreso le impostazioni delle proprietà della TextBox, solo che qui avremo due soli CommandButton, uno per attivare la procedura di apertura file, ed uno per chiudere la form. In più ci saranno due Label (etichetta) : una avrà il compito di mostrarci il percorso e il nome del file aperto, e la seconda che ci avvisa cosa conterrà l'altra. Questa un'immagine:

 

  • la routine per l'apertura di un file di testo:

Private Sub CommandButton1_Click()
Wrap$ = vbLf
 'istruzione che serve ad importare il file rispettando gli " a capo" e i salti di 'riga - in mancanza di questa istruzione si avrebbe un testo in continuo senza rispettare i 'paragrafi
CommonDialog1.Filter = "Text files (*.TXT)|*.TXT"
CommonDialog1.ShowOpen
'mostra la finestra Apri File
If CommonDialog1.Filename <> "" Then
UserForm1.MousePointer = 11
 'mostra la clessidra col mouse
Open CommonDialog1.Filename For Input As #1
On Error GoTo Grande:
'imposta la gestione di errori (handler) come per Notepad, se un 'file di testo è troppo grande, si genera un errore, in questo caso si gestisce l'errore
Do Until EOF(1)
'ora legge le righe dal file fino alla fine del file (End Of File)
Line Input #1, LineOfText$
AllText$ = AllText$ & LineOfText$ & Wrap$
Loop
Label1.Caption = CommonDialog1.Filename
 'inserisce il percorso e il nome nella Label
TextBox1.Text = AllText$
'mostra il file rispettando i paragrafi
TextBox1.Enabled = True

Ripristina:
UserForm1.MousePointer = 0
'ripristina il mouse
Close #1
'chiude il file
End If
Exit Sub
Grande:
'avvisa col messaggio di errore
MsgBox ("Il File richiesto è troppo grande.")
Resume Ripristina:
'passa alla routine Ripristina
End Sub

il pulsante Chiudi ha la stessa istruzione della UserForm precedente.

 

Buon lavoro.

prelevato sul sito www.ennius.altervista.org