Vota | Stampa | Notifica email    
Autore

macro per creare file in txt da foglio excel

Ultimo Aggiornamento: 30/03/2022 10:18
Post: 3.673
Registrato il: 13/03/2012
Città: LIVORNO
Età: 78
Utente Master
2010
OFFLINE
30/01/2017 18:41

Option Base 1
Sub crea_TXT_nominativi()
LR = Cells(Rows.Count, "A").End(xlUp).Row
numvuote = WorksheetFunction.CountBlank(Range("A1:A" & LR))
numpiene = LR - numvuote
DestFile = "C:\prova_file\file.txt" ' <<<< da modificare
FileNum = FreeFile()
arr = Array(72, 72, 4, 60, 10, 4, 72, 1, 16, 7) ' lunghezze campi
Open DestFile For Output As #FileNum
For r = 1 To numpiene
  s = ""
  For c = 1 To 10
    s = s & Cells(r, c).Text & Space(arr(c) - Len(Cells(r, c).Text))
  Next
  Print #FileNum, s
Next
Close #FileNum
End Sub

----------
Win 10 - Excel 2010
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Post: 20
Registrato il: 19/01/2017
Città: MILANO
Età: 56
Utente Junior
2010
OFFLINE
30/01/2017 19:10

Ho provato e sembra veramente perfetto, adesso calcola solo le righe attive, [SM=x423028] domani faccio la prova della verità
Post: 21
Registrato il: 19/01/2017
Città: MILANO
Età: 56
Utente Junior
2010
OFFLINE
31/01/2017 10:08

Finalmente è ok, accettato dal sistema [SM=x423047] non mi pare vero grazie, ho impostato il percorso desktop per comodità ma visto che cambia da pc a pc esiste un percorso per cosi dire "universale"?
Post: 3.676
Registrato il: 13/03/2012
Città: LIVORNO
Età: 78
Utente Master
2010
OFFLINE
31/01/2017 10:28

se il file di testo lo vuoi nella stessa cartella in cui si trova il file con la macro

DestFile = ThisWorkbook.Path & "\file.txt"

----------
Win 10 - Excel 2010
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Post: 22
Registrato il: 19/01/2017
Città: MILANO
Età: 56
Utente Junior
2010
OFFLINE
31/01/2017 11:00

Perfetto grazie, [SM=x423028] adesso metterò al lavoro questa cartella piu tardi approfitterò di un altro aiuto per il csv da tab1 che soffre degli stessi problemi del txt (famosi campi vuoti non vuoti)
Post: 23
Registrato il: 19/01/2017
Città: MILANO
Età: 56
Utente Junior
2010
OFFLINE
31/01/2017 14:51

Come anticipato sto cercando di replicare la stessa cosa per creare un csv da tab1, bastano solo separatoti con virgola senza spazi, ho cercato di apportare qualche modifica al codice del txt che lavora benissimo e lascia le righe sotto vuote, il csv lo crea ma su una riga unica senza separatori, qua sotto riporto il codice che ho modificato:

Option Base 1
Sub crea_CSV ()
LR = Cells(Rows.Count, "A").End(xlUp).Row
numvuote = WorksheetFunction.CountBlank(Range("A1:A" & LR))
numpiene = LR - numvuote
DestFile = ThisWorkbook.Path & "\file.csv" ' <<<< da modificare
FileNum = FreeFile()
arr = Array(72, 72, 4, 60, 10, 4, 72, 1, 16, 7) ' basta la virgola
Open DestFile For Output As #FileNum
For r = 1 To numpiene
s = ""
For c = 1 To 10
s = s & Cells(r, c).Text & Space(arr(c) - Len(Cells(r, c).Text))
Next
Print #FileNum, s
Next
Close #FileNum
MsgBox "FILE CSV creato con successo", vbOKOnly ' aggiunto
End Sub
[Modificato da aquila-67 31/01/2017 15:09]
Post: 30
Registrato il: 19/01/2017
Città: MILANO
Età: 56
Utente Junior
2010
OFFLINE
16/02/2017 10:05

Lasciando per il momento da parte il file csv, avrei la necessita tornando indietro di qualche post, di poter scegliere la destinazione del file di testo e eventualmente la sovrascrittura, adesso è impostato sulla stessa directory del foglio. grazie anticipatamente
Post: 3.701
Registrato il: 13/03/2012
Città: LIVORNO
Età: 78
Utente Master
2010
OFFLINE
16/02/2017 18:34

invece di
DestFile = ThisWorkbook.Path & "\file.txt"
scrivi il percorso
DestFile = "C:\miadir\file.txt"

----------
Win 10 - Excel 2010
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Post: 31
Registrato il: 19/01/2017
Città: MILANO
Età: 56
Utente Junior
2010
OFFLINE
16/02/2017 20:21

