Excel - Da UserForm a file.txt (con VBA)
Asked By draleo on 26-May-12 05:06 AM
Salve; ho cercato nel gruppo ma non ho trovato niente. Dovrei
risolvere questo problema:
in una userform ho una decina di textbox (textbox1,textbox2 ecc) con
relative label (label1,label2 ecc)
Dovrei generare un file txt (chiamato per es: dati.txt da posizionare
nella stessa directory dove risiede il file Excel usato) che contenga
i dati delle textbox e le label
Il file dati.txt cos=EC ottenuto dovrebbe avere questa struttura
Label1: Pinco (cio=E8 testo della Textbox1)
Label2: pallino
Ecc
Nei particolari la procedura dovrebbe:
-controllare se il file dati.txt gi=E0 esiste (e se esiste cancellarlo)
-generare il nuovo file dati.txt
Grazie mille
draleo
elby replied to draleo on 26-May-12 03:43 PM
Per l'esportazione da Excel a txt sia in un file nuovo o per
modificare un file esistente vedi:
http://www.cpearson.com/excel/ImpText.aspx
Per testatre se un file txt esiste vedi:
http://www.vbforums.com/showthread.php?t=3D349990
Ciao Elio
Bruno Campanini replied to draleo on 27-May-12 06:13 AM
on 26-05-12, draleo supposed :
Esegui la procedura da un Button di User Form.
===================================================
Private Sub SaveTextFile_Click()
Dim TargetFileName As String, S() As String
Dim j As Integer, i As Control, k As Integer
Dim h As Integer, SS As String
TargetFileName = "C:\Dati.txt"
If Len(Dir(TargetFileName)) Then
Kill TargetFileName
End If
For Each i In Controls
If TypeOf i Is MSForms.TextBox Then
k = k + 1
ReDim Preserve S(1 To 2, 1 To k)
S(1, k) = Controls("Label" & k).Caption
S(2, k) = i
End If
Next
j = FreeFile
Open TargetFileName For Binary Access Write As #j
For h = 1 To k
SS = S(1, h) & Chr(32) & S(2, h) & vbCrLf
Put #j, , SS
Next
Close #j
End Sub
========================================
Bruno
draleo replied to Bruno Campanini on 27-May-12 11:13 AM
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
Perfetto. grazie Mille!!
draleo
draleo replied to draleo on 04-Jun-12 12:05 PM
o)
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
Cortesemente, un chiarimento:
Se volessi copiare nel file txt NON tutte le label e le textbox, ma
soltanto quelle comprese tra il n. 5 e il num 8 ,
come modificare questa parte del codice ?
For Each i In Controls
If TypeOf i Is MSForms.TextBox Then
k =3D k + 1
ReDim Preserve S(1 To 2, 1 To k)
S(1, k) =3D Controls("Label" & k).Caption
S(2, k) =3D i
End If
Next
grazie
draleo
Bruno Campanini replied to draleo on 04-Jun-12 01:15 PM
on 04-06-12, draleo supposed :
Non c'? solo quel For... Next da modificare.
=============================================
Private Sub SaveTextFile_Click()
Dim TargetFileName As String, S() As String
Dim j As Integer, i As Control, k As Integer
Dim h As Integer, SS As String, n As Integer
TargetFileName = "D:\BC.txt"
If Len(Dir(TargetFileName)) Then
Kill TargetFileName
End If
For Each i In Controls
If TypeOf i Is MSForms.TextBox Then
k = k + 1
If k >= 5 And k <= 8 Then
n = n + 1
ReDim Preserve S(1 To 2, 1 To n)
S(1, n) = Controls("Label" & k).Caption
S(2, n) = i
End If
End If
Next
j = FreeFile
Open TargetFileName For Binary Access Write As #j
For h = 1 To n
SS = S(1, h) & Chr(32) & S(2, h) & vbCrLf
Put #j, , SS
Next
Close #j
End Sub
=======================================
Bruno
draleo replied to Bruno Campanini on 04-Jun-12 02:57 PM
e
a
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
Benissimo ! (come sempre)
grazie
draleo
draleo replied to draleo on 09-Jun-12 03:54 PM
on
are
nga
o)
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
Poich=E8 l'appetito vien mangiando, avrei la necessita di completare il
discorso con un'altra macro (anche per capire il meccanismo delle
matrici usate)
Come modificare la macro, per copiare in un file txt i valori delle
SOLE textbox (dalla n.5 alla n.8)? Cio=E8 senza copiare le relative
label ?
grazie mille
draleo
Bruno Campanini replied to draleo on 10-Jun-12 04:48 AM
draleo expressed precisely :
Se ho ben capito, metti un REM davanti all'istruzione
S(1, n) = Controls("Label" & k).Caption
cos?:
REM S(1, n) = Controls("Label" & k).Caption
Bruno
Bruno Campanini replied to Bruno Campanini on 10-Jun-12 04:58 AM
Bruno Campanini formulated on Sunday :
Dimenticavo, nel loop finale sostituisci
SS = S(1, h) & Chr(32) & S(2, h) & vbCrLf
con
SS = S(2, h) & vbCrLf
Dovrebbe andare... non ho provato.
Bruno
draleo replied to Bruno Campanini on 10-Jun-12 11:18 AM
e il
Mah.... succede una cosa strana , alla quale non so dare
spiegazione:spero di riuscire a spiegarmi
le 3 macro funzionano bene se usate con una userform in cui il name
di tutte le texbox (textbox1,textbox2,texbox3 ecc) coincida con
l'ordine con cui -in fase di progettazione- sono state generate: cio=E8
prima ho generato la textbox1,poi la textbox2,poi la textbox3 ecc. in
tal caso tutto funziona bene
Se per=F2 dopo aver generato tutte le textbox, a qualcuna di esse
cambio il name - dalla finestra propriet=E0 della textbox:name- per es
trasformo il nome della texbox1 in texbox2 e viceversa, allora le
texbox non vengono copiate sul file.txt con il nuovo ordine che mi
aspetterei :mi aspetterei che prima venisse copiata quella che =E8 stata
rinominata textbox1 (e che prima del cambiamento di nome era la
textbox2).
Invece vengono copiate con l'ordine in cui queste sono state
generate
Potrei risolvere il tutto ricostruendo ex novo tutta la UserForm; ma =E8
una faticaccia (una ventina di label con relative textbox collegate a
celle del foglio,ecc ecc)
Si pu=F2 fare in modo che l'ordine delle texbox copiate sul file.txt
rispecchi il nuovo name delle textbox ?
comunque grazie ( anche se non si potesse fare)
draleo
Bruno Campanini replied to draleo on 10-Jun-12 12:10 PM
draleo formulated on Sunday :
===========================
Private Sub SaveTextFile2_Click()
'
' Esporta in BC.txt il Valore dei controlli elencati in
' ControlName(), nell'ordine in cui ivi appaiono.
'
Dim TargetFileName As String
Dim j As Integer, i As Integer
Dim ControlName() As String, n As Integer
TargetFileName = "D:\BC.txt"
If Len(Dir(TargetFileName)) Then
Kill TargetFileName
End If
n = 4
ReDim ControlName(1 To n)
ControlName(1) = "TextBox3"
ControlName(2) = "TextBox2"
ControlName(3) = "TextBox1"
ControlName(4) = "TextBox4"
j = FreeFile
Open TargetFileName For Binary Access Write As #j
For i = 1 To n
Put #j, , ControlName(i) & vbCrLf
Next
Close #j
End Sub
==============================
Bruno
draleo replied to Bruno Campanini on 10-Jun-12 02:38 PM
are il
le
ve
me
a
=E8
=3D=3D=3D
=3D=3D=3D=3D=3D=3D
Ok, ora va tutto bene.
Ho per=F2 modificato
ControlName(1) =3D "TextBox3"
ControlName(2) =3D "TextBox2"
in
ControlName(1) =3D TextBox3
ControlName(2) =3D TextBox2
grazie ancora
draleo
Bruno Campanini replied to draleo on 10-Jun-12 07:27 PM
draleo formulated on Sunday :
Avevo considerato - sbadatamente - volessi esportare i nomi e non i
valori.
Poich? ControlName() ? stato definito As String, per comprendere valori
anche diversi da string ? opportuno modificare:
Put #j, , ControlName(i) & vbCrLf
in:
Put #j, , Controls(ControlName(i)) & vbCrLf
=====================================
Faccio un fioretto:
non ti risponder? pi? se non la smetti di citare tutti i post
precedenti. ? sufficiente che tu citi quello (di solito l'ultino) al
quale rispondi.
Bruno
paoloard replied to Bruno Campanini on 11-Jun-12 04:08 AM
cut
Faccio un fioretto:
non ti risponder? pi? se non la smetti di citare tutti i post
precedenti. ? sufficiente che tu citi quello (di solito l'ultino) al
quale rispondi.
Bruno
*****************
Ciao Bruno
Pi? che un fioretto..... ? un consiglio o una minaccia?
a cui seguir? immancabile sparatoria alla Tex Willer :-)
-- ciao paoloard
http://riolab.org
Bruno Campanini replied to paoloard on 11-Jun-12 04:24 AM
After serious thinking paoloard wrote :
Il proposito ? quello di non rispondere.
Cambiassi idea, e rispondessi, userei armi pi? subdole.
Bruno