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]