Ciao Andrea ,
ti posto il codice che ho estratto dal file , non credo che possa postarti tutto il file completo comunque lo incollo cosi come lo visualizzo dalla macro:
Private Sub Create_Metel_Click()
On Error Resume Next
Const ErrorTitle = "Errore!"
Const OutputFileName = "ListinoMetel.txt"
Const Metel_Tracciato_Listino = "LISTINO METEL "
Const Metel_Ver_Tracciato_Listino = "020"
Const Metel_RowLength_Listino = 177
Const MHeader_IdTracciato = 20
Const MHeader_Listino_SiglaAzienda = 3
Const MHeader_Listino_PartitaIVA = 11
Const MHeader_Listino_NumeroList = 6
Const MHeader_Listino_Decorrenza = 8
Const MHeader_Listino_UltimaVariaz = 8
Const MHeader_Listino_Descrizione = 30
Const MHeader_Listino_Filler1 = 39
Const MHeader_Listino_VerTracciato = 3
Const MHeader_Listino_Filler2 = 49
Const MData_Listino_SiglaMarchio = 3
Const MData_Listino_CodProdAzienda = 16
Const MData_Listino_CodProdottoEAN = 13
Const MData_Listino_DescrProdotto = 43
Const MData_Listino_QtaCartone = 5
Const MData_Listino_QtaMultiplaOrd = 5
Const MData_Listino_QtaMinOrd = 5
Const MData_Listino_QtaMaxOrd = 6
Const MData_Listino_LeadTime = 1
Const MData_Listino_PrezzoRivendit = 11
Const MData_Listino_PrezzoPubblico = 11
Const MData_Listino_MoltiplPrezzo = 6
Const MData_Listino_CodiceValuta = 3
Const MData_Listino_UnitaMisura = 3
Const MData_Listino_ProdComposto = 1
Const MData_Listino_StatoProdotto = 1
Const MData_Listino_DataUltVariaz = 8
Const MData_Listino_FamigliaSconto = 18
Const MData_Listino_FamigliaStatis = 18
Const ForReading = 1, ForWriting = 2, ForAppending = 8
Dim fs, OutputFile
Set fs = CreateObject("Scripting.FileSystemObject")
Set OutputFile = fs.OpenTextFile(fs.GetParentFolderName(ActiveWorkbook.FullName) & "" & OutputFileName, ForWriting, True)
If Not IsStdDate(Decorrenza_Listino.Text) Then
MsgBox "Errore di dati nel campo ""Decorrenza listino"" (era attesa una data nel formato gg/mm/aaaa)", vbExclamation + vbSystemModal, ErrorTitle
Exit Sub
End If
If Not IsStdDate(Data_Ultima_Variaz.Text) Then
MsgBox "Errore di dati nel campo ""Data ultima variazione"" (era attesa una data nel formato gg/mm/aaaa)", vbExclamation + vbSystemModal, ErrorTitle
Exit Sub
End If
OutputFile.WriteLine (Metel_Tracciato_Listino & _
FillStr(Sigla_Azienda.Text, " ", MHeader_Listino_SiglaAzienda) & _
FillStr(Partita_IVA.Text, " ", MHeader_Listino_PartitaIVA) & _
FillStr(Numero_Listino.Text, " ", MHeader_Listino_NumeroList) & _
FillStr(StdToMetelDateConvert(Decorrenza_Listino.Text), " ", MHeader_Listino_Decorrenza) & _
FillStr(StdToMetelDateConvert(Data_Ultima_Variaz.Text), " ", MHeader_Listino_UltimaVariaz) & _
FillStr(Descrizione_Listino.Text, " ", MHeader_Listino_Descrizione) & _
FillStr("", " ", MHeader_Listino_Filler1) & _
Metel_Ver_Tracciato_Listino & _
FillStr("", " ", MHeader_Listino_Filler2) _
)
i = 5 ' Prima riga di dati
Do While Len(ActiveSheet.Cells(i, 1).Text) <> 0
If Not IsStdDate(ActiveSheet.Cells(i, 17).Text) Then
MsgBox "Errore di dati alla riga " & i & " colonna ""Data ultima variazione"" (era attesa una data nel formato gg/mm/aaaa)", vbExclamation + vbSystemModal, ErrorTitle
Exit Do
End If
OutputFile.WriteLine (FillStr(ActiveSheet.Cells(i, 1).Text, " ", MData_Listino_SiglaMarchio) & _
FillStr(ActiveSheet.Cells(i, 2).Text, " ", MData_Listino_CodProdAzienda) & _
Fill0Str(ActiveSheet.Cells(i, 3).Text, MData_Listino_CodProdottoEAN) & _
FillStr(ActiveSheet.Cells(i, 4).Text, " ", MData_Listino_DescrProdotto) & _
Fill0Str(ActiveSheet.Cells(i, 5).Text, MData_Listino_QtaCartone) & _
Fill0Str(ActiveSheet.Cells(i, 6).Text, MData_Listino_QtaMultiplaOrd) & _
Fill0Str(ActiveSheet.Cells(i, 7).Text, MData_Listino_QtaMinOrd) & _
Fill0Str(ActiveSheet.Cells(i, 8).Text, MData_Listino_QtaMaxOrd) & _
FillStr(ActiveSheet.Cells(i, 9).Text, " ", MData_Listino_LeadTime) & _
Fill0Str(Trim(Str(Round(ActiveSheet.Cells(i, 10).Value * 100))), MData_Listino_PrezzoRivendit) & _
Fill0Str(Trim(Str(Round(ActiveSheet.Cells(i, 11).Value * 100))), MData_Listino_PrezzoPubblico) & _
Fill0Str(Trim(Str(ActiveSheet.Cells(i, 12).Value)), MData_Listino_MoltiplPrezzo) & _
FillStr(ActiveSheet.Cells(i, 13).Text, " ", MData_Listino_CodiceValuta) & _
FillStr(ActiveSheet.Cells(i, 14).Text, " ", MData_Listino_UnitaMisura) & _
FillStr(ActiveSheet.Cells(i, 15).Text, " ", MData_Listino_ProdComposto) & _
FillStr(ActiveSheet.Cells(i, 16).Text, " ", MData_Listino_StatoProdotto) & _
FillStr(StdToMetelDateConvert(ActiveSheet.Cells(i, 17).Text), " ", MData_Listino_DataUltVariaz) & _
FillStr(ActiveSheet.Cells(i, 18).Text, " ", MData_Listino_FamigliaSconto) & _
FillStr(ActiveSheet.Cells(i, 19).Text, " ", MData_Listino_FamigliaStatis) _
)
i = i + 1
Loop
ActiveSheet.Cells(1, 1).Value = i
OutputFile.Close
' Verifica eventuali errori durante l' elaborazione
If Err.Number <> 0 Then
MsgBox "Si è verificato un errore durante l' elaborazione del listino o la scrittura dei dati sul file di uscita:" & vbCrLf & _
"la conversione potrebbe non essere completa!", vbExclamation + vbSystemModal, ErrorTitle
WScript.Quit
End If
End Sub
' ***********************************************************************
' Funzione per convertire il formato "data" come scritto nel file Metel
' (yyyymmdd) nel formato "dd/mm/yyyy"
' ***********************************************************************
Function MetelDateConvert(MetelDateStr)
If Len(MetelDateStr) <> 8 Then
MetelDateConvert = ""
Else
MetelDateConvert = Right(MetelDateStr, 2) & "/" & Mid(MetelDateStr, 5, 2) & "/" & Left(MetelDateStr, 4)
End If
End Function
' ***********************************************************************
' Funzione per portare una stringa alla lunghezza voluta, aggiungendo un
' carattere di riempimento se troppo corta o troncandola se troppo lunga
' ***********************************************************************
Function FillStr(InString, StrFiller, OutStrLen)
Do While Len(InString) < OutStrLen
InString = InString & StrFiller
Loop
FillStr = Left(InString, OutStrLen)
End Function
' ***********************************************************************
' Funzione per portare una stringa alla lunghezza voluta aggiungendo
' degli zeri a sinistra
' ***********************************************************************
Function Fill0Str(InString, OutStrLen)
Do While Len(InString) < OutStrLen
InString = "0" & InString
Loop
Fill0Str = Left(InString, OutStrLen)
End Function
' ***********************************************************************
' Funzione per verificare se una stringa è composta solo da caratteri
' numerici
' ***********************************************************************
Function IsNumber(InString)
IsNumber = True
For i = 1 To Len(InString)
i_chr = Mid(InString, i, 1)
If (i_chr < "0") Or (i_chr > "9") Then
IsNumber = False
End If
Next i
End Function
' ***********************************************************************
' Funzione per verificare se una stringa contiene una data nel formato
' standard gg/mm/aaaa
' ***********************************************************************
Function IsStdDate(InString)
IsStdDate = (Len(InString) = 10) And _
(IsNumber(Mid(InString, 1, 2))) And _
(Mid(InString, 3, 1) = "/") And _
(IsNumber(Mid(InString, 4, 2))) And _
(Mid(InString, 6, 1) = "/") And _
(IsNumber(Mid(InString, 7, 4)))
End Function
' ***********************************************************************
' Funzione per convertire il formato "data" nella forma gg/mm/aaaa
' nel formato Metel (aaaammgg)
' ***********************************************************************
Function StdToMetelDateConvert(StdDateStr)
StdToMetelDateConvert = Mid(StdDateStr, 7, 4) & Mid(StdDateStr, 4, 2) & Mid(StdDateStr, 1, 2)
End Function
Grazie mille
Biagio