Condividi:        

Salvataggio da .xls a .txt con Visual Basic

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Salvataggio da .xls a .txt con Visual Basic

Postdi alealfa77 » 24/10/11 14:09

Salve a tutti, sono nuovo del forum e sono subito a tediarvi con una richiesta.

Ho scritto la macro qui sotto allegata:

Codice: Seleziona tutto
Sub Cartik1()
'Estrazione Codice Filiale'
'!!!!!!!!!Convertire in numero la filiale 21!!!!!!!!!!!!!!'
Range("C:C").NumberFormat = "#,##0"
Columns("B:B").Select
Selection.Insert Shift:=xlToRight
ActiveCell.FormulaLocal = "=stringa.estrai(a1;1;2)"
Dim stgFormula As String
stgFormula = Sheets("ElencoDip").Range("B1").Formula
Sheets("ElencoDip").Range("B:B").Formula = stgFormula
Range("B:B").Activate
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues
End Sub
Sub Cartik2()
'Conteggio Buoni da Ordinare'
Columns("C:C").Select
Selection.Insert Shift:=xlToRight
ActiveCell.FormulaLocal = "=stringa.estrai(a1;3;3)"
stgFormula = Sheets("ElencoDip").Range("C1").Formula
Sheets("ElencoDip").Range("C:C").Formula = stgFormula
Range("C:C").Activate
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues
Columns("G:G").Activate
ActiveCell.FormulaLocal = "=se(b1=21;21;26)"
stgFormula = Sheets("ElencoDip").Range("G1").Formula
Sheets("ElencoDip").Range("G1:G315").Formula = stgFormula
End Sub
Sub Cartik3()
Columns("I:I").Activate
ActiveCell.FormulaLocal = "=(e1-g1)"
stgFormula = Sheets("ElencoDip").Range("i1").Formula
Sheets("ElencoDip").Range("i1:i315").Formula = stgFormula
Columns("K:K").Activate
ActiveCell.FormulaLocal = "=se(b1=21;21;26)"
stgFormula = Sheets("ElencoDip").Range("k1").Formula
Sheets("ElencoDip").Range("k1:k315").Formula = stgFormula
End Sub
Sub Cartik4()
Columns("m:m").Activate
ActiveCell.FormulaLocal = "=(k1+i1)"
stgFormula = Sheets("ElencoDip").Range("m1").Formula
Sheets("ElencoDip").Range("m1:m315").Formula = stgFormula
Range("G:G").Activate
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues
Range("I:I").Activate
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues
Range("K:K").Activate
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues
Range("M:M").Activate
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues
Columns("F:F").Activate
ActiveCell.FormulaLocal = "0"
stgFormula = Sheets("ElencoDip").Range("f1").Formula
Sheets("ElencoDip").Range("f1:f315").Formula = stgFormula
Columns("G:G").Select
Selection.Insert Shift:=xlToRight
ActiveCell.FormulaLocal = "=se(e1<10;concatena(f1;f1;e1);concatena(f1;e1))"
stgFormula = Sheets("ElencoDip").Range("g1").Formula
Sheets("ElencoDip").Range("g1:g315").Formula = stgFormula
Range("g:g").Activate
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues
Columns("I:I").Select
ActiveCell.FormulaLocal = "=concatena(f1;h1)"
stgFormula = Sheets("ElencoDip").Range("i1").Formula
Sheets("ElencoDip").Range("i1:i315").Formula = stgFormula
Columns("M:M").Select
ActiveCell.FormulaLocal = "=concatena(f1;l1)"
stgFormula = Sheets("ElencoDip").Range("m1").Formula
Sheets("ElencoDip").Range("m1:m315").Formula = stgFormula
Columns("o:o").Select
ActiveCell.FormulaLocal = "=se(n1<10;concatena(f1;f1;n1);concatena(f1;n1))"
stgFormula = Sheets("ElencoDip").Range("o1").Formula
Sheets("ElencoDip").Range("o1:o315").Formula = stgFormula
Range("h:h").Activate
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues
Range("i:i").Activate
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues
Range("m:m").Activate
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues
Range("o:o").Activate
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues
End Sub
Sub Cartik5()
'Cancello colonne non utilizzate ed inserisco colonne cognome e nome + filler'
Range("N:N").Activate
Selection.EntireColumn.Delete
Range("L:L").Activate
Selection.EntireColumn.Delete
Range("K:K").Activate
Selection.EntireColumn.Delete
Range("J:J").Activate
Selection.EntireColumn.Delete
Range("H:H").Activate
Selection.EntireColumn.Delete
Range("F:F").Activate
Selection.EntireColumn.Delete
Range("E:E").Activate
Selection.EntireColumn.Delete
Range("D:D").Activate
Selection.EntireColumn.Delete
Range("A:A").Activate
Selection.EntireColumn.Delete
Columns("B:B").Select
Selection.Insert Shift:=xlToRight
ActiveCell.FormulaLocal = "           "
stgFormula = Sheets("ElencoDip").Range("b1").Formula
Sheets("ElencoDip").Range("B1:B315").Formula = stgFormula
Columns("D:D").Select
Selection.Insert Shift:=xlToRight
ActiveCell.FormulaLocal = "   "
stgFormula = Sheets("ElencoDip").Range("d1").Formula
Sheets("ElencoDip").Range("d1:d315").Formula = stgFormula
Columns("E:E").Select
Selection.Insert Shift:=xlToRight
ActiveCell.FormulaLocal = "cccccccccccccccccccccccccccccc"
stgFormula = Sheets("ElencoDip").Range("e1").Formula
Sheets("ElencoDip").Range("e1:e315").Formula = stgFormula
Columns("f:f").Select
Selection.Insert Shift:=xlToRight
ActiveCell.FormulaLocal = "nnnnnnnnnnnnnnnnnnnn"
stgFormula = Sheets("ElencoDip").Range("f1").Formula
Sheets("ElencoDip").Range("f1:f315").Formula = stgFormula
Columns("h:h").Select
Selection.Insert Shift:=xlToRight
ActiveCell.FormulaLocal = "  "
stgFormula = Sheets("ElencoDip").Range("h1").Formula
Sheets("ElencoDip").Range("h1:h315").Formula = stgFormula
Columns("j:j").Select
Selection.Insert Shift:=xlToRight
ActiveCell.FormulaLocal = "  "
stgFormula = Sheets("ElencoDip").Range("j1").Formula
Sheets("ElencoDip").Range("j1:j315").Formula = stgFormula
Columns("l:l").Select
Selection.Insert Shift:=xlToRight
ActiveCell.FormulaLocal = "  "
stgFormula = Sheets("ElencoDip").Range("l1").Formula
Sheets("ElencoDip").Range("l1:l315").Formula = stgFormula
Columns("n:n").Select
ActiveCell.FormulaLocal = "             "
stgFormula = Sheets("ElencoDip").Range("n1").Formula
Sheets("ElencoDip").Range("n1:n315").Formula = stgFormula
Range("O:O").Activate
Selection.EntireColumn.Delete
End Sub