ho provato ma mi dice "impossibile trovare il percorso" ho fatto delle prove ma uguale, non so se può servire utilizzo seven
Post: 3.702
Registrato il: 13/03/2012
Città: LIVORNO
Età: 78
Utente Master
2010
OFFLINE
17/02/2017 12:53

ovviamente devi inserire un percorso esistente, solo tu puoi farlo

----------
Win 10 - Excel 2010
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Post: 32
Registrato il: 19/01/2017
Città: MILANO
Età: 56
Utente Junior
2010
OFFLINE
17/02/2017 13:21

con xp non c'erano problemi con seven è diventato piu complicato non riesco a trovare una stringa del tipo c: utenti utente corrente ecc che funzioni
Post: 0
Registrato il: 20/02/2017
Utente Junior
OFFLINE
20/02/2017 21:55

buona sera
Post: 3.708
Registrato il: 13/03/2012
Città: LIVORNO
Età: 78
Utente Master
2010
OFFLINE
20/02/2017 22:24

Re:
aquila-67, 17/02/2017 13.21:

con xp non c'erano problemi con seven è diventato piu complicato non riesco a trovare una stringa del tipo c: utenti utente corrente ecc che funzioni


vai nella cartella che vuoi utilizzare, clicca col destro su un file di quella cartella, scegli proprietà, ti fa vedere il percorso completo



----------
Win 10 - Excel 2010
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Post: 33
Registrato il: 19/01/2017
Città: MILANO
Età: 56
Utente Junior
2010
OFFLINE
21/02/2017 16:08

ok,grazie
Post: 37
Registrato il: 19/01/2017
Città: MILANO
Età: 56
Utente Junior
2010
OFFLINE
01/03/2017 12:28

Buongiorno, rieccomi con un altro problema, ho la necessità di esportare in un foglio csv i dati riportati nel foglio "tab2", nell'esempio riportato, ho provato molte macro reperite in rete e adattate, ma senza successo, premetto che il csv ideale dovrebbe essere con virgole e esportare solo le righe piene del tab2 tralasciando le vuote per evitare i problemi gia successi con il txt. riallego lo stesso esempio per comodità, grazie
Post: 3.735
Registrato il: 13/03/2012
Città: LIVORNO
Età: 78
Utente Master
2010
OFFLINE
01/03/2017 17:49

Sub tocsv()
Sheets("tab2").Activate
LR = Cells(Rows.Count, "A").End(xlUp).Row
numvuote = WorksheetFunction.CountBlank(Range("A1:A" & LR))
numpiene = LR - numvuote
sn = Range("A1:J" & numpiene)
For j = 1 To UBound(sn)
  c00 = c00 & Join(Application.Index(sn, j, 0), ",") & vbCrLf
Next
CreateObject("scripting.filesystemobject").createtextfile("F:\Download\summary.csv").write c00
End Sub

modifica il percorso del file di output

----------
Win 10 - Excel 2010
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Post: 38
Registrato il: 19/01/2017
Città: MILANO
Età: 56
Utente Junior
2010
OFFLINE
01/03/2017 22:13

Grazie, preciso come sempre, da prove fatte a casa è ok, domani lo metto al lavoro [SM=x423028]
Post: 39
Registrato il: 19/01/2017
Città: MILANO
Età: 56
Utente Junior
2010
OFFLINE
02/03/2017 10:20

Ok, per fare come il file di testo fatto all'inizio ed avere il file esportato nella stessa directory del programma (in modo generico cosi se mi sposto di pc anche con chiavette) non devo cambiare percorso come devo impostare?

Ps. con questo spero di aver finito di scocciare almeno per questa cosa.
Post: 47
Registrato il: 19/01/2017
Città: MILANO
Età: 56
Utente Junior
2010
OFFLINE
28/06/2017 12:19

assegnare nome al file txt in base a determinata cella
Buongiorno, sto utilizzando la macro qui sotto per creare file txt modificando come già suggerito la destinazione file in ---DestFile = ThisWorkbook.Path & "\file.txt" --- così si crea nella stessa directory del programma, ho la necessità di nominare di volta in volta il file creato con un nome indicato in una data cella di un foglio, è possibile farlo modificando questa macro?

patel45, 30/01/2017 18.41:

Option Base 1
Sub crea_TXT_nominativi()
LR = Cells(Rows.Count, "A").End(xlUp).Row
numvuote = WorksheetFunction.CountBlank(Range("A1:A" & LR))
numpiene = LR - numvuote
DestFile = "C:\prova_file\file.txt" ' <<<< da modificare
FileNum = FreeFile()
arr = Array(72, 72, 4, 60, 10, 4, 72, 1, 16, 7) ' lunghezze campi
Open DestFile For Output As #FileNum
For r = 1 To numpiene
  s = ""
  For c = 1 To 10
    s = s & Cells(r, c).Text & Space(arr(c) - Len(Cells(r, c).Text))
  Next
  Print #FileNum, s
