Telefonino.net network
 
| 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 » |

Torna indietro   WinTricks Forum > Software > Programmazione

Notices

Rispondi
 
Strumenti discussione
Vecchio 15-10-2010, 18.25.50   #1
Simoneshake
Junior Member
 
L'avatar di Simoneshake
 
Registrato: 21-07-2001
Loc.: Roma
Messaggi: 69
Simoneshake promette bene
[VBA, Excel] Creare file di testo da selezione

Lo scopo del mio progetto è creare un file di testo dopo che l'utente ha selezionato un'area su excel (in automatico do il nome al file e uso ";" come separatore.
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
Qualcuno ha un'idea di come fargli scrivere le righe successive alla prima?
___________________________________

"...e il mio maestro mi insegnò com'è difficile trovare l'alba dentro l'imbrunire..." (F.Battiato)
SA
Simoneshake non è collegato   Rispondi citando
Vecchio 15-10-2010, 19.39.53   #2
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.502
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
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
LoryOne non è collegato   Rispondi citando
Vecchio 15-10-2010, 19.43.45   #3
Simoneshake
Junior Member
 
L'avatar di Simoneshake
 
Registrato: 21-07-2001
Loc.: Roma
Messaggi: 69
Simoneshake promette bene
sono un neofita. ora provo. grazie
___________________________________

"...e il mio maestro mi insegnò com'è difficile trovare l'alba dentro l'imbrunire..." (F.Battiato)
SA
Simoneshake non è collegato   Rispondi citando
Vecchio 15-10-2010, 20.36.39   #4
Simoneshake
Junior Member
 
L'avatar di Simoneshake
 
Registrato: 21-07-2001
Loc.: Roma
Messaggi: 69
Simoneshake promette bene
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
Simoneshake non è collegato   Rispondi citando
Vecchio 15-10-2010, 21.05.24   #5
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.502
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
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
LoryOne non è collegato   Rispondi citando
Vecchio 16-10-2010, 14.39.13   #6
Simoneshake
Junior Member
 
L'avatar di Simoneshake
 
Registrato: 21-07-2001
Loc.: Roma
Messaggi: 69
Simoneshake promette bene
Thumbs up

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
Bene!
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
Simoneshake non è collegato   Rispondi citando
Rispondi

Tags
excel, vba


Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti)
 
Strumenti discussione

Regole di scrittura
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is ON
Gli smilies sono ON
[IMG] è ON
Il codice HTML è OFF

Vai al forum

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

Orario GMT +2. Ora sono le: 06.49.45.


E' vietata la riproduzione, anche solo in parte, di contenuti e grafica.
Copyright © 1999-2017 Edizioni Master S.p.A. p.iva: 02105820787 • Tutti i diritti sono riservati
L'editore NON si assume nessuna responsabilità dei contenuti pubblicati sul forum in quanto redatti direttamente dagli utenti.
Questi ultimi sono responsabili dei contenuti da loro riportati nelle discussioni del forum
Powered by vBulletin - 2010 Copyright © Jelsoft Enterprises Limited.