che mi esegue delle operazioni su un foglio di lavoro di excel.
A questo punto dovrei salvarlo in .txt mantenendo le formattazioni che ho inserito, comprese le colonne nelle quali ho inserito degli spazi (il programma di import su un gestionale Unix me le richiede così).

Ho già provato ad utilizzare il Salva con Nome, ma non mi mantiene suddetti spazi.

C'è un modo per poter inserire nella macro le operazioni da eseguire per salvarlo direttamente dalla macro?

Grazie dell'aiuto!
alealfa77
Utente Junior
 
Post: 23
Iscritto il: 24/10/11 14:04

Sponsor
 

Re: Salvataggio da .xls a .txt con Visual Basic

Postdi Anthony47 » 24/10/11 15:08

Ciao alealfa77, benvenuto nel forum.
Puoi fare un esempio di come sono i dati nel file excel e come devono quegli stessi dati essere esportati?

Ciao, ti aspettiamo
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Salvataggio da .xls a .txt con Visual Basic

Postdi alealfa77 » 24/10/11 15:46

Grazie del benvenuto!!!

Il file di excel è composto da 14 colonne e da x righe variabili.
Le colonne A - C - E - F - G - I - K ed M contengono dei valori,
mentre le colonne B - D - H - J - L ed N sono state riempite in sede di codice macro da spazi, così come deve essere il tracciato record di importazione.

Un esempio del tracciato di importazione è il seguente:

20 5 xxxxxxx GIUSEPPE 024 026 026 024
20 6 xxxxxxx PIERFILIPPO 028 026 026 028
20 17 xxxxxxxxx ANDREA 012 026 026 012
20 19 xxxxxxxxx UMBERTO 025 026 026 025
20 47 xxxxxxxxx AMEDEO 027 026 026 027
20 51 xxxxxxxxxx DANIELA 018 026 026 018