Next
Close #FileNum
End Sub




Post: 3.904
Registrato il: 13/03/2012
Città: LIVORNO
Età: 78
Utente Master
2010
OFFLINE
28/06/2017 13:30

cosa scrivi nella cella ? il percorso completo ?

----------
Win 10 - Excel 2010
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Post: 48
Registrato il: 19/01/2017
Città: MILANO
Età: 56
Utente Junior
2010
OFFLINE
28/06/2017 13:51

Attualmente utilizzo questo codice inserito nella macro: DestFile = ThisWorkbook.Path & "\nominativi.txt" ' <<<< da modificare. La destinazione è giusta (stessa della cartella), il nome "nominativi" dovrebbe essere variabile in base al nome contenuto in una data cella di un foglio che farò (stessa cartella), che corrisponderebbe poi al nome di chi lo ha creato in modo da non dover essere successivamente rinominato manualmente. Quindi chi utilizza il programma ha inserito il proprio nome in un foglio e cella cosi da trovarsi il file salvato e nominato.

macro completa
[Modificato da aquila-67 28/06/2017 14:02]
Post: 3.907
Registrato il: 13/03/2012
Città: LIVORNO
Età: 78
Utente Master
2010
OFFLINE
28/06/2017 15:03

ma non hai risposto alla domanda

----------
Win 10 - Excel 2010
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Post: 49
Registrato il: 19/01/2017
Città: MILANO
Età: 56
Utente Junior
2010
OFFLINE
28/06/2017 16:13

nella cella scriverò il nome di chi crea il file, il percorso di salvataggio è la stessa cartella del programma, non so se è questo che ti serve sapere...
Post: 3.908
Registrato il: 13/03/2012
Città: LIVORNO
Età: 78
Utente Master
2010
OFFLINE
28/06/2017 19:08

DestFile = ThisWorkbook.Path & "\" & range("A1") & ".txt"

----------
Win 10 - Excel 2010
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Post: 50
Registrato il: 19/01/2017
Città: MILANO
Età: 56
Utente Junior
2010
OFFLINE
28/06/2017 23:24

ok funziona perfettamente ma se creo il campo sulla cella g12 del foglio9 come modifico? (capisco adesso che forse è questo che volevi sapere)
Post: 3.909
Registrato il: 13/03/2012
Città: LIVORNO
Età: 78
Utente Master
2010
OFFLINE
29/06/2017 11:10

DestFile = ThisWorkbook.Path & "\" & Sheets(9).range("G12") & ".txt"

----------
Win 10 - Excel 2010
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Post: 51
Registrato il: 19/01/2017
Città: MILANO
Età: 56
Utente Junior
2010
OFFLINE
29/06/2017 11:39

ok funziona perfettamente grazie per la pazienza.
Post: 52
Registrato il: 19/01/2017
Città: MILANO
Età: 56
Utente Junior
2010
OFFLINE
03/10/2017 14:16

spazi vuoti
Salve a tutti, riprendo questa discussione perchè utilizzando questa macro a volte si crea un problema, non dovuto alla macro in oggetto a questa discussione ma a chi inserisce i dati, mi spiego meglio, nel foglio di inserimento dei soggetti a volte vengono inseriti inavvertitamente spazi invisibili davanti ai nomi e questo crea problemi all'elaborazione perchè vengono di pari passo riportati nel file txt creati da questa macro, chiedo se possibile modificando il codice di eliminare questi spazi ma solo all'inizio dei campi in quanto un nome composto può contenere spazi. Non so se sono riuscito a spiegarmi.
Post: 53
Registrato il: 19/01/2017
Città: MILANO
Età: 56
Utente Junior
2010
OFFLINE
05/10/2017 09:26

Buongiorno, pensate che questa cosa non sia fattibile proprio?
Post: 0
Registrato il: 24/10/2019
Età: 41
Utente Junior
excel 2016
OFFLINE
24/10/2019 12:29

macro per creare file txt da foglio excel
Buongiorno a tutti,
mi chiamo Stefano e sono nuovo del forum. Ho letto qui molte cose interessanti e vorrei collaborare un pò con le mie conoscenze e chiedervi qualche aiuto.

Vorrei fare una macro che mi esportasse un file excel con determinate tabulazioni in modo da farlo leggere al mio programma esterno.

Secondo voi è possibile?
Grazie.
Vota:
Nuova Discussione
 | 
Rispondi
Cerca nel forum
Tag discussione
Discussioni Simili   [vedi tutte]
Feed | Forum | Bacheca | Album | Utenti | Cerca | Login | Registrati | Amministra
Tutti gli orari sono GMT+01:00. Adesso sono le 23:03. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com