Alle 00:30, giovedì 19 gennaio 2006, Bart Aimar ha scritto:

Prova questa Bart:

Codice
Sub Che_Digerisce_Quasi_Tutto_e_Lo_Converte_In_Numeri() 
Dim a                   As String
Dim b                   As String
Dim c                   As String
Dim d                   AS String
Dim e                   As String
Dim f                   As String
Dim g                   As Integer
Dim Tipo                As Double
Dim Tipo2               As String
dim oFoglio     As Object
Dim oMycell     As Object
Dim oMyRange    As Object
Dim NumCol              As Integer
Set oFoglio = ThisComponent.Sheets.GetByName("Tabella1")'Il nome va cambiato 
con il nome del foglio
d = InputBox("Immettere la lettera della Colonna da convertire (es. 
A  )","Immissione dati")
e = InputBox("Immettere il numero della riga che inizia la colonna (es. 
4  )","Immissione dati")
f = InputBox("Immettere il numero della riga che Finisce la colonna (es. 
35  )","Immissione dati")
'Questa serie di input per poter determinare il range da convertire
a = d + e + ":" + d + f
oMyRange = oFoglio.getCellRangeByName(a).getRangeAddress()
NumCol = oMyRange.StartColumn ' definisce il numero della colonna
For g = Val(e) to Val(f) ' Inizia il ciclo 
        Tipo = oFoglio.getCellByPosition(NumCol, g - 1).Value
        Tipo2 = oFoglio.getCellByPosition(NumCol, g - 1).String  
        if Tipo <> 0 Then       ' Se è un numero si limita a formattare 
                                                'la cella
                oMycell = oFoglio.getCellRangeByName(d + LTrim(Str(g))) 
                oMycell.NumberFormat = 4 'Valore ##.##0,00
        Else ' Altrimenti fa una serie di controlli per determinare
                 ' che tipo di stringa è 
                 ' se trova dei caratteri di testo o delle celle vuote
                 ' salta alla cella dopo 
                Dim h As Integer
                Dim i As Integer
                Dim l As String
                h = Len(Tipo2)
                b = Mid(Tipo2,(H - 2), 1)
                Select Case b
                        Case  "." ' Se Ha un punto come separatore decimale
                                        ' si da per scontato che eventuali 
separatori
                                        ' migliaia sono virgole, perciò verrà 
                                        ' trasformata in numero e formattata la 
cella
                        oFoglio.getCellByPosition(NumCol, g - 
1).setValue(Val(Tipo2))
                        oMycell = oFoglio.getCellRangeByName(d + LTrim(Str(g)))
                        oMycell.NumberFormat = 4 
                        Case  ","' Se ha una virgola come separatore decimale
                                        ' la converte in punto e controlla se 
ci sono
                                        ' separatori delle migliaia come punti
                                        ' se ci sono li converte in virgole
                                        ' Tutte queste conversioni servono 
perchè
                                        ' la funsione Val() accetta punti per
                                        ' i decimali e virgole per le migliaia
                                Mid(Tipo2,(H - 2), 1 , ".")
                                If f > 6 Then 'Si può arrivare fini a 999.999,99
                                        c = Mid(Tipo2,(H - 6), 1)
                                        If c = "." Then Mid(Tipo2,(H - 6), 1 , 
",")                             
                                End IF
'                               If Len(Tipo2) > 9 Then ' Quì si può arrivare a 
999.999.999.99
'                                       Dim c As String
'                                               c = Mid(Tipo2,(H - 9), 1)
'                               If c = "." Then Mid(Tipo2,(H - 9), 1 , ",")     
                        
'                               End IF
                                oFoglio.getCellByPosition(NumCol, g - 
1).setValue(Val(Tipo2))
                                oMycell = oFoglio.getCellRangeByName(d + 
LTrim(Str(g)))
                                oMycell.NumberFormat = 4
                        Case  0 to 9 ' Se la terza posizione da destra non è ne 
un punto
                                                ' ne una virgola potrebbe 
essere una stringa che 
                                                ' rappresenta un numero intero
                                For i = 0 To h - 1 ' Questo ciclo controlla che 
non ci siano
                                                ' lettere in mezzo (potrebbe 
essere una sigla)
                                                'se ci sono salta alla label 
Continua: altrimenti 
                                        l = Str(Mid(Tipo2,(h - i), 1))
                                        If Val(l) = 0 Then GoTo Continua
                                Next
                                        c = Mid(Tipo2,(h - 3), 1)
                                        If c = "." Then Mid(Tipo2,(H - 3), 1 , 
",")' fa il solito
                                                'controllo del punto ecc. ecc.
                                        oFoglio.getCellByPosition(NumCol, g - 
1).setValue(Val(Tipo2))
                                        oMycell = oFoglio.getCellRangeByName(d 
+ LTrim(Str(g)))
                                        oMycell.NumberFormat = 4
                End Select
        End If
        Continua:
Next
end sub

Se riscontri qualche problema fammelo sapere
io l' ho provata e mi pare che funzioni

Volevo mandartela prima ma non riuscivo a trovare i numeri interni
che rappresentano le varie formattazioni delle celle.
Quello dopo oMycell.NumberFormat =
Dopo tanto peregrinare, a vuoto, in internet ho provato a registrare
una macro mentre formattavo una cella per vedere se fra tutte quelle
righe di codice saltava fuori il suddetto numero e così è stato

Se qualcuno si vuole divertire a catalogare questi numeri le linea sono:

dim args3(0) as new com.sun.star.beans.PropertyValue
args3(0).Name = "NumberFormatValue"
args3(0).Value = 103
 
A proposito il numero 103 è il Valuta  € ##0,00
Vi avverto devono essere un bel pò

Torniamo a noi 
Questa macro coverte in numero, logicamente, tutti i tipi di numero
anche scentifico
 Le stringhe che rappresentano un numero con due decimali( non con uno)
e senza decimali
Se trova una cella vuota sala a quella dopo
Se trova una stringa composta da lettere e numeri la salta

Comunque divertiti a capire il codice in parte commentato

Con questo ti saluto
Lido

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Rispondere a