creare file scr da colonna



  • creare file scr da colonna
    di half235 (utente non iscritto) data: 13/04/2013 16:56:03

    Salve vi chiedo aiuto.

    in pratica dovrei da una colonna di excel creare un file .scr(un semplice file di testo ma che abbia questa estensione).
    all'interno di questo file mi dovrebbe comparire esempio:
    ;INIZIO STAMPA FINESTRA
    ;
    ;
    _-PLOT
    S


    ISO espanso A4 (210 x 297 mm)




    0,174.9553
    2100.0,3144.9553






    101


    ;FINE STAMPA FINESTRA

    rispettando gli spazi vuoti e tutto. Queste 20 righe circa potrebbero essere ripetute fino a 100 volte infatti la colonna va da A2 a A2203, all'interno del foglio ho una formula che se imposto 2 ad esempio avrò le 20 righe copiate sopra per 2 volte, cambiando però le righe con i numeri, con altri valori.
    Ho provato ad usare la macro incollata da altra discussione in questo forum ma anche se ho modificato i riferimenti con la colonna interessata non vedo nulla, e se provo a mettere scr invece di txt non mi crea neanche il file
    vi chiedo AIUTO


     
    Sub creafile()
    ' Crea file di testo da una zona dati Excel
    '
    Path$ = "C:" ' percorso per salvataggio file
    Nomefile$ = "Prova_1.txt"   ' nome del file da salvare
    PF$ = Path$ & Nomefile$        ' costruisce percorso completo
    nri% = 4 ' imposta n° righe
    nco% = 8 ' imposta n° colonne
    '
    If Dir(PF$) <> "" Then         ' verifica se il file esiste già
        msgrisp = MsgBox("Il file esiste già." & Chr(13) & "Sostituirlo?", 308, "Messaggio Macro Creafile")
        If msgrisp = 7 Then End
    End If
    F% = FreeFile                  ' acquisisce primo numero di file libero
    Open PF$ For Output As #F%     ' apre un file per output
    For riga% = 1 To nri%
        For col% = 1 To nco%
            If col% < nco% Then
               Print #F%, Sheets("Foglio1").Cells(riga%, col%); Chr(9); 'Scrive dati nel file
            Else
               Print #F%, Sheets("Foglio1").Cells(riga%, col%)
            End If
        Next col%
        If riga% < nri Then Print #F%, Chr(13)
    Next riga%
    '
    Close #F%                      'Chiude File
    '
    MsgBox "Creato file " & Nomefile$, 64, "Messaggio Macro Creafile"
    '
    End Sub



  • di Vecchio Frac data: 13/04/2013 20:22:55

    Un primo problema del codice è all'inizio:

    Path$ = "C:" ' percorso per salvataggio file
    Nomefile$ = "Prova_1.txt" ' nome del file da salvare


    perchè manca il separatore del percorso (o lo metti nel Path o lo metti nel nomefile basta che ci sia)

    Path$ = "C:" ' percorso per salvataggio file
    Nomefile$ = "Prova_1.txt" ' nome del file da salvare


    Non mi piace lo stile QBasic di tipizzare le variabili col loro suffisso (Path$ non è sbagliato ma è obsoleto). Appena puoi fai una bella pulizia e dimensiona correttamente (ricordati anche Option Explicit in testa).

    Nel merito, mancando un file di test con dati da provare, non posso dirti se il codice funziona o no dopo la correzione che ti ho già detto.





  • di Vecchio Frac data: 13/04/2013 20:23:41

    Dimenticavo: il file generato si chiama "Prova_1.txt" come da codice, cambia lì il nome e metti estensione ".scr" se vuoi un file .scr!





  • di half235 data: 14/04/2013 15:58:24

    Ciao grazie per la tua risposta. se aggiungo "" la macro non funziona più, scusami se mi sono espresso male , ma la macro funziona, cerco solo aiuto per poterla personalizzare.
    ecco quello che mi serve

    1) al momento la macro parte dalla cella A1 ed io voglio invece che faccia il range da A2 ad A2203.

    2)la macro dovrebbe copiare nel file solo il gruppo di celle piene cioè, tutte e 22 celle che vanno da
    ;INIZIO STAMPA FINESTRA a ;FINE STAMPA FINESTRA, esempio potrebbe essere il controllo se dopo ";FINE STAMPA FINESTRA" non c'è ";INIZIO STAMPA FINESTRA" stop scrittura file, così che nel file generato avrò solo quello che realmente c'è nelle celle

    3)la macro dovrebbe attivando una specifica cella del foglio 2, copiare la colonna da A2 a A2203 del foglio 2 a seguire al foglio 1

    3)se è possibile vorrei che prendesse il nome del file che creerà da una cella che io specificherò e che magari si possa in qualche modo scegliere la cartella dove salvare.

    Grazie per l'aiuto



  • di Vecchio Frac data: 14/04/2013 20:01:22

    cit. " se aggiungo "" la macro non funziona più"
    ---> Questo mi stupisce assai, è vero invece il contrario, se non c'è un separatore tra path e nomefile, il nome completo non è correttamente costruito.





  • di half235 data: 15/04/2013 21:24:56

    Non so che dirti, per il resto puoi darmi aiuto



  • di half235 (utente non iscritto) data: 17/04/2013 14:02:07

    scusate se vi rompo ancora ma ho cercato di sistemare le cose direttamente in excel, ma ho ancora bisogno del vostro aiuto:

    1) è possibile sostituire "nri% = 4 ' imposta n° righe" con un range dinamico? Come?
    2) nel file che mi crea, oltre a copiare l'area interessata, mi crea delle righe vuote tra le righe reali come faccio a non farle creare?
    se serve io devo copiare nel file 1 colonna la "A" e molte righe

    vi prego è urgente
    grazie a tutti per l'aiuto



  • di half235 data: 18/04/2013 07:26:22

    Ho aggiunto Chr(9); e sembra aver risolto per il punto 2
    Ma per il punto 1 dovrei attivare prima la cella e poi dirgli. Con range che é il suo valore?
    Volevo fare in modo che invece di settare il nome del file da creare su vba si potrebbe aprire la finestra salva con nome? Grazie mille aiuto



  • di Vecchio Frac data: 18/04/2013 09:19:11

    Per aprire la finestra di dialogo salva con nome in Excel ti serve l'istruzione
    application.GetSaveAsFilename
    (puoi aprire la Guida per vedere i diversi parametri)

    Non ho capito il problema del punto 1: quella variabile è impostata fissa sul valore 4 e invece vuoi che questo valore cambi, ma in funzione di cosa?

    Inoltre trovo ancora difficoltà a capire l'obiettivo. Hai una colonna di dati e la vuoi esportare in un file di testo .scr con un header e un footer fisso?





  • di half235 data: 18/04/2013 17:12:23

    altra cosa strana mettendo annulla e andando avanti con la macro mi crea un file chiamato FALSO è possibile far si chenon compaia o che venga rimosso?
    grazie


  • riepilogo
    di half235 data: 19/04/2013 11:15:53

    Salve cerco di fare un riepilogo dei problemi non ancora risolti e dell'obbiettivo che non sono stato molto chiaro.

    io dovrei copiare il contenuto di una colonna chiamiamola "C" in un file di testo il contenuto della colonna è come da codice allegato e in determinate condizione (cioè compilando alcune celle di excel) si ripeterà per più di 100 volte.

    CONTENUTO COLONNA DA INSERIRE NEL FILE .SRC

    ;INIZIO STAMPA FINESTRA
    ;
    ;
    _-PLOT
    S


    ISO espanso A4 (210 x 297 mm)




    0,174.9553
    2100.0,3144.9553






    101


    ;FINE STAMPA FINESTRA


    Problemi:

    1) quando apre la finestra salva con nome se clicco "annulla" continua la macro come se avessi cliccato "salva"

    2) il file creato alla sola riga del codice che adesso visualizzate con il valore "101" antepone in automatico uno spazio, è fondamentale che il file sia come visualizzato in colonna altrimenti è inutilizzabile. ho provato a copiare manualmente la colonna su un file è funziona perfettamente, invece con la macro il file non va bene perchè crea quello spazio.

    Ho effettuato un'altra modifica al codice precedentemente postato perchè mi inseriva dei tab dopo ogni riga allego solo la parte del codice interessata






     
    PARTE DEL CODICE MODIFICATO
               Print #F%, Sheets("COPERTINE ETC").Cells(riga%, col%);  'Scrive dati nel file
            Else
               Print #F%, Sheets("COPERTINE ETC").Cells(riga%, col%); 
            End If
        Next col%
        If riga% < nri Then Print #F%,



  • di Vecchio Frac data: 19/04/2013 12:03:26

    Ripropongo un testo precedente di half235 che non è stato inserito correttamente.


    Ciao

    ho risolto come da codice allegato.
    come al solito 2 problemi
    1) appena apre la finestra "salva" anche se clicco "annulla" mi continua con la macro come se avessi cliccato ok. Vorrei che il tasto annulla facesse il suo sporco lavoro
    2) in tutte le righe che contengono un numero intero sequenziale(che va da 1 a 100) mi antepone uno spazio nel file creato da cosa dipende? ho provato a cambiare il tipo di cella da generale a numero e testo ma sempre stesso problema

     
    Sub CREAFILECOPERTINE()
    ' Crea file di testo da una zona dati Excel
    '
    Path$ = "C:" ' percorso per salvataggio file
    Nomefile$ = Cells(3, 67) & ".scr"   ' nome del file da salvare
    PF$ = Application.GetSaveAsFilename(InitialFileName:=Nomefile$, fileFilter:="Testo Unicode, *.txt")        ' costruisce percorso completo
    nri% = Cells(2, 22) ' imposta n° righe
    nco% = 14 ' imposta n° colonne
    '
    If Dir(PF$) <> "" Then         ' verifica se il file esiste già
        msgrisp = MsgBox("Il file esiste già." & Chr(13) & "Sostituirlo?", 308, "Messaggio Macro Creafile")
        If msgrisp = 7 Then End
    End If
    F% = FreeFile                  ' acquisisce primo numero di file libero
    Open PF$ For Output As #F%     ' apre un file per output
    For riga% = 2 To nri%
        For col% = 14 To nco%
            If col% < nco% Then
               Print #F%, Sheets("COPERTINE ETC").Cells(riga%, col%); Chr(9); 'Scrive dati nel file
            Else
               Print #F%, Sheets("COPERTINE ETC").Cells(riga%, col%); Chr(9);
            End If
        Next col%
        If riga% < nri Then Print #F%, Chr(13)
    Next riga%
    '
    Close #F%                      'Chiude File
    '
    MsgBox "Creato file " & Nomefile$ & Chr(13) & "… ti augura" & Chr(13) & "Buona Giornata  ", 64, "Messaggio Macro Creafile"
    '
    End Sub
    






  • di half235 data: 19/04/2013 15:47:16

    grazie vecchio frac scusami per lo sbattimento ma la funzione modifica post non sarebbe male.

    torniamo a noi sono riuscito ad essere chiaro?
    come posso risolvere le 2 problematiche? in special modo la seconda come faccio a far si che la macro copi in modo identico la colonna?

    grazie



  • di Vecchio Frac data: 19/04/2013 17:48:20

    Sto riguardando a fondo il problema e il codice.
    Per intanto al volo il problema dell'Annulla si risolve così:
    If pf = "Falso" Then Exit Sub





  • di Vecchio Frac data: 19/04/2013 18:10:41

    Ho riscritto un pochino il codice e adesso mi sembra che gli ultimi due problemi siano superati.
    Spero che sia corretto così come leggo nel codice: in BO3 c'è il nome del file da creare, in V2 c'è il numero di righe che devono essere lette dalla colonna N e inserite nel nuovo file di testo.
    Questo, perlomeno, è ciò che dice il codice originale ^_^
     
    Option Explicit
    
    Sub CREAFILECOPERTINE()
    ' Crea file di testo da una zona dati Excel
    '
    Dim path As String, nome_file As String, pf As String
    Dim nri As Long, nco As Integer
    Dim msgrisp As Integer, f As Integer
    
        path = "C:UsersFranzDesktop" ' percorso per salvataggio file
        nome_file = Cells(3, 67) & ".txt" ' nome del file da salvare   è in cella "BO3"
        pf = Application.GetSaveAsFilename(InitialFileName:=nome_file, fileFilter:="Testo Unicode, *.txt")        ' costruisce percorso completo
        
        If pf = "Falso" Then Exit Sub
        
        nri = Cells(2, 22) ' imposta n° righe   è in cella "V2"
        nco = 14 ' imposta la colonna in cui si trovano i dati (14 = "N")
        '
        If Dir(pf) <> "" Then         ' verifica se il file esiste già
            msgrisp = MsgBox("Il file esiste già." & vbCrLf & "Sostituirlo?", vbYesNo + vbExclamation + vbDefaultButton2, "Messaggio Macro Creafile")
            If msgrisp = vbNo Then End
        End If
        
        f = FreeFile                  ' acquisisce primo numero di file libero
        Open pf For Output As #f      ' apre un file per output
        
        For riga = 2 To nri
            For col = 14 To nco
                'If col < nco Then
                   Print #f, Sheets("COPERTINE ETC").Cells(riga, col)  'Scrive dati nel file
                'Else
                '   Print #f, Sheets("COPERTINE ETC").Cells(riga, col);
                'End If
            Next col
            'If riga < nri Then Print #f, vbCrLf
        Next riga
        
        Close #f                      'Chiude File
        
        MsgBox "Creato file " & Nomefile & vbCrLf & "… ti augura" & vbCrLf & "Buona Giornata  ", vbInformation, "Messaggio Macro Creafile"
        
    End Sub
    






  • di half235 data: 19/04/2013 22:59:35

    ciao vecchio frac grazie per il tuo aiuto ho provato il tuo codice, al momento i problemi riscontrati sono che non mette più di default il nome nella finestra salva come, ma il problema invece che mette lo spazio prima della riga con scritto 101 non è scomparso lo fa sempre
    grazie ancora spero che continui a darmi una mano



  • di half235 data: 19/04/2013 23:10:22

    scusami il discorso nome file default risolto, altra domanda però è se l'utente ha scritto un nome diverso come faccio a riportarlo su msgbox finale? se uso la variabile pf mi da tutto il percorso c'è un modo per visualizzare solo il nome?
    il problema dello spazio resta ed è quello che mi serve dato che il file creato che è uno script per altro programma non mi funziona



  • di half235 data: 19/04/2013 23:38:25

    la funzione trim? potrebbe essermi utile? come la integro?
    grazie



  • di half235 data: 20/04/2013 16:11:21

    oppure dovremmo in qualche modo prima fare il copia e poi print del copia semplicemente
    che ne dite?



  • di half235 data: 20/04/2013 18:38:51

    ho allegato il file così se qualcuno vuole provare



  • di half235 data: 20/04/2013 18:39:44

    dimenticavo lo spazio lo mette sia davanti il 101 che dietro e devo rimuoverli entrambi
    grazie



  • di Vecchio Frac data: 21/04/2013 18:27:55

    cit. " c'è un modo per visualizzare solo il nome?"
    ---> Il nome è memorizzato nella variabile "nome_file" che comunque punta alla cella 3, 67 ( BO3).
    In "pf" hai il nome completo e devi ricavarti il nome inserito dall'utente giocando con InstrRev, recuperando l'ultimo slash:
    se in pf c'è qualcosa tipo "C:pippomiofile.txt", allora l'istruzione
    solo_nome_file = mid(pf, instrrev(pf, "")+1)
    ti restituirà solamente "miofile.txt"

    cit. " la funzione trim? potrebbe essermi utile?"
    --->Trim() serve solo per togliere spazi vuoti a inizio e fine di una stringa, puoi usarla ovunque ti sia necessario.

    cit. "dovremmo in qualche modo prima fare il copia e poi print del copia semplicemente"
    ---> Non ho capito :)

    cit. "dimenticavo lo spazio lo mette sia davanti il 101 che dietro e devo rimuoverli entrambi"
    ---> dalle mie prove non è così, ma adesso vedo il tuo file





  • di Vecchio Frac data: 21/04/2013 20:19:54

    ...ho rivisto il file allegato e adesso ho capito il problema "dello spazio davanti e dietro" e il tuo riferimento a Trim ^_^
    Ecco la riga che devi modificare trimmando il dato prima di metterlo nel file:
    Print #f, Trim(Sheets("COPERTINE ETC").Cells(riga, col)) 'Scrive dati nel file
    in questo modo vengono tolti gli spazi in eccesso e viene scritto il dato puro e semplice.

    Comunque la prima versione del codice, su cui avevo lavorato, è leggermente diversa da quella che hai postato nel file allegato (sono cambiati i riferimenti di riga e di colonna, hai cambiato il nome del foglio,...), inoltre ti consiglio caldamente di tipizzare le variabili con Dim ... As ... e di lasciar perdere i suffissi di tipo, che creano solo confusione.

    Ti riallego una nuova revisione dell'intera procedura.

     
    Sub CREAFILECOPERTINE()
    ' Crea file di testo da una zona dati Excel
    '
    Dim path As String, nome_file As String, pf As String
    Dim nri As Long, nco As Integer
    Dim msgrisp As Integer, f As Integer
    
        path = "C:UsersFranzDesktop" ' percorso per salvataggio file
        nome_file = "nome_del_file.scr"  ' nome del file da salvare
        pf = Application.GetSaveAsFilename(InitialFileName:=nome_file, fileFilter:="File SCR, *.scr,Testo Unicode, *.txt")        ' costruisce percorso completo
        
        If pf = "Falso" Then Exit Sub
        
        nri = 160   ' imposta n° righe
        nco = 1     ' imposta la colonna in cui si trovano i dati
        '
        If Dir(pf) <> "" Then         ' verifica se il file esiste già
            msgrisp = MsgBox("Il file esiste già." & vbCrLf & "Sostituirlo?", vbYesNo + vbExclamation + vbDefaultButton2, "Messaggio Macro Creafile")
            If msgrisp = vbNo Then End
        End If
        
        f = FreeFile                  ' acquisisce primo numero di file libero
        Open pf For Output As #f      ' apre un file per output
        
        For riga = 1 To nri
            For col = 1 To nco
                Print #f, Trim(Sheets("COPERTINE ETC").Cells(riga, col))  'Scrive dati nel file
            Next col
        Next riga
        
        Close #f                      'Chiude File
        
        MsgBox "E' stato creato il file " & Mid(pf, InStrRev(pf, "") + 1) & vbCrLf & "... ti auguro" & vbCrLf & "Buona Giornata  ", vbInformation, "Messaggio Macro Creafile"
        
    End Sub






  • di half235 data: 21/04/2013 22:03:55

    Grazie perfetto o quasi ha solo una piccola pecca dopo l'ultima stringa fa un a capo di troppo puoi eliminarlo? in quanto il programma che lo legge lo vede come un comando

    Grazie ancora di tutto per il resto è perfetto sei stato gentilissimo. Per curiosità ti dico che i riferimenti li hai trovati cambiati per far si che ti potessi allegare un file veloce di quello che volevo ottenere

    GRAZIE!



  • di Vecchio Frac data: 21/04/2013 22:31:59

    Prova questa versione leggermente modificata, soprattutto concettualmente ^_^
    Adesso la riga finale non comprende più il ritorno a capo.
    Tuttavia è interessante notare come ho letto tutta la colonna dati mediante la funzione Transpose, senza bisogno di un cilco for.
    Il codice è abbastanza intelligente da ricavare da sè il numero di righe del range, senza doverlo preimpostare.
    Se la colonna dove si trovano i dati non è A, basta cambiare il numero in nco = 1, dove 1 corrisponde alla colonna A.

    Domanda: i dati possono stare anche in più colonne? Non sembra così dal tuo primo post, però il codice iniziale sembrava prevedere questa possibilità.
     
    Sub CREAFILECOPERTINE()
    ' Crea file di testo da una zona dati Excel
    '
    Dim path As String, nome_file As String, pf As String
    Dim nri As Long, nco As Integer
    Dim msgrisp As Integer, f As Integer
    Dim v As Variant, col_data As Variant, i As Integer
    
    
        path = "C:UsersFranzDesktop" ' percorso per salvataggio file
        nome_file = "nome_del_file.scr"  ' nome del file da salvare
        pf = Application.GetSaveAsFilename(InitialFileName:=nome_file, fileFilter:="File SCR, *.scr,Testo Unicode, *.txt")        ' costruisce percorso completo
        
        If pf = "Falso" Then Exit Sub
        
        If Dir(pf) <> "" Then         ' verifica se il file esiste già
            msgrisp = MsgBox("Il file esiste già." & vbCrLf & "Sostituirlo?", vbYesNo + vbExclamation + vbDefaultButton2, "Messaggio Macro Creafile")
            If msgrisp = vbNo Then End
        End If
        
        'il numero di righe è ricavato automaticamente dalla colonna nco
        nri = Sheets("COPERTINE ETC").Cells([A:A].Cells.Count, "A").End(xlUp).Row
        nco = 1     ' imposta la colonna in cui si trovano i dati
        col_data = WorksheetFunction.Transpose(Range(Cells(1, nco), Cells(nri, nco)))
        
        f = FreeFile                  ' acquisisce primo numero di file libero
        Open pf For Output As #f      ' apre un file per output
        
        For Each v In col_data
            i = i + 1
            If i < nri Then
                Print #f, Trim(v)
            Else
                Print #f, Trim(v);
            End If
        Next
        
        Close #f                      'Chiude File
        
        MsgBox "E' stato creato il file " & Mid(pf, InStrRev(pf, "") + 1) & vbCrLf & "... ti auguro" & vbCrLf & "Buona Giornata  ", vbInformation, "Messaggio Macro Creafile"
        
    End Sub






  • di Vecchio Frac data: 21/04/2013 22:34:07

    Un piccolo errata corrige.
    Altrimenti il numero di righe è ricavato sempre dalla colonna A, anche se imposti come partenza una colonna diversa :)
     
        'il numero di righe è ricavato automaticamente dalla colonna nco
        nco = 1     ' imposta la colonna in cui si trovano i dati
        nri = Sheets("COPERTINE ETC").Cells([A:A].Cells.Count, nco).End(xlUp).Row
    






  • di Vecchio Frac data: 22/04/2013 08:07:25

    Di seguito una risposta che half235 aveva inserito ma che conteneva dati privati e ho provveduto a ripulire :)

    Half235 scriveva:
    "Scusami vecchio frac ma inizio a fare confusione altrimenti, ti ho allegato il penultimo codice che mi hai inviato adattato alle mie esigenze. come vedi il calcolo delle righe me lo trovo già su una cella. mi spieghi bene come fa a calcolarsi in automatico le righe ?
    Rispetto a quando siamo partiti ho modificato il foglio excel così da fare in modo che i dati li mette in automatico su un unica colonna"

     
    Sub CREAFILECOPERTINA()
    ' Crea file di testo da una zona dati Excel
    '
    Dim path As String, nome_file As String, pf As String
    Dim nri As Long, nco As Integer
    Dim msgrisp As Integer, f As Integer
    
        path = "C:" ' percorso per salvataggio file
        nome_file = path & Cells(3, 67) & ".scr"  ' nome del file da salvare
        pf = Application.GetSaveAsFilename(InitialFileName:=nome_file, fileFilter:="File SCR, *.scr,Testo Unicode, *.txt")        ' costruisce percorso completo
        
        If pf = "Falso" Then Exit Sub
        
        nri = Cells(2, 22)   ' imposta n° righe
        nco = 14     ' imposta la colonna in cui si trovano i dati
        '
        If Dir(pf) <> "" Then         ' verifica se il file esiste già
            msgrisp = MsgBox("Il file esiste già." & vbCrLf & "Sostituirlo?", vbYesNo + vbExclamation + vbDefaultButton2, "COSA VUOI FARE?")
            If msgrisp = vbNo Then End
        End If
        
        f = FreeFile                  ' acquisisce primo numero di file libero
        Open pf For Output As #f      ' apre un file per output
        
        For riga = 2 To nri
            For col = 14 To nco
                Print #f, Trim(Sheets("COPERTINE ETC").Cells(riga, col))  'Scrive dati nel file
            Next col
        Next riga
        
        Close #f                      'Chiude File
        
        MsgBox "Creato file " & Mid(pf, InStrRev(pf, "") + 1) & vbCrLf & vbCrLf & "Tipo file COPERTINA ETC" & vbCrLf & vbCrLf & "Buona giornata" & vbCrLf & "...  ;)", vbInformation, "SCRIPT CREATO CON SUCCESSO!"
        ActiveSheet.Protect Password:="password"
    End Sub
    






  • di Vecchio Frac data: 22/04/2013 08:13:17

    Half,
    se hai già il numero totale di righe interessate dall'operazione, fai riferimento a quello.
    Il doppio ciclo For annidato, se hai solo una colonna di dati, è inutile e può essere semplificato:


    For riga = 2 To nri
    Print #f, Trim(Sheets("COPERTINE ETC").Cells(riga, nco)) 'Scrive dati nel file
    Next


    Per completezza riporto il codice che ricava da sè il numero di righe.


    'il numero di righe è ricavato automaticamente dalla colonna nco
    nri = Sheets("COPERTINE ETC").Cells([A:A].Cells.Count, nco).End(xlUp).Row
    nco = 1 ' imposta la colonna in cui si trovano i dati



    Comunque trovo più efficiente l'ultima revisione, quella che sfrutta Worksheetfunction.Transpose.





  • di half235 data: 22/04/2013 08:45:47

    grazie frac ma per capire il tuo calcolo automatico come distingue le celle piene dalle vuote che devono essere comunque copiate nel file?

    altra cosa ma dato che il file verrà usato da diversi utente come faccio ad inserire il path di default sul desktop dato che riporta il nome utente, e che quindi sarà diverso per ogni persona?
    Grazie



  • di Vecchio Frac data: 22/04/2013 09:03:19

    cit. " come distingue le celle piene dalle vuote che devono essere comunque copiate nel file?"
    ---> Nella versione che preferisco, quella che usa Transpose:
    col_data = WorksheetFunction.Transpose(Range(Cells(1, nco), Cells(nri, nco)))
    l'intero range che va dalla cella "riga 1, colonna nco" fino alla cella "riga nri, colonna nco" viene trasposto integralmente nella variabile col_data, significa che viene creata una variabile di tipo Variant dimensionata in automatico perchè contenga "nri" elementi, tanti quanti sono le righe del range. Quindi ogni cella del range viene inserita in un elemento del vettore, comprese le righe vuote.
    Successivamente il ciclo For si preoccupa di inserire nel file di testo ogni elemento, comprese le righe vuote.
    Il problema è nato dal fatto che con Print l'ultima riga viene scritta con un carattere di ritorno a capo e perciò si è dovuti ricorrere al trucco di conteggiare i dati scritti per prevenire l'ultimo Print con ritorno a capo.

    cit. " dato che il file verrà usato da diversi utenti"
    ---> hai due possibili soluzioni:
    1) lavorare in una cartella condivisa in rete e quindi assegnare a Path un percorso di rete cui tutti possono accedere
    2) impostare come default il percorso corrente del file su cui si sta lavorando, l'utente può anche cambiarlo attraverso la finestra di dialogo Salva con nome che si apre all'inizio per la scelta del nome di file; in pratica il path invece che un da percorso fisso lo ricavi dal percorso del file medesimo:
    path = thisworkbook.Path & ""





  • di half235 data: 28/04/2013 14:55:07

    frac nell'ultimo codice da te postato se volessi però prendere i dati da 2 colonne separate non è possibile come faccio?
    grazie



  • di Vecchio Frac data: 28/04/2013 16:39:19

    va rivisto un po' tutto però è possibile.