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]