ho un problema che non riesco a risolvere. Ho fatto diversi test e
tentativi, ma il risultato è sempre lo stesso:
se salvo un file excel come txt (delimitato da tabulazione) da
programma, il risultato è corretto: i numeri hanno la virgola per i
decimali ed il punto per le migliaia.
Se, invece, utilizzo una macro ho sempre ed invariabilmente il punto
come separatore decimali e la virgola per le migliaia.
Non so proprio come risolvere.
Ecco il codice completo (il salvataggio fa parte di una macro di più
ampio respiro: apre dei file, fa la somma dei valori in colonna E e
copia tale valore nel foglio di riepilogo accanto al nome del file,
salva i vari file come txt).
--
Spero che mi possiate essere d'aiuto.
Vi ringrazio anticipatamente.
Ciao
Franz Verga
Ma sei il mio(nostro) Franz?
Se s�, bevi meno birra e posta
il codice!
;-)
--
---------------------------
Mauro Gamberini
http://www.riolab.org/
http://www.maurogsc.eu/
http://social.microsoft.com/Forums/it-IT/officeit/threads
Genau... (vuol dire "esattamente" in lingua germanica...)
> Se sì, bevi meno birra e posta
> il codice!
> ;-)
ero convinto di averlo incollato...
eccolo
Sub SummaryFile()
'
' This macro create a summary file from a directory
' based on the names of files that are in column A
'
Dim SourceFile As Workbook
Dim Summary As Workbook
Dim WbName As String
Dim SumAct As Double
Dim SumBdg As Double
Dim i As Integer
Dim x As String
Dim NumFile As Integer
Dim Direct As String
Dim primofile As String
Application.ScreenUpdating = False
Set Summary = ActiveWorkbook
NumFile = Cells(Rows.Count, 1).End(xlUp).Row
primofile = Application.GetOpenFilename(, , _
"select a file from the folder to be summarized")
Direct = ExtractPathName(primofile)
For i = 1 To NumFile
WbName = Cells(i, 1).Value
x = Direct & "\" & WbName
Workbooks.Open Filename:=x
Set SourceFile = ActiveWorkbook
SumAct = WorksheetFunction.Sum(Range("e:e"))
Summary.Activate
With Cells(i, 2)
.Value = SumAct
.NumberFormat = "#,##0.00"
End With
SourceFile.SaveAs Filename:=Left(SourceFile.Name, Len
(SourceFile.Name) - 3) & "txt", _
FileFormat:=xlText, CreateBackup:=False
SourceFile.Close SaveChanges:=False
Next i
Application.ScreenUpdating = True
End Sub
>
> --
> ---------------------------
> Mauro Gamberinihttp://www.riolab.org/http://www.maurogsc.eu/http://social.microsoft.com/Forums/it-IT/officeit/threads
> ero convinto di averlo incollato...
>
> eccolo
>
> Sub SummaryFile()
> '
> ' This macro create a summary file from a directory
> ' based on the names of files that are in column A
Allora i file li prende da una directory (unnamed?)
o da un elenco di file in col. A?
[...]
> Direct = ExtractPathName(primofile)
Questa manca!
[...]
> Next i
>
>
>
>
> Application.ScreenUpdating = True
C'� un motivo estetico-esoterico-profilattico per cui
fra una riga di codice e l'altra frapponi financo 4 interlinee?
Stai emulando Fantozzi'
Ciao, ben risentito e... vacci piano con la birra.
Bruno
i nomi dei file sono in colonna A, mentre vado a recuperare la
directory con la funzione (che oltretutto non è farina del mio sacco
ma di J Walkenbach (non sono sicuro sia la grafia giusta...) che
mancava... :-)
>
> [...]> Direct = ExtractPathName(primofile)
>
> Questa manca!
hai ragione...
eccola:
Function ExtractPathName(filespec) As String
' Returns the path from a filespec
Dim x As Variant
x = Split(filespec, Application.PathSeparator)
ReDim Preserve x(0 To UBound(x) - 1)
ExtractPathName = Join(x, Application.PathSeparator) & _
Application.PathSeparator
End Function
>
> [...]> Next i
>
> > Application.ScreenUpdating = True
>
> C'è un motivo estetico-esoterico-profilattico per cui
> fra una riga di codice e l'altra frapponi financo 4 interlinee?
> Stai emulando Fantozzi'
le interlinea le inserisco per una migliore leggibilità (almeno dal
mio punto di vista...).
>
> Ciao, ben risentito e... vacci piano con la birra.
Ciao Bruno, ben ritrovato. Purtroppo ormai da quel punto di vista sono
su una brutta china... ;-)
Franz
Dimenticavo,
la versione di Excel è 2003 con Multilingual User Interface Pack
(ovviamente io ho settato la lingua su italiano...)
Ciao
Franz
China e birra? Ma che schifo!
Immagino anche i crauti e i wurstel che ci galleggiano...
E immagino anche cosa riesci a mettere sulla pizza..., poi
pizza, parliamone. E ti vedo con la parrucca bionda
a cantare all' Oktoberfest. E dimmi, comincia a non dispiacerti
neppure la Merkel, di la verit�, un bel donnino, eh?
Lo so che aspetti la risposta, ma questo
� un ng italiano.
Niente crukki qui, dankesch�n.
--
---------------------------
Mauro Gamberini(...che se non lo fa nessuno trova un attimo di tempo pi�
tardi)
> .
>
non dipende dalla versione che utilizzi, ho testato
e il comportamento pazzesco è confermato ...
direi che puoi ovviare scrivendo il file di testo ciclando
il range che desideri riportare ... tutto usedrange mi
sembra di capire.
saluti
r
--
Come e dove incollare il codice:
http://www.rondebruin.nl/code.htm
Il mio ultimo lavoro ...
http://excelvba.altervista.org/blog/index.php/Excel-VBA/UsedRange-eccezioni-e-alternative.html
il problema è che mi servono i txt, in quanto devo poi utilizzarli per fare
l'upload in SAP...
--
Ciao
Franz Verga da Berlino
conosci bene SAP? ... se lavori in germania si :-) ... magari ti scrivo ...
ci lavoro molto anch'io ... e si trova poco da leggere :-) comunque il file
di testo puoi scriverlo ...
io userei il FSO ... comunque basta che cerchi nell'NG
eventualmente domani ti scrivo una possibile soluzione.
ciao
r
(robb.menCHIOCCIOLAgmail.com)
>ho un problema che non riesco a risolvere. Ho fatto diversi test e
>tentativi, ma il risultato � sempre lo stesso:
>
>se salvo un file excel come txt (delimitato da tabulazione) da
>programma, il risultato � corretto: i numeri hanno la virgola per i
>decimali ed il punto per le migliaia.
>
>Se, invece, utilizzo una macro ho sempre ed invariabilmente il punto
>come separatore decimali e la virgola per le migliaia.
>
>Non so proprio come risolvere.
Ciao Franz! Ma nelle impostazioni internazionali cosa hai impostato?
Oggetto:Formato CSV
Newsgroups:microsoft.public.it.office.excel
Data:2005-01-15 07:38:29 PST
http://groups.google.com/groups?threadm=D557CAE4-362D-4F3E-BBD9-374F31322B8F%40microsoft.com
Oggetto:conversione file csv
Newsgroups:microsoft.public.it.office.excel
Data:2004-06-09 03:27:55 PST
http://groups.google.com/groups?threadm=19f3e01c44e0c%241ec6b6d0%24a301280a%40phx.gbl
--
Tiziano Marmiroli
Microsoft MVP - Office System
http://www.riolab.org
"Franz Verga" ha scritto:
> Ciao a tutti,
>
> ho un problema che non riesco a risolvere. Ho fatto diversi test e
> tentativi, ma il risultato è sempre lo stesso:
>
> se salvo un file excel come txt (delimitato da tabulazione) da
> programma, il risultato è corretto: i numeri hanno la virgola per i
> decimali ed il punto per le migliaia.
>
> Se, invece, utilizzo una macro ho sempre ed invariabilmente il punto
> come separatore decimali e la virgola per le migliaia.
>
> Non so proprio come risolvere.
>
> Ecco il codice completo (il salvataggio fa parte di una macro di più
> ampio respiro: apre dei file, fa la somma dei valori in colonna E e
> copia tale valore nel foglio di riepilogo accanto al nome del file,
> salva i vari file come txt).
>
Ciao Franz, come va sotto la porta di Brandeburgo?:-))
Vedo che hai qualche problema, ma domani Roby ti darà sicuramente una
soluzione efficace; per quanto mi riguarda e vista l'ora, mi limito a
fornirti una delle mie artigianali, ovviamente a livello di test.
Con un valore numerico con due decimali in A2, ed almeno la cella C2
formattata come testo, prova:
Public Sub prova()
Dim stringa As String
Dim valore As String
Dim x As Long
Dim lung As String
lung = Len(Range("A2"))
stringa = Range("A2").Value
For x = lung To 11
stringa = " " & stringa
Next
Range("B2").Value = stringa
valore = Mid(stringa, 1, 3) & " "
valore = valore & Mid(stringa, 4, 3) & " "
valore = valore & Mid(stringa, 7, 3)
valore = valore & Right(stringa, 3)
valore = LTrim(valore)
valore = Replace(valore, ",", ".")
valore = Replace(valore, " ", ",")
Range("c2").Value = valore
End Sub
Ripeto che si tratta solo di un test che spero ti possa essere utile a
livello di idea, comunque domani sicuramente Roby passerà rombando con una
soluzione valida.
Con il massimo delle cordialità,
Eliano
Ciao Tiziano!
Nelle impostazioni internazionali da Panello di Controllo c'è la
virgola come separatore decimale, il punto per le migliaia ed il punto
e virgola come separatore elenco e nelle opzioni internazionali di
Excel c'è messo di utilizzare i separtori di sistema. Io cerco di fare
il salvataggio come txt delimitato da tabulazione.
>
> Oggetto:Formato CSV
> Newsgroups:microsoft.public.it.office.excel
> Data:2005-01-15 07:38:29 PST http://groups.google.com/groups?threadm=D557CAE4-362D-4F3E-BBD9-374F3...
>
> Oggetto:conversione file csv
> Newsgroups:microsoft.public.it.office.excel
> Data:2004-06-09 03:27:55 PSThttp://groups.google.com/groups?threadm=19f3e01c44e0c%241ec6b6d0%24a3...
Molto interessante la macro di Chip Pearson che hai linkato.
Probabilmente alla fine utilizzerò quella. Ma ancora non riesco a
capire il bizzarro comportamento di Excel: facendo il salvataggio da
Excel funziona regolarmente, mentre da VBA fa sta cosa stranissima...
--
Ciao
Franz Verga
Sub test()
SumFile_Export_txt , , "E"
End Sub
Sub SumFile_Export_txt( _
Optional col_rif As Long = 1, _
Optional prima_riga As Long = 1, _
Optional Col_sum As Variant = "A")
Dim SourceFile As Excel.Workbook
Dim Summary As Excel.Worksheet
Dim WbName As String
Dim SumAct As Double
Dim SumBdg As Double
Dim i As Long
Dim x As String
Dim NumFile As Long
Dim Direct As String
Dim PrimoFile As String
Dim FSO As Object
Dim Rng As Excel.Range
Application.ScreenUpdating = False
Set Rng = [a1]
Set Summary = Rng.Parent
Set FSO = CreateObject("Scripting.FileSystemObject")
NumFile = UltimaRiga(, _
Rng.Offset(0, col_rif - 1).EntireColumn)
If NumFile = 0 Then Exit Sub
PrimoFile = Application.GetOpenFilename(, , _
"select a file from the folder to be summarized")
Direct = Path_of_file(PrimoFile)
If Len(Direct) = 0 Then Exit Sub
For i = prima_riga To NumFile
WbName = Cells(i, 1).Value
x = FSO.BuildPath(Direct, WbName)
If File_Exist(x & "." & Estensione_file(Summary.Parent.FullName)) Then
Workbooks.Open Filename:=x
Set SourceFile = ActiveWorkbook
SumAct = WorksheetFunction.Sum(Cells(1, Col_sum).EntireColumn)
With Summary.Cells(i, 2)
.Value = SumAct
.NumberFormat = "#,##0.00"
End With
Txt_foglio SourceFile.ActiveSheet, x
'SourceFile.SaveAs Filename:=Left(SourceFile.Name, _
'Len(SourceFile.Name) - 3) & "txt", _
' FileFormat:=xlText, CreateBackup:=False
SourceFile.Close SaveChanges:=False
End If
Next i
Application.ScreenUpdating = True
End Sub
Function UltimaRiga(Optional sh As Worksheet, _
Optional Rng As Range) As Long
'By Norman Jones modificata restituisce
'l'ultima riga valorizzata
'restituisce 0 se il foglio è pulito
'passando Sh verrà ignorato Rng
'passando Rng verrà ignorato Sh
'non passando argomenti verrà ricercata
'l'ultima riga valorizzata del foglio
'attivo
'utilizzata come UDF è consigliabile
'passare Rng
If sh Is Nothing Then
If Rng Is Nothing Then
Set Rng = [a1].Parent.UsedRange
End If
Else
Set Rng = sh.UsedRange
End If
On Error Resume Next
UltimaRiga = Rng.Find(What:="*", _
After:=Rng.Cells(1), _
Lookat:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, _
MatchCase:=False).Row
On Error GoTo 0
End Function
Function Path_of_file(sFull_Name As String) As String
Dim FSO As Object
Set FSO = CreateObject("Scripting.FileSystemObject")
If FSO.FileExists(sFull_Name) Then
Path_of_file = FSO.GetParentFolderName(sFull_Name)
End If
End Function
Function File_Exist(sFull_Name As String) As Boolean
Dim FSO As Object
Set FSO = CreateObject("Scripting.FileSystemObject")
File_Exist = FSO.FileExists(sFull_Name)
End Function
Function Estensione_file(sFull_Name As String) As String
Dim FSO As Object
Set FSO = CreateObject("Scripting.FileSystemObject")
Estensione_file = FSO.GetExtensionName(sFull_Name)
End Function
Sub Txt_foglio(sh As Excel.Worksheet, File_Name As String)
Dim Rng As Excel.Range
Dim S As String
Dim FSO As Object
Dim tS As Object
Dim sPath As String
Const ForWriting As Long = 2
Set FSO = CreateObject("Scripting.FileSystemObject")
On Error Resume Next
Set Rng = UsedRange_Value(sh, , True)
S = Txt_text(Rng)
Set tS = FSO.OpenTextFile(File_Name & ".txt" _
, ForWriting, True)
tS.Write S
tS.Close
End Sub
Function Txt_text( _
Rng As Excel.Range, _
Optional D As String = vbTab) As String
Dim R As Long, C As Long
Dim S As String, St As String
For R = 1 To Rng.Rows.Count
St = ""
For C = 1 To Rng.Columns.Count
St = St & D & Rng(R, C).Text
Next C
If Len(Replace(St, D, "")) Then
St = Right(St, Len(St) - 1)
Else
St = ""
End If
S = S & St & VBA.Constants.vbNewLine
Next R
Txt_text = VBA.Left(S, Len(S) - 2)
End Function
Function UsedRange_Value( _
Optional sh As Worksheet, _
Optional Rng As Range, _
Optional WithFormulas As Boolean = False) _
As Excel.Range
'______________________________________________
'¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
'Di Roberto Mensa nick r
'______________________________________________
'¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
'Restituisce il minimo range rettangolare
'che comprende tutte le celle valorizzate
'nel foglio o nel range che passiamo come
'argomento
'Restituisce Nothing se nessuna cella è
'valorizzata
'passando Sh verrà ignorato Rng
'non passando argomenti verrà ricercata
'il range nel foglio attivo della cartella
'attiva contenente solo le celle contenenti
'un valore costante
'passando WithFormulas = True verranno
'considerate anche le celle contenenti una
'formula
Dim S As String, tS As String
Dim RE As Object
Dim maxR As Long, minR As Long
Dim maxC As Long, minC As Long
Dim V
'Verifico i primi due argomenti e setto
'il range di ricerca
If sh Is Nothing Then
If Rng Is Nothing Then
Set Rng = [a1].Parent.UsedRange
End If
Set sh = Rng.Parent
Else
Set Rng = sh.UsedRange
End If
On Error Resume Next
'setto il range alle celle contenenti un valore
'costante
Set UsedRange_Value = Rng.SpecialCells( _
xlCellTypeConstants)
'Controllo il parametro opzionale
If WithFormulas Then
'aggiungo le celle contenenti le formule
If TypeName(UsedRange_Value) = "Nothing" Then
Set UsedRange_Value = _
Rng.SpecialCells(xlCellTypeFormulas, 23)
Else
Set UsedRange_Value = _
Union( _
UsedRange_Value, _
Rng.SpecialCells(xlCellTypeFormulas, 23))
End If
End If
On Error GoTo 0
'verifico che il range non sia vuoto
If TypeName(UsedRange_Value) = "Range" Then
'verifico se contiene più aree
If UsedRange_Value.Areas.Count > 1 Then
'recupero le coordinate per settare
'il range rettangolare
'ATTENZIONE!
'Comportamento non documentato di
'Address riferito a Range
'Rng.Address restituisce fino a 257
'caratteri
For Each V In UsedRange_Value
S = S & V. _
Address(True, True, xlR1C1)
Next
Set RE = CreateObject("vbscript.regexp")
RE.Global = True
RE.Pattern = "C\d+|:|,"
tS = RE.Replace(S, "")
RE.Pattern = "\d+"
maxR = RE.Execute(tS)(0)
minR = maxR
For Each V In RE.Execute(tS)
If V < minR Then
minR = V
ElseIf V > maxR Then
maxR = V
End If
Next
RE.Pattern = "R\d+|:|,"
tS = RE.Replace(S, "")
RE.Pattern = "\d+"
maxC = RE.Execute(tS)(0)
minC = maxC
For Each V In RE.Execute(tS)
If V < minC Then
minC = V
ElseIf V > maxC Then
maxC = V
End If
Next
Set UsedRange_Value = sh.Range( _
sh.Cells(minR, minC), _
sh.Cells(maxR, maxC))
End If
End If
End Function
ovviamente ... la se liga qui sopra diventa
WbName = Cells(i, col_rif).Value
[cut]
> Vedo che hai qualche problema, ma domani Roby ti darà sicuramente una
> soluzione efficace;
[cut]
> comunque domani sicuramente Roby passerà rombando con una
> soluzione valida.
sono lusingato ... ci ho provato ...
rimane il dubbio di essere all'altezza degli elogi :-)
ciao Mitico
> Ciao Bruno, ben ritrovato. Purtroppo ormai da quel punto di vista sono
> su una brutta china... ;-)
Prova a usare questa funzione nella tua routine:
=====================================
Public Function NumericString(N As Currency, _
Optional OutputDecimalSeparator As String = ",", _
Optional OutputThousandsSeparator As String = ".", _
Optional NumberOfFiguresToRoundTo As Integer = 2) As String
Dim S As String, decPos As Integer
Dim Sint As String, Sdec As String
Dim i As Integer, L As Integer, SS As String
S = CStr(Round(N, NumberOfFiguresToRoundTo))
decPos = InStr(1, S, ".") + InStr(1, S, ",")
If decPos Then
Sint = Mid(S, 1, decPos - 1)
Sdec = Mid(S, decPos + 1)
Else
Sint = S
Sdec = String(NumberOfFiguresToRoundTo, "0")
End If
If Len(Sdec) < NumberOfFiguresToRoundTo Then
Sdec = Sdec & String(NumberOfFiguresToRoundTo - Len(Sdec), "0")
End If
L = Len(Sint)
If L Mod 3 Then
SS = Left(Sint, L - Int(L / 3) * 3)
For i = 1 To Int(L / 3)
SS = SS & OutputThousandsSeparator & _
Mid(Sint, L - 3 * Int(L / 3) + 1 + 3 * (i - 1), 3)
Next
Else
For i = 1 To Int(L / 3)
SS = SS & OutputThousandsSeparator & Mid(Sint, 3 * i - 2, 3)
Next
SS = Mid(SS, 2)
End If
NumericString = SS & OutputDecimalSeparator & Sdec
End Function
=====================================
Bruno
ciao Bruno,
qual'è il pregio di questa function?
non è certo sintetica ... conoscendo i tuoi gusti
credo mi sfugga qualcosa.
saluti
r
p.s.
mi sembra d'aver capito che l'intenzione sia
di trasformare i numeri in testo ... nel caso
non basterebbe:
Sub numero_come_testo()
Dim rng As Excel.Range
For Each rng In ActiveSheet.UsedRange
If VarType(rng) = 5 or 6 Then
rng = rng.Text
End If
Next
End Sub
> ciao Bruno,
> qual'è il pregio di questa function?
> non è certo sintetica ... conoscendo i tuoi gusti
> credo mi sfugga qualcosa.
> saluti
> r
Credo ti sfugga che un Currency 1234567.8952
può venir trasformato in stringhe:
1.234.567,90
1,234,567.895
1 234 567.9
etc.
[...]
> If VarType(rng) = 5 or 6 Then
Carina!
"Bruno Campanini" ha scritto:
Ciao Bruno,ciao Roby.
Dopo aver affermato ancora una volta la mia ammirazione per i "Signori delle
UDF", e confermando ancora una volta la mia idiosincrasia per quelle
Funzioni, oso chiedere qual'è la differenza sostanziale fra le vostre macro e
la trasformazione del mio test, segnalato ieri a Franz, in una mia UDF sempre
artigianale che avrei avuto l'ardire di fare così:
Function danada(rng As Range) As String
Dim stringa As String
Dim valore As String
Dim x As Long
Dim lung As String
lung = Len(rng)
stringa = rng
For x = lung To 11
stringa = " " & stringa
Next
valore = Mid(stringa, 1, 3) & " "
valore = valore & Mid(stringa, 4, 3) & " "
valore = valore & Mid(stringa, 7, 3)
valore = valore & Right(stringa, 3)
valore = LTrim(valore)
valore = Replace(valore, ",", ".")
valore = Replace(valore, " ", ",")
danada = valore
End Function
Grazie per l'eventuale risposta per la quale anche i vaffa sarebbero ben
accetti.:-))
Cordialmente
Eliano
> Ciao Bruno,ciao Roby.
> Dopo aver affermato ancora una volta la mia ammirazione per i "Signori
> delle
> UDF", e confermando ancora una volta la mia idiosincrasia per quelle
> Funzioni, oso chiedere qual'è la differenza sostanziale fra le vostre
> macro e
> la trasformazione del mio test, segnalato ieri a Franz, in una mia UDF
> sempre
> artigianale che avrei avuto l'ardire di fare così:
> Function danada(rng As Range) As String
[...]
Direi proprio che le differenze sono minime.
Io ci ho messo qualche opzione in più ma per il resto la
sostanza è la stessa.
La tua dà errore sui numeri interi (provala con 12345678),
ma si aggiusta con poco.
La mia dà errore su... dimmelo tu.
Io son bravo a veder gli errori altrui, i miei mi sono
completamente trasparenti.
> Grazie per l'eventuale risposta per la quale anche i vaffa sarebbero ben
> accetti.:-))
> Cordialmente
I vaffa io li riservo ai rompic..., che dipendono comunque
sempre da considerazioni soggettive.
Nella fattispecie contraccambio le cordialità con
mucho gusto.
Bruno
ciao Bruno, ciao Eliano,
inanzitutto vi chiedo (visto che poi mi dilungherò un pochino e sia mai che
vi annoierete e non leggerete tutto) se potete spiegare cosa fanno le vostre
funzioni e perchè/quando si debbono usare ... questo perchè 1) non l'ho
capito bene ... 2) credo che con una regexp si possa risolvere con un paio
di istruzioni e mi piacerebbe provarci ... detto questo ... tornerei al
problema di Franz ...
ripeto c'è qualcosa che mi sfugge ... quindi vi dico cosa ho intuito ...
dalla risposta di Bruno (e riguardando anche la prima di Eliano)
ho capito che il vostro suggerimento (non dite come e dove usare la
function) stava nel rendere testo le celle di tipo numerico ... [Franz (che
aime è sparito forse è tornato in Germany :-) ha parlato inizialmente di sep.
decimali e sep. migliaia ... come se il problema fosse per entrambi ... io
sinceramente non avevo notato, comunque mi sfugge cosa servano i separatori
di migliaia (.) in un file di testo destinato all'upload ] ... comunque ...
tornando allo stratagemma di rendere testo i numeri ... ho pensato ... ottima
idea bravo Bruno e bravo Eliano ... però mi sono anche detto ... una funzione
come quella non è necessaria e ho proposto una sub stringata che
all'occorrenza può (usando rng.text riportare il numero formattato ... e
rng.value un numero non formattato) risolvere il problema ... alla fine
troverete il codice completo di Franz con questo adattamento ... nasce un
problema però ... [e viste le vostre risposte o forse la mia errata
interpretazione ho l'impressione che non avete testato il codice tutto] ...
un problema non trascurabile ... salvando in quel modo i campi numerici
vengono nel file txt delimitati da doppie virgolette come stringhe di testo
... mi puzza che per un upload a SAP non piaccia come non piacerebbe a me ...
[a chi volesse provare il codice sarà sufficiente creare 2 file contenenti
almeno nella colonna E campi numerici con virgola ... volendo potete anche
formattare uno in un modo ed uno in un altro per vedere le differenze ... li
chiamerete uno e due poi in una terza cartella incollate il codice ed in
A1=uno, A2=due ... poi si esegue il codice]
[rimane poi la mia soluzione ... quella di far scrivere il file da codice
... in quel caso il file di testo riporterà i numeri con solo separatore
decimale (anche se sarebbe facile volendo scriverli anche col sep delle
migliaia) corretto ... ovvero la virgola e eviterà la fastidiosa presenze
delle doppie virgolette]
per chi è arrivato sino a qui grazie e ciao
r
Option Explicit
Sub SummaryFile()
'
' This macro create a summary file from a directory
' based on the names of files that are in column A
numero_come_testo SourceFile.ActiveSheet
SourceFile.SaveAs Filename:=Left(SourceFile.Name, Len(SourceFile.Name) -
3) & "txt", _
FileFormat:=xlText, CreateBackup:=False
SourceFile.Close SaveChanges:=False
Next i
Application.ScreenUpdating = True
End Sub
Function ExtractPathName(filespec) As String
' Returns the path from a filespec
Dim x As Variant
x = Split(filespec, Application.PathSeparator)
ReDim Preserve x(0 To UBound(x) - 1)
ExtractPathName = Join(x, Application.PathSeparator) & _
Application.PathSeparator
End Function
Sub numero_come_testo(sh As Worksheet)
Dim rng As Excel.Range
For Each rng In sh.UsedRange
If VarType(rng) = 5 Or 6 Then
rng = rng.Text
End If
Next
End Sub
> "r" <r...@discussions.microsoft.com> wrote in message
> news:F4C759AA-69EB-4327...@microsoft.com...
>
> > ciao Bruno,
> > qual'è il pregio di questa function?
> > non è certo sintetica ... conoscendo i tuoi gusti
> > credo mi sfugga qualcosa.
> > saluti
> > r
>
> Credo ti sfugga che un Currency 1234567.8952
> può venir trasformato in stringhe:
> 1.234.567,90
> 1,234,567.895
> 1 234 567.9
> etc.
no mi sfugge il senso della funzione ... l'ho provato ma non so lo scopo ...
dal codice non mi ci metto nemmeno di cercare di capirlo ... troppi Mid, Len
e Int oltr al fatto che con quei nomi di variabili ... mi ci perdo più che a
chiamarle x,y e z
abbi pazienza ... dimmi solo a cosa serve
saluti
r
altre differenze ... quella di Bruno restituisce una stringa ... quella di
Eliano accetta anche i carriarmati ... passando cartel1 ->c,artel1 ... e i
numeri li lascia numeri
i miei dubbi crescono ... mi sa che non ho capito proprio nulla
saluti
r
"r" ha scritto:
Ciao Roby.
E' vero: non ho testato nè la macrina nè la Udf, comunque ambedue erano
pensate come parte di una macro su una copia del foglio ottenuta con copia
valori onde evitare il problema formule.
Inoltre all'artigiano Eliano non era passata nemmeno per la controcassa del
cervello l'idea di usare un VarType(rng) (non lo conoscevo e non l'ho mai
usato in vita mia) per cui grazie e purtroppo NON a buon rendere.
Se domani trovo la voglia ci riprovo, anche se sono certo (quasi) che Franz
dovrebbe essere già passato da queste parti, sempre che non sia ancora a fare
jogging dalle parti dell'Unter den Linden.
Saluti a tutti
Eliano
"Bruno Campanini" ha scritto:
Ciao Bruno.
Vedo che Roby ti ha già relazionato in merito; grazie per la segnalazione e
domani, rogne permettendo, ripovo e testo l'accrocco.
Saluti
Eliano
> > un problema non trascurabile ... salvando in quel modo i campi numerici
> > vengono nel file txt delimitati da doppie virgolette come stringhe di testo
Me ne ero dimenticato:
Franz dice che usa: Testo(delimitato da tabulazioni); la macro restituisce
Testo, ne una virgola in più ne una in meno, se riapri il file con XL. :-))
Eliano
Il mio ultimo lavoro ...
http://excelvba.altervista.org/blog/index.php/Excel-VBA/UsedRange-eccezioni-e-alternative.html
"eliano" ha scritto:
ciao Mitico,
lui non riapre con excel ...
comunque non sono convinto che sia ripassato ... secondo me non lo vediamo
fino alla prossima volta :-)
in verità gli ho anche scritto ... ma nulla nessuna risposta.
saluti da tutta la tribu
r
"r" ha scritto:
> "eliano" ha scritto:
>
> >
> > "r" ha scritto:
> >
> > > > un problema non trascurabile ... salvando in quel modo i campi numerici
> > > > vengono nel file txt delimitati da doppie virgolette come stringhe di testo
> >
> >
> > Me ne ero dimenticato:
> > Franz dice che usa: Testo(delimitato da tabulazioni); la macro restituisce
> > Testo, ne una virgola in più ne una in meno, se riapri il file con XL. :-))
> > Eliano
>
> ciao Mitico,
> lui non riapre con excel ...
> comunque non sono convinto che sia ripassato ... secondo me non lo vediamo
> fino alla prossima volta :-)
> in verità gli ho anche scritto ... ma nulla nessuna risposta.
> saluti da tutta la tribu
> r
Ciao Roby.
Che non usasse XL era chiaro :-)) comunque c'è qualcosa che non mi torna e
sicuramente dipenderà dalla mia ignoranza in merito.
Tutte le volte che ho avuto a che fare con pacchetti applicativi (non
conosco SAP), mi sono trovato davanti ad un problema di conversione dei dati;
la conversione veniva attuata o con PGM apposito facente parte del nuovo
pacchetto, o con dati testuali manuali o ottenuti dal vecchio pacchetto
sempre con apposito PGM, o più recentemente, con dati su file .XLS ottenuti
dal vecchio pacchetto nella maniera più disparata, che linguaggi tipo Cobol o
RpgII riuscivano ad interpretare, se non direttamente, attraverso i dati
testuali entrocontenuti.
Ora, qualsiasi prova faccia, riesco sempre ad ottenere un file testo (con
formattazione inglese) e che lo legga con il vecchio Edit (Dos), con WordPad,
con BloccoNote o con Word, rilevo che si tratta sempre di Testo!
Ma evidentemente a quel cornuto di Sap (o chi per lui) la cosa non va a
genio, per cui, visto che Franz sembra sparito dalla circolazione e ritenendo
che abbia risolto il problema, chiudiamo l'argomento.:-D)
Tam-Tam di saluto per la tribù
Eliano
Ciao Eliano,
non sono sparito e non ho risolto...
Più che altro ho avuto da lavorare e nel w.e. non sono stato molto davanti
al PC...
Come dicevo a Roberot nell'e-mail, non ho avuto modo di testare le varie
soluzioni proposte. Quando avrò il tempo di farlo (la settimana che comincia
sarà intensa, per cui nulla da fare...) vi farò sapere com'è andata e quale
soluzione avrò adottato.
Comunque, a prescindere da come risolverò il mio problema contingente, resta
sempre il problema di capire perché quel cornuto di Excel, quando salvo un
file come testo non mi da alcun problema e mi uilizza la virgola per i
decimali, mentre se faccio la stessa cosa tramite VBA, mi utilizza il
formato inglese, cioè col punto al posto della virgola... Può essere un bug?
Scusa, ma non capisco... Mi pare id capire che devo cambiare questa riga...
--
Spero d'esserti stato d'aiuto.
Ti ringrazio anticipatamente per il riscontro.
"Franz Verga" ha scritto:
> Ciao Eliano,
>
> non sono sparito e non ho risolto...
> Più che altro ho avuto da lavorare e nel w.e. non sono stato molto davanti
> al PC...
>
> Come dicevo a Roberot nell'e-mail, non ho avuto modo di testare le varie
> soluzioni proposte. Quando avrò il tempo di farlo (la settimana che comincia
> sarà intensa, per cui nulla da fare...) vi farò sapere com'è andata e quale
> soluzione avrò adottato.
>
> Comunque, a prescindere da come risolverò il mio problema contingente, resta
> sempre il problema di capire perché quel cornuto di Excel, quando salvo un
> file come testo non mi da alcun problema e mi uilizza la virgola per i
> decimali, mentre se faccio la stessa cosa tramite VBA, mi utilizza il
> formato inglese, cioè col punto al posto della virgola... Può essere un bug?
>
Ciao Franz.
Non lo so se è un bug, comunque nei limiti delle mie possibilità ti propongo
un file che usa in maniera autonoma la formattazione "inglese", anche se da
quello che dice Roby non credo che la cosa si risolva in quel modo.
Vedi sul mio disco remoto: http://mio.discoremoto.alice.it/falinieliano/
il file: provaFranz.xls che contiene anche la trasformazione dei valori
numerici con formattazione "inglese" in valori numerici, ottenuta però con:
Value=Text.
Provalo e facci sapere
Eliano
> Ciao Franz.
> Non lo so se è un bug, comunque nei limiti delle mie possibilità ti
> propongo
> un file che usa in maniera autonoma la formattazione "inglese", anche se
> da
> quello che dice Roby non credo che la cosa si risolva in quel modo.
> Vedi sul mio disco remoto: http://mio.discoremoto.alice.it/falinieliano/
> il file: provaFranz.xls che contiene anche la trasformazione dei valori
> numerici con formattazione "inglese" in valori numerici, ottenuta però
> con:
> Value=Text.
> Provalo e facci sapere
> Eliano
Ciao Eliano.
Questa mattina, aspettando una telefonata che deve ancora arrivare,
mi sono riletto tutto il thread giungendo alla conclusione che...
non ho capito niente.
In sostanza Franz cosa cerca?
Che un numero (numero e non testo, fomattato nel suo "locale")
venga esportato come testo nel formato 1.234.567,89?
Mi sembra impossibile: se è numero formattato l'esportazione
sarà sempre 1,234,567.89; se non formattato 1234567.89
Per avere l'esportazione in formato 1.234.567,89 il numero
dovrà prima essere costruito come stringa.
Non lo vuole racchiuso fra virgolette?
Basterà in Workbook.SaveAs ... porre FileFormat:= xlTextPrinter.
È arrivata la telefonata.
Ciao di nuovo
Bruno
Ciao Bruno.
> Questa mattina, aspettando una telefonata che deve ancora arrivare,
> mi sono riletto tutto il thread giungendo alla conclusione che...
> non ho capito niente.
LOL
> In sostanza Franz cosa cerca?
> Che un numero (numero e non testo, fomattato nel suo "locale")
> venga esportato come testo nel formato 1.234.567,89?
Non esattamente...
Ho dei file Excel che devo trasformare in file di testo per essere importati
su SAP. Facendo l'operazione manualmente (apro il file, faccio salva con
nome, scelgo il formato testo delimitato da tabulazione, e infine schiaccio
su Salva), gli importi vengono salvati normalmente con la virgola come
separatore decimale. Facendo la stessa cosa tramite VBA, la virgola viene
rimpiazzata dal punto, per cui in fase di importazione, quello viene
considerato come punto delle migliaia, per cui gli importi risultano
moltiplicati per 1000...
> Mi sembra impossibile: se è numero formattato l'esportazione
> sarà sempre 1,234,567.89; se non formattato 1234567.89
>
> Per avere l'esportazione in formato 1.234.567,89 il numero
> dovrà prima essere costruito come stringa.
> Non lo vuole racchiuso fra virgolette?
> Basterà in Workbook.SaveAs ... porre FileFormat:= xlTextPrinter.
Ho provato il suggerimento, ma i vari campi delle colonne risultano
attaccati l'uno all'altro...
> È arrivata la telefonata.
Speriamo sia stata proficua... :-)
> Ciao di nuovo
> Bruno
Ciao Franz.
Credo che abbiamo qualche problema nel comprendere la situazione;
comunque, se si trattasse di un problema di formattazione italica/
albionica, prova le due macro che cambiano e ripristinano i separatori
su un foglio di prova, ricordandoti che nella chiusura del file hai
anche la disattivazione del medesimo.
Ovviamente, se modifichi i separatori, ricordati di ripristinarli
visto che tutto l'XL usa quelli settati dalle macro.
Facci sapere e saluti
Eliano
Ciao Eliano,
> Credo che abbiamo qualche problema nel comprendere la situazione;
vediamo se riesco a spiegarla meglio...
Ho dei file Excel, tutti con la stessa formattazione, che devo salvare in
formato testo delimitato da tabulazione per importarli su SAP.
Se faccio la cosa a manina (apro il file, faccio salva con nome, cambio il
formato a testo delimitato da tabulazione, schiaccio il tasto Salva e
ripondo ok ai messaggi che Excel presenta), funziona perfettamente, ma
ovviamente la cosa � abbastanza tediosa quando ci si trova a doverlo fare
per almeno una ventina di file...
L'idea originale era quella di fare l'apertura e il salvataggio dei file
tramite macro, per cui ho registrato una macro mentre facevo il salva con
nome per un file, l'ho generalizzata per rendere il nome variabile e l'ho
inserita nel mio programmino, molto molto artigianale, che fa anche il
riepilogo di tutti i valori dei vari file. Per�, cos� facendo, succede
appunto l'arcano: gli importi vengono formattati col punto per i decimali,
mentre i campi di testo vengono racchiusi tra doppie virgolette...
> comunque, se si trattasse di un problema di formattazione italica/
> albionica, prova le due macro che cambiano e ripristinano i separatori
> su un foglio di prova, ricordandoti che nella chiusura del file hai
> anche la disattivazione del medesimo.
> Ovviamente, se modifichi i separatori, ricordati di ripristinarli
> visto che tutto l'XL usa quelli settati dalle macro.
> Facci sapere e saluti
> Eliano
avevo gi� provato ad inserire nella mia macro originale il cambio di
separatori, oppure il settaggio su quelli locali, ma VBA se ne impipa
altamente e utilizza sempre il punto per i decimali quando vado a salvare
come txt.
Ciao
Franz
[...]
> avevo gi� provato ad inserire nella mia macro originale il cambio di
> separatori, oppure il settaggio su quelli locali, ma VBA se ne impipa
> altamente e utilizza sempre il punto per i decimali quando vado a salvare
> come txt.
Questo ce l'hai gi� detto dieci volte e tutti l'abbiamo
inteso / sperimentato.
� un dato assodato: se esporti da NUMBER a TEXT, VBA
formatta a modo suo.
Allora costruisci delle STRINGHE NUMERICHE formattate
come ti conviene ed esporta da TEXT a TEXT.
Non ti sta bene che il testo sia tra virgolette? usa
FileFormat:=xlTextPrinter.
Non ti sta bene che cos� facendo i numeri risultino
attaccati l'un l'altro? allarga le colonne, intercala
colonne blank...
In alternativa rivolgiti ad un buono psichiatra.
Ce ne sar� qualcuno a Berlino...
Ciao
Bruno
I tuoi files da trasformare in testo nella
cartella C:\Cartella.
I files trasformati in .txt andranno in
C:\nuovaCartella.
Modifica le path con le tue.
La cartella novaCartella deve essere presente
(potremmo forzarne la creazione, nel caso).
Non serve una macro da Excel.
E' sufficente un file .vbs da lanciare
(che volendo pu� essere trasformato in macro)
Esempio, questo, da copia/incollare
in un file del Notebook e poi salvato
come tuoNome.vbs:
'dichiaro le variabili
Dim objExcel
Dim objWorkbook
Dim objWorksheet
Dim objFSO
Dim objFolder
Dim objFile
Dim sPath
'path della cartella con i files
'di Excel
sPath = "C:\tuaCartella"
'creo gli oggetti
Set objExcel = CreateObject("Excel.Application")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(sPath)
'non visualizzo Excel e impedisco
'mi vengano visualizzati gli Alerts
With objExcel
.Visible = False
.DisplayAlerts = False
End With
'per ogni file nella cartella
For Each objFile In objFolder.Files
'se sono files di Excel
Select Case LCase(Right(objFile.Name, 4))
Case ".xls", "xlsx", "xlsm"
'li apro e assegno il riferimento
Set objWorkbook = objExcel.Workbooks.Open(objFile.Path)
'Workbook
With objWorkbook
'lo salvo nel nuovo formato
'in c:\nuovaCartella
.SaveAs "C:\nuovaCartella\" & objFile.Name & ".txt", 3, _
, , , , , , _
, , , True
'chiudo il file
.Close
End With
End Select
Next
'ripristino gli Alerts
'(inutile in questo contesto)
'e faccio il Quit
With objExcel
.DisplayAlerts = True
.Quit
End With
'Set a Nothing delle variabili oggetto
Set objFile = Nothing
Set objFolder = Nothing
Set objFSO = Nothing
Set objWorkbook = Nothing
Set objExcel = Nothing
A questo indirizzo(fra pochi minuti dall'ora
dell'invio della risposta):
http://www.maurogsc.eu/esemping/daexcelatext.zip
trovi un file .zip
che contiene il vbs e una cartella
Cartella con all'interno alcuni files di Excel.
Copiala nel tuo disco C: e crea sempre
nel disco C: la cartella nuovaCartella.
Lancia il vbs e dai un'occhiata ai files
.txt che sono in nuovaCartella.
Ciao e buon lavoro.
--
---------------------------
Mauro Gamberini
http://www.riolab.org/
http://www.maurogsc.eu/
http://social.microsoft.com/Forums/it-IT/excelit/threads
Ultimo parametro di SaveAs:
<guida>
ImpostazioniInternazionali Facoltativo Variant
Se ha valore True, i file verranno salvati nella lingua di Microsoft Excel
(incluse le impostazioni del pannello di controllo). Se ha valore False
(impostazione predefinita), i file verranno salvati nella lingua di Visual
Basic, Applications Edition (VBA) (Visual Basic, Applications Edition (VBA):
Versione in linguaggio macro di Microsoft Visual Basic utilizzata per
programmare applicazioni basate su Windows e inclusa in numerosi programmi
Microsoft.), che in genere � l'inglese (Stati Uniti) a meno che il progetto
VBA da cui viene eseguito Workbooks.Open non sia un vecchio progetto VBA
XL5/95 in una lingua diversa dall'inglese.
</guida>
Pu� risolvere?
Ovviamente il parametro:
FileFormat
deve essere impostato correttamente.
Poi mi fermo qui perch� ho capito poco
di tutto il thread e una possibile soluzione
l'ho postata.
Ciao Bruno, buona giornata.
--
---------------------------
Mauro Gamberini
http://www.riolab.org/
http://www.maurogsc.eu/
>> � un dato assodato: se esporti da NUMBER a TEXT, VBA
>> formatta a modo suo.
>>
>
> Ultimo parametro di SaveAs:
>
> <guida>
>
> ImpostazioniInternazionali Facoltativo Variant
>
> Se ha valore True, i file verranno salvati nella lingua di Microsoft Excel
> (incluse le impostazioni del pannello di controllo). Se ha valore False
> (impostazione predefinita), i file verranno salvati nella lingua di Visual
> Basic, Applications Edition (VBA) (Visual Basic, Applications Edition
> (VBA): Versione in linguaggio macro di Microsoft Visual Basic utilizzata
> per programmare applicazioni basate su Windows e inclusa in numerosi
> programmi Microsoft.), che in genere � l'inglese (Stati Uniti) a meno che
> il progetto VBA da cui viene eseguito Workbooks.Open non sia un vecchio
> progetto VBA XL5/95 in una lingua diversa dall'inglese.
>
> </guida>
>
> Pu� risolvere?
> Ovviamente il parametro:
>
> FileFormat
>
> deve essere impostato correttamente.
>
> Poi mi fermo qui perch� ho capito poco
> di tutto il thread e una possibile soluzione
> l'ho postata.
> Ciao Bruno, buona giornata.
Io del thread ho capito ancora meno.
Spero solo che Franz trovi un buono psichiatra a Berlino
e che fissi un appuntamento anche per me...
Stacco gli occhiali e non ci voglio pensare pi�.
Ciao
Bruno
Eccolo tradotto in vb per Excel.
Sempre i files .xls in c:\Cartella
e i relativi files .txt in c:\nuovaCartella
(da creare, io immagino che tu sappia
dove prendere i files .xls e dove inserire
i .txt):
Public Sub m()
'dichiaro le variabili
Dim objWorkbook As Workbook
Dim objFSO As Object
Dim objFolder As Object
Dim objFile As Object
Dim sPath As String
'path della cartella con i files
'di Excel
sPath = "C:\Cartella"
'creo gli oggetti
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(sPath)
'impedisco che mi vengano
'visualizzati gli Alerts
'e il refresh del monitor
With Application
.DisplayAlerts = False
.ScreenUpdating = False
End With
'per ogni file nella cartella
For Each objFile In objFolder.Files
'se sono files di Excel
Select Case LCase(Right(objFile.Name, 4))
Case ".xls", "xlsx", "xlsm"
'li apro e assegno il riferimento
Set objWorkbook = Workbooks.Open(objFile.Path)
'Workbook
With objWorkbook
'lo salvo nel nuovo formato
'in c:\nuovaCartella
.SaveAs FileName:="C:\nuovaCartella\" & _
objFile.Name & ".txt", _
FileFormat:=xlText, _
Local:=True
'chiudo il file
.Close
End With
End Select
Next
'ripristino gli Alerts
'e il refresh del monitor
With Application
.DisplayAlerts = True
End With
'Set a Nothing delle variabili oggetto
Set objFile = Nothing
Set objFolder = Nothing
Set objFSO = Nothing
Set objWorkbook = Nothing
End Sub
Io nei files .txt non vedo "" nei valori impostati
come numeri in Excel e vedo
i separatori salvati come sono impostati
nel mio pc.
Se(se) utilizzi il vbs, non puoi dichiarare
i parametri tipo: FileName:=NomeFile
ma devi passarli *tutti* e con i valori
delle costanti.
Fai sapere, grazie.
Questa è esattamente la soluzione che mi serviva....
Grazie Mauro!!!!
--
Ciao
Franz da Berlino (dove oggi è caduta la prima neve dell'inverno)
Ciao Roberto,
>ho testato la tua funzione ed è praticamente perfetta, ma non ho avuto il
>tempo di studiarmela con calma...
sai dove trovarmi ...
[cut]
>Ho provato pure la funzione di Chip Pearson segnalata da Tiziano
>(http://www.cpearson.com/excel/ImpText.aspx).
>Questa fa più o meno la stessa cosa della tua ed è molto più compatta, però
>sostituisce le celle vuote del file Excel con delle coppie di virgolette.
>Non riesco a capire come modificarla per evitare questa cosa.
preferisco spesso scrivere funzioni staccate per riutilizzarle in altro
codice ... la funzione UsedRange migliorata ... è un po' lunga ma ha il
vantaggio di isolare le sole celle della *tabella* escludendo righe vuote a
sinistra e in alto ... volendo per compattare il codice basterebbe ben poco
...
>Ti allego un file d'esempio per darti un'idea della struttura dei dati che
>mi ritrovo a dover uplodare in SAP...
non l'ho ancora ricevuto ... appena lo invii ... vedrò di guardarlo ... e se
ho tempo doamni guardo anche la funzione di Chip Pearson ... adesso mi hai
incuriosito :-)
ciao
r
--
Come e dove incollare il codice:
http://www.rondebruin.nl/code.htm
Le mie case nel web:
http://excelvba.altervista.org/blog/index.php/Table/Excel-VBA/
Il file l'ho allegato al post precedente (io uso Windows Mail per leggere i
NG) e lo vedo...
> ... e se ho tempo doamni guardo anche la funzione di Chip Pearson ...
> adesso mi hai incuriosito :-)
Non so se hai letto gli ultimi interventi di Mauro: la soluzione al problema
del SaveAs è di utilizzare l'ultimo parametro Local ed impostarlo a True (di
default è impostato su False). In questo modo il file viene salvato nella
lingua e con le impostazioni internazionali del pannello di controllo,
inclusi quindi i formati numerici...
Colgo l'occasione per ringraziare te e tutti gli altri per gli spunti
forniti, che mi serviranno a costruire un'applicazione più robusta ed
utilizzabile non solo da me, ma anche da miei colleghi molto meno addentro
ai segreti di Excel e del VBA...
--
Ciao
Franz Verga da Berlino (dove oggi è caduta la prima neve, ed il freddo è
stato parecchio pungente...)
Ad occhiolo e crocetta, visto che il Chr(34) sono le virgolette ("):
For RowNdx = StartRow To EndRow
WholeLine = ""
For ColNdx = StartCol To EndCol
If Cells(RowNdx, ColNdx).Value = "" Then
CellValue = Chr(34) & Chr(34) '<---- prova a commentare
questa riga
Else
CellValue = Cells(RowNdx, ColNdx).Text
End If
WholeLine = WholeLine & CellValue & Sep
Next ColNdx
WholeLine = Left(WholeLine, Len(WholeLine) - Len(Sep))
Print #FNum, WholeLine
Next RowNdx
e visto che ci sei....ricordati quello che sostengo da tempo in merito
all'utilizzo delle macro.:-))
Massime cordialità
Eliano
Ciao Franz.
Ho risposto velocemente e la risposta l'ho mandata a Roby e, con molta
probabilità l'ho sbagliata.
Il "patatina" sta lavorando sulla scrittura di un file Testo e
probabilmente ha la necessità di riempire tutti i campi, quindi,
invece di commentare l'istruzione, prova a sostituire il Chr(34) con
il carattere blank, cioè Chr(32), oppure con il carattere zero, cioè
Chr(48), sperando che quel cornuto di SAP non si formalizzi.:-))
Per quanto riguarda il "Local" lo avevo provato anch'io ottenendo
sempre valori numerici virgolettati, ma probabilmente commettevo
qualche altro errore da qualche altra parte.
Bene, hai risolto il problema e sono felice per te.
Saluti
Eliano
Ciao Eliano
> Ho risposto velocemente e la risposta l'ho mandata a Roby e, con molta
> probabilit� l'ho sbagliata.
LOL
[cut]
> Per quanto riguarda il "Local" lo avevo provato anch'io ottenendo
> sempre valori numerici virgolettati, ma probabilmente commettevo
> qualche altro errore da qualche altra parte.
probabilmente hai convertito le celle a testo prima di salvare.
La cosa bella del Local, invece, � che non devi convertire nulla, ma solo
impostare il tipo di file (nel mio caso xlText) e mettere Local a True e va
tutto liscio come quando si fa il salva con nome a manina...
> Bene, hai risolto il problema e sono felice per te.
Non hai idea di come mi si semplifica il lavoro: ogni mese almeno una
trentina di file da aprire, estrarre il totale, salvare in txt e quindi
uplodare in SAP... In questo modo la creazione del check file con le somme
dei vari file e dei txt � roba di pochi secondi, mentre prima il tempo era
variabile da mezz'ora ad un'ora, salvo interruzioni...
> Saluti
> Eliano
--
Ciao
Franz Verga da Berlino (che ora se ne va a nanna, perch� domani si
ricomincia...)
Notte Franz, dormi tranquillo.
Eliano.
P.S. Fammi sapere se la sostituzione del carattere non disturba il
malefico Sap, Grazie.
> Questa � esattamente la soluzione che mi serviva....
>
Bastava chiedere...
...e leggere la Guida... ;-)
Per il mio Franz(il destino nel nome)
pronto a tutto.
> Grazie Mauro!!!!
>
Grazie a te per il riscontro. 8-)
> Franz da Berlino (dove oggi � caduta la prima neve dell'inverno)
>
Piste da fondo?
Prendo gli sci e arrivo.
Metti in fresco la birra.
La pizza la porto io.
Per chi ha voglia di dare un'occhiata,
qui il file che ho utilizzato per l'esempio
in Excel:
http://www.maurogsc.eu/esemping/daexcelatext2.zip
--
---------------------------
Mauro Gamberini
http://www.riolab.org/
http://www.maurogsc.eu/
e io infatti ho chiesto... :-)
> ...e leggere la Guida... ;-)
Qui hai ragione... Io mi ero fidato del registratore di macro, che nel
SaveAs usa solo i parametri Filename, FileFormat e CreateBackup...
>
> Per il mio Franz(il destino nel nome)
> pronto a tutto.
ROTFL
> > Grazie Mauro!!!!
>
> Grazie a te per il riscontro. 8-)
LOL
> > Franz da Berlino (dove oggi è caduta la prima neve dell'inverno)
>
> Piste da fondo?
> Prendo gli sci e arrivo.
Niente più neve... Non è arrivata fino a sera
> Metti in fresco la birra.
Quella c'è sempre... ;-)
E cmq, basta metterla fuori dalla finestra, sul davanzale, ed in poco
tempo è fredda al punto giusto... ;-)
> La pizza la porto io.
No, che arriva fredda... Qui ci sono ottime pizzerie italiane vere...
Perché molte pizzerie che si spacciano per italiane poi in realtà sono
gestite da turchi...
--
Ciao
Franz da Berlino (dove stamattina c'era il sole ed ora è di nuovo
tutto grigio, cè vento e questa pioggerellina del piffero...)
Mamma mia....