Pagina precedente | 1 2 3 | Pagina successiva
Vota | Stampa | Notifica email    
Autore

macro per creare file in txt da foglio excel

Ultimo Aggiornamento: 30/03/2022 10:18
Post: 2
Registrato il: 19/01/2017
Città: MILANO
Età: 56
Utente Junior
2010
OFFLINE
23/01/2017 12:42

Buongiorno ragazzi, ho la necessita di creare un file txt estrapolando i dati nel mio caso dal foglio2 gia incolonnato, il file in txt deve essere anche lui in colonna ma con ogni colonna un determinato numero di caratteri
1 colonna 72 caratteri (compreso il contenuto)
2 colonna 72 caratteri (compreso il contenuto)
3 colonna 4 caratteri (compreso il contenuto)
4 colonna 60 caratteri (compreso il contenuto)
5 colonna 10 caratteri (compreso il contenuto)
6 colonna 4 caratteri (compreso il contenuto)
7 colonna 72 caratteri (compreso il contenuto)
8 colonna 1 caratteri (compreso il contenuto)
9 colonna 16 caratteri (compreso il contenuto)
10 colonna 7 caratteri (compreso il contenuto)

conosco un po excel ma a questo proprio non ci arrivo, allego un codice che sto provando, preciso che non è mio, ho fatto una ricerca su internet, crea il file ma lo devo ricercare in giro per il pc e poi non è il formato corretto, dovrebbe essere salvato su desktop o su C:
lo allego come testo non sono riuscito in altro modo

Sub crea_txt()
Dim MyDir As String, NomeFile As String
Dim FileExist As Boolean
Application.ScreenUpdating = False

MyDir = ThisWorkbook.Path
NomeFile = Sheets("foglio2").[A1]

If Dir(MyDir & "" & NomeFile & ".txt") <> "" Then
Select Case MsgBox("Attenzione: esiste già un file con questo nome." _
& vbCrLf & "Vuoi sovrascrivere il file?" _
, vbYesNo Or vbExclamation Or vbDefaultButton1, "Duplicato")
Case vbNo
Exit Sub
End Select
End If

Application.DisplayAlerts = False

Sheets("foglio2").Copy
With ActiveWorkbook
.SaveAs Filename:=MyDir & "" & NomeFile & ".txt", FileFormat:=xlUnicodeText
.Close savechanges:=False
End With

Application.DisplayAlerts = True
Application.ScreenUpdating = True

MsgBox "Foglio .txt creato con successo"
End Sub
Post: 3.642
Registrato il: 13/03/2012
Città: LIVORNO
Età: 78
Utente Master
2010
OFFLINE
23/01/2017 13:15

allega uno zip col file xlsm ed il txt (risultato desiderato), bastano poche righe
[Modificato da patel45 23/01/2017 13:16]

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

Ok lo preparo
[Modificato da aquila-67 23/01/2017 13:40]
Post: 3
Registrato il: 19/01/2017
Città: MILANO
Età: 56
Utente Junior
2010
OFFLINE
23/01/2017 14:13

Ecco i file, il foglio excel corrisponde al foglio 2 della cartella di lavoro, il txt è il formato "finito", le righe per entrambi sono 200 e le colonne fino alla "J" cioè la decima ci devono stare anche se vuote con gli spazi che ho indicato al primo post. spero si capisca.
[Modificato da aquila-67 23/01/2017 14:14]
Post: 4
Registrato il: 19/01/2017
Città: MILANO
Età: 56
Utente Junior
2010
OFFLINE
23/01/2017 14:17

eccoli vediamo se si vedono
Post: 3.643
Registrato il: 13/03/2012
Città: LIVORNO
Età: 78
Utente Master
2010
OFFLINE
23/01/2017 15:11

Re:
aquila-67, 23/01/2017 14.13:

Ecco i file, il foglio excel corrisponde al foglio 2 della cartella di lavoro, il txt è il formato "finito", le righe per entrambi sono 200 e le colonne fino alla "J" cioè la decima ci devono stare anche se vuote con gli spazi che ho indicato al primo post. spero si capisca.



il foglio 2 è vuoto, nel primo c'è una sola riga, avevo detto poche righe, ma una sola ....
sarebbe utile anche una riga completa, con tutti i campi riempiti

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

si scusami ma l'ho preparato di corsa tra una cosa ed un'altra come torno a casa vedrò di farlo meglio
Post: 6
Registrato il: 19/01/2017
Città: MILANO
Età: 56
Utente Junior
2010
OFFLINE
23/01/2017 21:07