tenendo conto che tutti i campi sono allineati e definiti nella dimensione dal programma di importazione.

Spero che basti.

Grazie ancora.

P.S. Ma non si possono allegare dei file?
alealfa77
Utente Junior
 
Post: 23
Iscritto il: 24/10/11 14:04

Re: Salvataggio da .xls a .txt con Visual Basic

Postdi Flash30005 » 24/10/11 16:02

Ciao Alealfa77, benvenuto anche da parte mia

i file li puoi allegare solo dopo il terzo post
utilizzando un server Host come questo
http://uploading.com/
e incollando nel post il link rilasciato dal server (usando il comando URL dell'editor)

Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Salvataggio da .xls a .txt con Visual Basic

Postdi alealfa77 » 24/10/11 16:12

Ti ringrazio dell'interessamento.

Devo fare ammenda, in quanto lo avevo letto in fase di iscrizione ma non ci ho pensato al momento del P.S.
alealfa77
Utente Junior
 
Post: 23
Iscritto il: 24/10/11 14:04

Re: Salvataggio da .xls a .txt con Visual Basic

Postdi Anthony47 » 24/10/11 21:37

Un esempio del tracciato di importazione è il seguente:
20 5 xxxxxxx GIUSEPPE 024 026 026 024
20 6 xxxxxxx PIERFILIPPO 028 026 026 028
20 17 xxxxxxxxx ANDREA 012 026 026 012
20 19 xxxxxxxxx UMBERTO 025 026 026 025
20 47 xxxxxxxxx AMEDEO 027 026 026 027
20 51 xxxxxxxxxx DANIELA 018 026 026 018

tenendo conto che tutti i campi sono allineati e definiti nella dimensione dal programma di importazione.

Pero' quello che scrivi prima non collima con quello che scrivi dopo; mi sarei cioe' aspettato di trovare un elenco in bell' ordine, con ogni campo di larghezza fissa; quindi qualcosa come
Codice: Seleziona tutto
20 6  xxxxxxx   PIERFILIPPO 028 026 026 028
20 17 xxxxxxxxx ANDREA      012 026 026 012

Con questa notevole approssimazione ti chiedo di verificare se l' uso del formato prn (opzione di tipo file da scegliere al momento del File /Salva, o Salva con nome) soddisfa la tua esigenza.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Salvataggio da .xls a .txt con Visual Basic

Postdi alealfa77 » 25/10/11 09:36

Esatto, il file .txt prodotto deve rispettare delle larghezze di colonne ben definite.
Mi scuso per l'inesattezza del messaggio precedente...

Il salvataggio in formato .prn non mi mantiene la larghezza delle colonne, nè di quelle valorizzate nè di quelle vuote.
alealfa77
Utente Junior
 
Post: 23
Iscritto il: 24/10/11 14:04

Re: Salvataggio da .xls a .txt con Visual Basic

Postdi Flash30005 » 25/10/11 09:48

Ora hai la possibilità di inviare il file

ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Salvataggio da .xls a .txt con Visual Basic

Postdi alealfa77 » 25/10/11 09:52

Flash30005 ha scritto:Ora hai la possibilità di inviare il file

ciao


Ti ringrazio, ma purtroppo dall'ufficio non posso accedere a siti di filehosting...

:mmmh:
alealfa77
Utente Junior
 
Post: 23
Iscritto il: 24/10/11 14:04

Re: Salvataggio da .xls a .txt con Visual Basic

Postdi Flash30005 » 25/10/11 10:06

Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Salvataggio da .xls a .txt con Visual Basic

Postdi alealfa77 » 25/10/11 10:09

Sto provando a crearmi un account su fileserve, se tutto va bene allego sia l'excel generato dalla macro sia il file in formato .txt di cui ho bisogno.

Grazie dell'aiuto!
alealfa77
Utente Junior
 
Post: 23
Iscritto il: 24/10/11 14:04

Re: Salvataggio da .xls a .txt con Visual Basic

Postdi alealfa77 » 25/10/11 10:16

http://www.fileserve.com/file/P2Z9vSS/prova.xls

http://www.fileserve.com/file/wq5nada/provatutte.txt

Il primo file .xls è il file generato dalla macro allegata al primo messaggio.
Il file .txt è come dovrebbe venir salvato il file .xls.

Se ne avete bisogno Vi posso allegare anche la parte del programma di caricamento dei dati ove si evincono le definizioni fisse dei campi.

Grazie ancora.
alealfa77
Utente Junior
 
Post: 23
Iscritto il: 24/10/11 14:04

Re: Salvataggio da .xls a .txt con Visual Basic

Postdi Anthony47 » 25/10/11 12:50

Il salvataggio in formato .prn non mi mantiene la larghezza delle colonne, nè di quelle valorizzate nè di quelle vuote.

Hummmm.... hai provato?
In riga 1 metti delle intestazioni di lunghezza (spazi compresi) pari alla larghezza che vuoi su quella colonna, poi adatta la colonna (Menu /Formato /Colonna /Adatta, o doppioclick sul bordo dell' intestazione di colonna), infine salva in formato prn.

Questo e' quello che io ho ottenuto dal tuo file:
Codice: Seleziona tutto
05     00 ccccccccccccccccccccccccccnnnnnnnnnnnnnnnnn02 02 02 02
05     00 ccccccccccccccccccccccccccnnnnnnnnnnnnnnnnn02 02 02 02
05     01 ccccccccccccccccccccccccccnnnnnnnnnnnnnnnnn02 02 02 02
05     08 ccccccccccccccccccccccccccnnnnnnnnnnnnnnnnn01 02 02 01
05     12 ccccccccccccccccccccccccccnnnnnnnnnnnnnnnnn02 02 02 02
05     14 ccccccccccccccccccccccccccnnnnnnnnnnnnnnnnn01 02 02 01
05     17 ccccccccccccccccccccccccccnnnnnnnnnnnnnnnnn01 02 02 01
05     18 ccccccccccccccccccccccccccnnnnnnnnnnnnnnnnn02 02 02 02
05     19 ccccccccccccccccccccccccccnnnnnnnnnnnnnnnnn02 02 02 02
05     16 ccccccccccccccccccccccccccnnnnnnnnnnnnnnnnn02 02 02 02


Se non ti funziona allora dovremo scrivere una macro che compila la riga di output del file txt; puo' essere utile per questo conoscere quali sono le colonne su cui si sviluppa il tuo foglio, se tutte le colonne sono sempre compilate o se ce n' e' una certamente sempre compilata (per il calcolo del numero di righe da elaborare), quali sono le colonne numeriche e che formato numeri dovranno avere

Fai sapere, ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Salvataggio da .xls a .txt con Visual Basic

Postdi alealfa77 » 25/10/11 16:15

Ciao.

Il risultato che mi da è lo stesso che ha dato a te.
Le colonne da utilizzare sono dalla 'A' alla 'N' suddivise come nel mio messaggio precedente.
Le righe sono variabili mese per mese, in quanto mi varia il numero dei dipendenti.

Ho provato ad inserire nella prima riga una stringa di caratteri lunga quanto la larghezza delle colonne per tutte le colonne (sia quelle valorizzate sia quelle riempite da spazi) ed in questo modo tiene la larghezza così come è stata impostata all'interno del codice macro.
Ma in questo modo mi inserisce una colonna tra quella riempita di lettere 'c' e quella riempita di lettera 'n'. E non mi tiene la larghezza dell'ultima colonna, quella che dovrebbe essere riempita da 16 spazi.

Per il resto ci siamo, c'è solo da risolvere questo piccolissimo inconveniente, anche perchè in questo modo posso inserire nel codice della macro l'inserimento della riga di testata e riempire le varie celle con stringhe di lunghezza ben precisa.

Ti allego il salvataggio in .prn
Grazie di tutto l'aiuto che mi stai dando!!!!!

http://www.fileserve.com/file/7nXyzvn/prova2.prn
alealfa77
Utente Junior
 
Post: 23
Iscritto il: 24/10/11 14:04

Re: Salvataggio da .xls a .txt con Visual Basic

Postdi Flash30005 » 25/10/11 16:26

Sono riuscito a scaricare il file.xls
ma non il file .txt e .prn

Cercate sempre di usare server host attendibili e più pratici!!! 8)


Ti andrebbe bene un file testo così?
Ricavato dal tuo file di excel

Download file

Fai sapere
ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Salvataggio da .xls a .txt con Visual Basic

Postdi alealfa77 » 25/10/11 17:54

Purtroppo dall'ufficio l'unico server di filehosting al quale potermi registrare è fileserve...

Il file .txt di cui ho bisogno è bloccato in ogni sua parte, larghezza colonne compilate e larghezza colonne riempite con spazi.

L'unico dato che può essere variabile è il numero delle righe.
alealfa77
Utente Junior
 
Post: 23
Iscritto il: 24/10/11 14:04

Re: Salvataggio da .xls a .txt con Visual Basic

Postdi Flash30005 » 25/10/11 20:30

Perdona Alealfa ma quando si deve risolvere un problema bisogna fare un'analisi dettagliata dello stesso
Analisi che si può fare se abbiamo dati più o meno omogenei e coereneti
se non lo sono bisogna aggiungere delle eccezioni...

Ora, però, hai inviato un file di excel e un file testo (sono riuscito a scaricarlo)
i due file non hanno nulla in comune!!! :aaah
vorrei che mi inviassi il file testo dello stesso file excel che hai pubblicato
si può avere?
Perché solo così te lo posso realizzare identico!

ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Salvataggio da .xls a .txt con Visual Basic

Postdi Anthony47 » 25/10/11 22:33

Direi che col formato prn c' e' un problema irrisolvibile con l' ultima colonna, che se e' piena di "spazi" non viene salvata (ma questa colonna non era presente nemmeno nel file provatutte.txt, che motrava l' output desiderato...)

Opterei per la macro che genera le singole righe, campo per campo. Ho capito che la tua macro gia' normalizza la lunghezza delle varie colonne, quindi non e' necessario nessun aggiustamento in questo senso.
Se questo e' giusto allora dovrebbe bastare questa macro, che eventualmente puoi accodare al tuo codice attuale:
Codice: Seleziona tutto
Sub JoinRec()
'Vedi http://www.pc-facile.com/forum/viewtopic.php?f=26&t=93263
'
Dim LastR As Long, LastC As Long, I As Long, _
   J As Long, Riga As String
LastR = Cells(Rows.Count, 1).End(xlUp).Row
LastC = Cells(1, Columns.Count).End(xlToLeft).Column
NextF = FreeFile
Open "Outfiler.txt" For Output As #NextF
For I = 1 To LastR
    Riga = ""
    For J = 1 To LastC
        Riga = Riga & Cells(I, J)
    Next J
Print #NextF, Riga
Next I
Close
End Sub

Viene generato il file Outfiler.txt nella directory corrente.

Prova e fai sapere
Ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Salvataggio da .xls a .txt con Visual Basic

Postdi alealfa77 » 26/10/11 09:34

Buongiorno!

Cerco di riepilogare la situazione, cercando di essere il più comprensibile possibile (mi scuso per i fraintendimenti precedenti).

Per Flash 30005:

Il file prova_iniziale.xls (che ho appena uploadato http://www.fileserve.com/file/Y4Xdpkn/prova_iniziale.xls ) è il file originale al quale applico la macro del mio primo messaggio.

Il file prova.xls è il file generato dalla macro.

Il file provatutte.txt è il file che devo andare a caricare nel mio gestionale. In precedenza, questo file veniva generato da un gestionale paghe che adesso non utilizzo più.

Pertanto, dal file prova.xls devo generare il file provatutte.txt.

Questa è tutta la procedura che dovrei fare.
Se hai necessità di ulteriori chiarimenti chiedi pure, anzi mi scuso se ho omesso qualcosa.


Per Anthony:

In effetti non mi ero accorto che nel file provatutte.txt non c'era la colonna finale, mi ero "fidato" della struttura del tracciato record nel programma di caricamento del gestionale.

Provo ad utilizzare il tuo codice e Vi aggiorno quanto prima.

Grazie a tutti!!!
alealfa77
Utente Junior
 
Post: 23
Iscritto il: 24/10/11 14:04

Re: Salvataggio da .xls a .txt con Visual Basic

Postdi Flash30005 » 26/10/11 10:09

Continuo ad essere confuso
se prendo il file prova.xls e lo riporto in un file testo con i campi da te definiti (campi fissi)
non ottengo spazi tra la serie di cccccccc e la serie di nnnnnnnn
ecco perché ti chiedevo
1) di guardare il mio file testo inviato
2) fornire un file testo riferito a prova.xls con i dati che hai inserito in questo foglio
3) in Colonna C hai messo solo un 5 e non 005 come per gli altri dati, a cosa è dovuta questa incoerenza?

il tuo file testo provatutte non rispecchia il file prova.xls
e senza ulteriori indicazioni non posso procedere.

ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Prossimo

Torna a Applicazioni Office Windows


Topic correlati a "Salvataggio da .xls a .txt con Visual Basic":

Editor Visual Studio
Autore: Francesco53
Forum: Programmazione
Risposte: 6

Chi c’è in linea

Visitano il forum: Marius44 e 42 ospiti