|
| HOMEPAGE | INDICE FORUM | REGOLAMENTO | ::. | NEI PREFERITI | .:: | RSS Forum | RSS News | NEWS web | NEWS software | |
| PUBBLICITA' | | | ARTICOLI | WIN XP | VISTA | WIN 7 | REGISTRI | SOFTWARE | MANUALI | RECENSIONI | LINUX | HUMOR | HARDWARE | DOWNLOAD | | | CERCA nel FORUM » | |
15-10-2010, 18.25.50 | #1 |
Junior Member
Registrato: 21-07-2001
Loc.: Roma
Messaggi: 69
|
[VBA, Excel] Creare file di testo da selezione
Ad esempio nel file excel (3 colonne, 5 righe selezionate) ho questi dati: AC IT Via Terni, 12 AC IT Via Terni, 13 AC IT Via Terni, 14 AC IT Via Terni, 15 AC IT Via Terni, 16 e mi aspetto che vengano scritti nel file di testo così: AC;IT;Via Terni, 12; AC;IT;Via Terni, 13; AC;IT;Via Terni, 14; AC;IT;Via Terni, 15; AC;IT;Via Terni, 16; invece dopo innumerevoli prove ottengo al massimo: AC;IT;Via Terni, 12; AC;IT;Via Terni, 12; AC;IT;Via Terni, 12; AC;IT;Via Terni, 12; AC;IT;Via Terni, 12; con il codice che riporto: Codice:
Sub textfile() Dim rRange As Range Dim fs As Object, a As Object, i As Integer, s As String On Error Resume Next Application.DisplayAlerts = False Set rRange = Application.InputBox(Prompt:= _ "Selezionare con il mouse le celle da esportare come testo.", _ Title:="SELEZIONARE LE CELLE", Type:=8) On Error GoTo 0 Application.DisplayAlerts = True If rRange Is Nothing Then Exit Sub Else rRange.Select End If Set fs = CreateObject("Scripting.FileSystemObject") Set a = fs.CreateTextFile("D:\" & Range("A1").Value & ".txt", True) s = "" 'clear buffer c = 1 ' start in column "A" For r = 2 To Selection.Rows.Count + 1 While Not IsEmpty(Cells(r, c)) s = s & Cells(r, c) & ";" 'write a cell of data and add a ; c = c + 1 Wend a.writeline s 'write line to text file Next r End Sub
___________________________________
"...e il mio maestro mi insegnò com'è difficile trovare l'alba dentro l'imbrunire..." (F.Battiato) SA |
15-10-2010, 19.39.53 | #2 |
Gold Member
WT Expert
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
|
Prima di tutto, ogni volta che la riga r cambia, deve essere posta nulla la stringa s, in modo che cambi solo la colonna c (incrementata con c=c+1 con valore iniziale di c=1 al termine di ogni ciclo while wend) e la stringa s si incrementi del valore presente nella colonna c seguito da ";". Lo stesso dicasi per la colonna c che all'interno del ciclo for ... next deve nuovamente essere posta pari ad 1, in modo che cambiando la riga r, la stringa s si popoli con il primo valore della colonna c e via di seguito
|
15-10-2010, 19.43.45 | #3 |
Junior Member
Registrato: 21-07-2001
Loc.: Roma
Messaggi: 69
|
sono un neofita. ora provo. grazie
___________________________________
"...e il mio maestro mi insegnò com'è difficile trovare l'alba dentro l'imbrunire..." (F.Battiato) SA |
15-10-2010, 20.36.39 | #4 |
Junior Member
Registrato: 21-07-2001
Loc.: Roma
Messaggi: 69
|
Quasi ci siamo....
mi sai dire se invece di "For r = 2 To Selection.Rows.Count + 1" si può, al posto del 2, dargli un valore corrispondente alla prima riga selezionata? ora il codice sotto scrive correttamente la quantità e la sequenza di righe ma comincia sempre da 2...perché glielo dico io con la riga sopra riportata Codice:
Sub textfile() Dim rRange As Range Dim fs As Object, a As Object, i As Integer, s As String On Error Resume Next Application.DisplayAlerts = False Set rRange = Application.InputBox(Prompt:= _ "Selezionare con il mouse le celle da esportare come testo.", _ Title:="SELEZIONARE LE CELLE", Type:=8) On Error GoTo 0 Application.DisplayAlerts = True If rRange Is Nothing Then Exit Sub Else rRange.Select End If Set fs = CreateObject("Scripting.FileSystemObject") Set a = fs.CreateTextFile("D:\simone\Desktop\" & Range("A1").Value & ".txt", True) 'r = ActiveCell.Row ' set the active row to write '<== se lo attivo non cambia! For r = 2 To Selection.Rows.Count + 1 s = "" 'clear buffer '<== spostato c = 1 ' start in column "A" '<== spostato While Not IsEmpty(Cells(r, c)) 'start at column 1 and do until no more columns of data s = s & Cells(r, c) & ";" 'write a cell of data and add a ; c = c + 1 'increment to next column Wend a.writeline s 'write line to text file Next r End Sub
___________________________________
"...e il mio maestro mi insegnò com'è difficile trovare l'alba dentro l'imbrunire..." (F.Battiato) SA |
15-10-2010, 21.05.24 | #5 |
Gold Member
WT Expert
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
|
La classe Selection non può che essere identificata da un range di celle che comprendono sia righe sia colonne. Gli sviluppatori, quindi, hanno predisposto la classe costruendo un'interfaccia che potesse consentire di fare accesso al range suddividendolo in righe e colonne. Quando leggi Selection.Rows.Count,significa che tu vuoi sapere quante (Count) sono le Righe (Rows) comprese nella selezione (Selection). E' importante notare che la gerarchia di classi e/o metodi e proprietà di ogni oggetto che le compongono è sempre leggibile da sinistra verso destra (Da destra verso sinistra se guardi il monitor). Devi studiarti la gerarchia di classi ed i relativi metodi e/o proprietà per sapere a quale di questi devi far riferimento per cio che mi stai chiedendo: Se non ricordo male, premi F2 all'interno dell ambiente VBA e studia se ci può essere cio che fa al caso tuo.
Ultima modifica di LoryOne : 15-10-2010 alle ore 21.09.09 |
16-10-2010, 14.39.13 | #6 |
Junior Member
Registrato: 21-07-2001
Loc.: Roma
Messaggi: 69
|
Ho risolto!
Grazie delle celeri risposte. Ammetto però che quando ho letto la tua ultima risposta ho... Come dicevo sono un neofita di VBA e da quattro giorni mi scontravo con la prima soluzione L'altro grattacapo era relativo alla riga For r = qualcosa To qualcos'altro dopo aver "definito" r = qualcosa siccome il qualcosa era una variabile dipendente dalla selezione, finalmente ho cercato info su "conta riga inizio selezione" arrivando alla conclusione che: Codice:
r = rRange.Row 'Proprietà Row-Restituisce il numero della prima riga nella prima area dell'intervallo specificato. Proprietà di tipo Long di sola lettura. For r = r To rRange.Rows(rRange.Rows.Count).Row 'Per restituire il numero dell'ultima Riga dell'intervallo, utilizzare l'espressione myRange.Rows(myRange.Rows.Count).Row ora proseguo con il progetto e i frantoiani che vogliono avranno uno strumento che sono convinto che agevolerà il loro lavoro e eviterà di far perder loro del tempo prezioso
___________________________________
"...e il mio maestro mi insegnò com'è difficile trovare l'alba dentro l'imbrunire..." (F.Battiato) SA |
Tags |
excel, vba |
Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti) | |
Strumenti discussione | |
|
|
Discussioni simili | ||||
Discussione | Autore discussione | Forum | Risposte | Ultimo messaggio |
log di AVAST...che faccio ? | enry1 | Sicurezza&Privacy | 4 | 27-11-2008 18.38.09 |
File .bat associato come file di testo!!! | Farabi Andrea | Windows 7/Vista/XP/ 2003 | 3 | 29-09-2008 20.43.13 |
[XP/SP2] Controllo in corso del file System | primoair | Windows 7/Vista/XP/ 2003 | 2 | 28-02-2006 21.13.01 |
Virus o danni al registro? | Eccomi | Sicurezza&Privacy | 21 | 23-05-2005 09.48.08 |
Windows file protection:guida | Deuced | Windows 9x/Me/NT4/2000 | 7 | 16-03-2004 08.25.28 |