Condividi:        

[Excell 2003 SP2] formato cella dopo esecuzione macro in VBA

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

[Excell 2003 SP2] formato cella dopo esecuzione macro in VBA

Postdi mafo » 05/03/07 11:11

Salve a tutti,
avrei un piccolo problemino con excell-VBA:

Ho creato una macro per modificare dei dati importati da una tabella (altro software).

Tale macro trasforma, nei valori delle celle, i punti in virgola per avere il valore numerico e non testo.

Il problema è che al termine della macro, mi viene sempre restituito del testo (pur trovando su Formato celle, proprietà, Numero!), evidenziato da un piccolo triangolino verde in alto a sx della cella, dove un menu a tendina mi permette di riconvertire Testo--> Numero.

io vorrei riuscire ad eseguire questa conversione con del codice!

grazie in anticipo per l'attenzione
ciao
mafo
Utente Junior
 
Post: 26
Iscritto il: 09/05/06 14:18

Sponsor
 

Postdi Anthony47 » 05/03/07 14:23

Ciao mafo,
puoi pubblicare le istruzioni che hai utilizzato per l’ operazione descritta, cosi' vediamo come modificare?
Avatar utente
Anthony47
Moderatore
 
Post: 19223
Iscritto il: 21/03/06 16:03
Località: Ivrea

Postdi mafo » 07/03/07 15:46

Codice: Seleziona tutto
Private Sub CmB2_NuovoFormato_Click()
    '***** Seleziona colonne inutili
    Range("A:A,C:C,D:D,F:F,G:G,H:H,I:I").Select
    Range("I1").Activate
    '***** Cancella colonne inutili e avvicina le restanti
    Selection.Delete Shift:=xlToLeft
    '***** Seleziona 2 colonne restanti e dimensiona la larghezza
    Columns("A:B").Select
    Columns("A:B").EntireColumn.AutoFit
    '***** Trova nella colonna B l'ultima cella piena
    For RigaI = 3 To 100
          If Cells(RigaI, 2).Value = 0 Then
                'msgbox(RigaI)
                Exit For
          End If
    Next RigaI
    For I = 3 To (RigaI - 1)
        expression = Cells(I, 2).Value
        Cells(I, 2).Value = (CLng(expression) / 100)
        Cells(I, 2).NumberFormat = "0.00"
    Next I
    '***** Calcola il totale al fondo
    Cells(RigaI, 2).Formula = "=SUM(B3:B" & (RigaI - 1) & ")"
    Cells(RigaI, 1).Value = "Total"
    '***** Si posiziona in A1
    Range("A1").Select
    'Exit da UF1
    Unload Me
End Sub



Ciao Anthony47,
alla fine ho dovuto introdurre
Codice: Seleziona tutto
CLng
per eliminare il mio problema. Continuo cmq a non capire come mai se faccio tutte le operazioni in sequenza manualmente, ottengo celle con valore numerici; se invece registro la macro e la lancio (come sopra), mi restituisce celle con valore testuale, inutilizzabili per i calcoli, se non utilizzo CLng

ps: i dati da convertire sono tipo:

x Y
pippo 100.00
pluto 20.00
....... .........

ed il problema sta in 100.00 e 20.00

ciao
mafo
Utente Junior
 
Post: 26
Iscritto il: 09/05/06 14:18

Postdi Anthony47 » 07/03/07 19:02

Tutto e’ bene quel che finisce bene.
Non hai detto dove provavi a sostituire il “punto” con la “virgola”; forse facevi
Codice: Seleziona tutto
Replace(Cells(I, 2).Value, ".", ",")
??
Se era cosi’, era proprio il Replace che danneggiava l’ output, perche’ Replace come std genera una stringa, non un valore; per contro la sola Cells(I, 2).Value avrebbe restituito un valore numerico, se come input aveva es 100.00
Un altro sistema, largamente raccomandabile, e’ quello di usare dim per definire il tipo di dati che una variabile dovrebbe contenere. Ad esempio
Codice: Seleziona tutto
Dim expression As Double
prima di
Codice: Seleziona tutto
expression = Cells(I, 2).Value


Comunque lo stesso problema ce l’ hai facendo su excel
Codice: Seleziona tutto
=SOSTITUISCI(A5;".";",")
(es se A5=100.00, restituisce la stringa 100,00; prova a formattare per avere 3 decimali e ne avrai conferma).

Infine, per confondere vieppiu’, anche se una macro o una formula ti restituisce un numero in formato stringa quella cella E’ UTILIZZABILE per calcoli successivi; ad esempio
Codice: Seleziona tutto
=SOSTITUISCI(A5;".";",")+0
restituisce, nell’ esempio fatto prima, il “numero” 100.

Ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19223
Iscritto il: 21/03/06 16:03
Località: Ivrea

Postdi mafo » 08/03/07 08:30

.... la strada che ho trovato era un po più contorta!!!

cmq, non ci "confondi" mai con i tuoi esempi, anzi...
il bello di questi "piccoli programmini" stà proprio nel provare, provare, provare, fino a trovare soluzioni!

la nostra fortuna è che quando noi non ci arriviamo da soli, ci siete voi del forum che ci date una mano.

grazie.
mafo
Utente Junior
 
Post: 26
Iscritto il: 09/05/06 14:18


Torna a Applicazioni Office Windows


Topic correlati a "[Excell 2003 SP2] formato cella dopo esecuzione macro in VBA":


Chi c’è in linea

Visitano il forum: Nessuno e 53 ospiti