allora ho sistemato il file excel corrispondente al foglio 2 della cartella di lavoro, punto di partenza per il txt, ho scritto 2 righe, la tabella puo essere di una riga o di 200 piene, da come si vede riempiendo tutti i campi i dati sono contrastanti oltre che a caso, non può accadere che tutti i campi siano pieni, per via dello stesso contenuto, (se uno è nato a parigi comune straniero il campo del comune italiano sarà vuoto), il txt non posso editarlo adesso perche non ho i mezzi che normalmente uso, lo farò domani
Post: 7
Registrato il: 19/01/2017
Città: MILANO
Età: 56
Utente Junior
2010
OFFLINE
24/01/2017 09:13

ecco un file tipo *.txt scritto tutto in maiuscolo con i dati nello stesso ordine del foglio excel con la spaziatura di cui sopra
Post: 3.648
Registrato il: 13/03/2012
Città: LIVORNO
Età: 78
Utente Master
2010
OFFLINE
24/01/2017 11:23

non mi sembra che questo tuo file di testo corrisponda alle lunghezze dei campi indicate nel primo post, comunque prova questa
Option Base 1
Sub a()
LR = Cells(Rows.Count, "A").End(xlUp).Row
DestFile = "F:\Download\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 LR
  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
[Modificato da patel45 24/01/2017 11:24]

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

Innanzitutto grazie per l'impegno e il tempo che mi stai dedicando, sto provando la macro, si pianta alla 6° riga:

Sub a()
LR = Cells(Rows.Count, "A").End(xlUp).Row
DestFile = "C:\PROVA.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 <<<< si blocca qui
For r = 1 To LR
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: 9
Registrato il: 19/01/2017
Città: MILANO
Età: 56
Utente Junior
2010
OFFLINE
26/01/2017 15:48

Buonasera, sono riuscito a far girare la macro, sbagliavo perche non l'avevo inserita direttamente sul foglio, ma purtroppo di vba non è che ne mastichi molto, finalmente funziona e crea un file txt con i relativi campi, penso si sia capito che si tratta di un file "tecnico" da dare in pasto ad un programma che consente poi la successiva eleborazione, il problema è che la tabella excel contiene fino a 200 righe che per la maggior parte rimangono vuote ma nel file creato ci sono comunque i campi me ne accorgo con notepad++ (mentre con blocco note "sembra" perfetto), il risultato è che se per esempio ci sono solo 10 righe "piene" il programma a cui lo vado a inserire dà errore all'11° riga, servirebbe l'esportazione solo delle righe compilate, le righe in avanti completamente vuote no.
Inoltre sarebbe perfetto se al momento dell'esportazione chiedesse l'indirizzo e il nome del file con una conferma finale dell'operazione, dico sarebbe se non fosse possibile pazienza, l'importanza è che mi crei un txt corretto. Ringrazio in anticipo.

P.S.: allego il file creato con la macro (questo file ha 3 righe con dati e dà errore all'importazione alla 4°riga)
Post: 3.655
Registrato il: 13/03/2012
Città: LIVORNO
Età: 78
Utente Master
2010
OFFLINE
26/01/2017 18:25

non capisco, tu devi esportare le righe di un file excel su file di testo, hai dei problemi e mi alleghi il file di testo invece che quello excel con la macro.

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

allora il file di testo che ho allegato è quello creato con la macro che mi hai suggerito ed'è perfetto con i separatori e proviene dal file excel gia allegato in precedenza, penzavo di cantare vittoria invece mi dava errore sulla prima riga vuota [SM=x423023] cosa strana perche generalmente accade proprio il contrario sono i dati a dare problemi, aprendolo con il blocco note è ok in tutto, quando l'ho aperto con un editor più avanzato si vede la differenza cioè sotto le righe piene anche le righe vuote fino a 200 vuote non sono e ci sono i segni delle tabulazioni, se cancello manualmente lo spazio vuoto fino alla riga 200 il file va bene ed è accettato. Non so se sono riuscito a farmi capire per questo ho allegato proprio il txt che dimostra il problema, ma per vederlo bisogna aprirlo con un altro editor.
Post: 3.656
Registrato il: 13/03/2012
Città: LIVORNO
Età: 78
Utente Master
2010
OFFLINE
27/01/2017 08:10

credevo di essermi spiegato bene, allega il file excel con la macro

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

ecco la cartella estrapolata con macro
Post: 3.659
Registrato il: 13/03/2012
Città: LIVORNO
Età: 78
Utente Master
2010
OFFLINE
27/01/2017 12:45

non ottengo alcun errore e con notepad ++ mi sembra perfetto.
Devi stare attento che le celle della colonna A sotto l'ultima riga siano effettivamente vuote, l'istruzione
LR = Cells(Rows.Count, "A").End(xlUp).Row
calcola l'ultima riga piena e se magari nella riga 200 c'è qualcosa la macro ti aggiunge righe vuote nel file.
Lancia la macro con F8, step by step e controlla il valore di LR puntandoci sopra il mouse
[Modificato da patel45 27/01/2017 12:52]

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

apri con notepad l'allegato al post n° 12
Post: 13
Registrato il: 19/01/2017
Città: MILANO
Età: 56
Utente Junior
2010
OFFLINE
27/01/2017 13:40

ti allego questo altro file, un programma lo accetta un altro no, aprendolo con il notepad e selezionando "mostra tutti i caratteri" e "mostra guide di indentazione" si vede un foglio pieno di righe che se cancello manualmente viene accettato
Post: 3.660
Registrato il: 13/03/2012
Città: LIVORNO
Età: 78
Utente Master
2010
OFFLINE
27/01/2017 16:49

se non rispondi a tono alle mie osservazioni chiudo qui.

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

allora tutte le celle sotto le righe della colonna "A" sono vuote (e anche le altre) ho lanciato la macro con f8 e alla riga indicata mi da Rows.Count=1048576 non so se è questo il valore che cercavi
Post: 3.664
Registrato il: 13/03/2012
Città: LIVORNO
Età: 78
Utente Master
2010
OFFLINE
28/01/2017 12:26

patel45, 27/01/2017 12.45:


Lancia la macro con F8, step by step e controlla il valore di LR puntandoci sopra il mouse


devi posizionare il puntatore su LR, non su rows.count e deve corrispondere all'ultima riga piena, se non corrisponde significa che ci sono celle non vuote nella colonna A
[Modificato da patel45 28/01/2017 12:55]

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

ho rilanciato la macro con f8, arrivato alla seconda riga della macro (LR) mi da un risultato LR = Vuoto, vado avanti con f8 e mi da LR = 200, è da tener presente che nella tabella ci sono solo le prime due righe piene
[Modificato da aquila-67 28/01/2017 14:57]
Post: 3.665
Registrato il: 13/03/2012
Città: LIVORNO
Età: 78
Utente Master
2010
OFFLINE
28/01/2017 15:01

è la prova che le righe da 3 a 200 non sono vuote, anche se non vedi niente, selezionale tutte da 3 a 200 ed eliminale, vedrai che poi funzionerà

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

Penso di aver capito, quella tabella l'ho per cosi dire automatizzata, nel senzo che attinge informazioni provenienti da un altro foglio in modo da non ripetere i stessi dati piu volte, quindi nelle celle ci ho inserito le formule del tipo "=foglio1!a1" e via dicendo, è bastato cancellare tutte le formule della sola colonna A come hai detto e tutto funziona, esiste una soluzione di "convivenza" a questo altrimenti me lo terrò cosi, magari aggiungendo se possibile la richiesta del percorso/nome di esportazione
Post: 3.666
Registrato il: 13/03/2012
Città: LIVORNO
Età: 78
Utente Master
2010
OFFLINE
28/01/2017 18:47

è molto importante fornire file di esempio significativi, altrimenti si perde tempo da ambo le parti, se lo fai possiamo trovare il modo, per es. calcolare l'ultima riga su un'altra colonna
[Modificato da patel45 28/01/2017 18:50]

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

ok, vedrò di preparare un file di esempio completo così da trovare un soluzione
Post: 18
Registrato il: 19/01/2017
Città: MILANO
Età: 56
Utente Junior
2010
OFFLINE
30/01/2017 14:15

Ecco (con un po di ritardo) un esempio effettivo allegato, altri forse lo avrebbero fatto meglio ma a me sembra gia tanto così. Integra un modulo di ricerca cf reperito su questo forum che va benissimo. Funziona cosi: si inseriscono i dati nel primo foglio che poi rimbalzano secondo un ordine preciso nel tab1 e tab2, il file in txt lo creo dal tab2 mentre dal tab1 dovrei creare un foglio csv con virgole e senza spazi, ma sto avendo anche li problemi anche perche sto cercando prima di risolvere il txt, altri fogli sono utilizzati dal modulo cf. In parole povere chi ci lavora dove stare solo sul primo foglio.
Post: 3.670
Registrato il: 13/03/2012
Città: LIVORNO
Età: 78
Utente Master
2010
OFFLINE
30/01/2017 15:25

un file di esempio non deve essere vuoto, come faccio a capirci qualcosa ? capisco che non vuoi mettere dati sensibili, ma pippo pluto e paperino ....

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

Si scusami ma non ci ho pensato, adesso ho inserito dati su 4 righe che corrispondono a altrettanti possibili modi e casistiche di inserimenti, tab1 e tab2 riportano e correggono i dati nel giusto ordine e contenuto

nota: tab1 e tab2 arrivano fino a 206 righe mentre la maschera di inserimento a 200, se crea problemi le 6 in più le posso togliere erano rimaste li
Vota:
Amministra Discussione: | Chiudi | Sposta | Cancella | Modifica | Notifica email Pagina precedente | 1 2 3 | Pagina successiva
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 05:29. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com