Benvenuto Ospite Cerca | Topic Attivi | Utenti | | Log In | Registra

[Excel 2007] Spiegazione di 2 macro simili Opzioni
aetio
Inviato: Friday, May 20, 2011 11:44:22 AM

Rank: AiutAmico

Iscritto dal : 5/10/2010
Posts: 723
Ciao,
sto studiando i tuoi gioielli e vorrei capire il significato tecnico delle differenze scritte in un'istruzione, in 2 macro "quasi" identiche che mi avevi preparato:

la prima (più vecchia)
Sub Per_filtro()
With Sheets("TabPivot")
uriga = .Range("D" & Rows.Count).End(xlUp).Row
col = 3
col2 = 2
For i = 1 To 2
For n = 6 To uriga
If IsNumeric(.Cells(n, col)) And .Cells(n, col).Value > 0 Then
.Cells(n, col2).Value = .Cells(n, col)
Else
If .Cells(n, col) = "" Then
.Cells(n, col2).Value = .Cells(n - 1, col2)
End If
End If
Next n
col = 20
col2 = 19
Next i
End With
End Sub

la seconda (più recente, che ha sostituito la più vecchia)
Sub Per_filtro()
With Sheets("TabPivot")
uriga = .Range("D" & Rows.Count).End(xlUp).Row
col = 3
col2 = 2
For i = 1 To 2
For n = 6 To uriga
If IsNumeric(.Cells(n, col)) And .Cells(n, col).Value > 0 Then
.Cells(n, col2).Value = .Cells(n, col)
Else
If .Cells(n, col) = "" And .Cells(n, col + 1) <> "" Then
.Cells(n, col2).Value = .Cells(n - 1, col2)
End If
End If
Next n
col = 20
col2 = 19
Next i
End With
End Sub

Grazie assai e buona giornata
eZio
Sponsor
Inviato: Friday, May 20, 2011 11:44:22 AM

 
a10n11
Inviato: Friday, May 20, 2011 12:33:10 PM

Rank: AiutAmico

Iscritto dal : 5/29/2003
Posts: 1,694
aetio ha scritto:
Ciao,
sto studiando i tuoi gioielli e vorrei capire il significato tecnico delle differenze scritte in un'istruzione, in 2 macro "quasi" identiche che mi avevi preparato:

la prima (più vecchia)

If .Cells(n, col) = "" Then


la seconda (più recente, che ha sostituito la più vecchia)

If .Cells(n, col) = "" And .Cells(n, col + 1) <> "" Then


salve
non ricordo più per quale occasione siano state fatte le macro.
Nella seconda è stato aggiunto un controllo in più
La prima controllava se la cella (n,Col) era vuota
la seconda aggiunge un ulteriore condizione. la parte del codice viene eseguito solo se
la Cella (N,col) è vuota e contemporanemanete la cella della colonna successiva è piena

saluti
Giap


aetio
Inviato: Friday, May 20, 2011 2:14:35 PM

Rank: AiutAmico

Iscritto dal : 5/10/2010
Posts: 723
Ciao,
mi avevi preparato le macro per scrivere in tutte le righe di col.B i valori di col.C, che nella tabella Pivot è scritta solo in capo al nuovo codice preso in esame.



(Nota: ho adattato la macro originale modificando l'istruzione
uriga = .Range("D" & Rows.Count).End(xlUp).Row
in
uriga = .Range("C" & Rows.Count).End(xlUp).Row
dato che la mia tabella inizia da col.C)



Ho chiesto "lumi" sul significato esatto delle due istruzioni evidenziate, che avevo intuito erano riferite a quello che mi hai spiegato, perché nonostante questo continua a comportarsi in modo strano:

Se facesse tutto correttamente eseguendo l'istruzione scritta, il risultato finale dovrebbe essere questo



scriverebbe cioè il 10 fino all'ultima riga scritta della col.D della tabella [ And .Cells(n, col + 1) <> "" ]
invece continua ad essere questo



scrive il 10 fino alla riga del 10 di col.C e poi basta... come se la seconda parte dell'istruzione scritta in rosso non venisse presa in considerazione...
Perché avviene questo? La macro lavora sulla tabella Pivot già compilata o lavora a monte, collegandosi direttamente alla macro che scrive la tabella Pivot? Secondo me è la prima ipotesi, perché non sono contenute nel testo della Sub Per_filtro coordinate di riferimento ad altre macro...
Grazie assai e buon pomeriggio,
eZio
aetio
Inviato: Friday, May 20, 2011 3:17:46 PM

Rank: AiutAmico

Iscritto dal : 5/10/2010
Posts: 723
Ciao,
ho provato a rimettere l'istruzione
uriga = .Range("D" & Rows.Count).End(xlUp).Row
e la macro scrive tutto... perché se la tabella inizia da col.C??
Forse l'istruzione dà la coordinata della colonna di riferimento che fà da "centro gravitazionale" (appunto la col.D...) e non si riferisce a tutta la tabella?

cosa qui- stavolta- NON ha capito la megalitica cippa?? :)))
Grazie assai anche per la pazienza nel seguire passo-passo questa "capa de coccio...."
buon pomeriggio,
eZio
a10n11
Inviato: Friday, May 20, 2011 6:05:25 PM

Rank: AiutAmico

Iscritto dal : 5/29/2003
Posts: 1,694
salve
se ti ricordi abbiamo gia parlato dell'istruzione End(xldown).
la macro usa questa istruzione puntando alla colonna D e non alla colonna C per determinare il valore della Variabile
Uriga (Ultima riga) perchè è l'unica colonna tabella intera senza celle vuote in mezzo.
se avessi optato per la colonna C Uriga avrebbe assunto il valore della prima cella occupata dopo quelle vuote e lì si sarebbe fermato.
saluti
Giap


aetio
Inviato: Friday, May 20, 2011 6:54:45 PM

Rank: AiutAmico

Iscritto dal : 5/10/2010
Posts: 723
Ciao,
Grazie dell'approfondimento... hai ragione: me lo avevi già detto; infatti strada facendo me ne sono ricordato ed ho corretto il mio strafalcione.
Grazie assai, e buon fine settimana
eZio
Utenti presenti in questo topic
Guest


Salta al Forum
Aggiunta nuovi Topic disabilitata in questo forum.
Risposte disabilitate in questo forum.
Eliminazione tuoi Post disabilitata in questo forum.
Modifica dei tuoi post disabilitata in questo forum.
Creazione Sondaggi disabilitata in questo forum.
Voto ai sondaggi disabilitato in questo forum.

Main Forum RSS : RSS

Aiutamici Theme
Powered by Yet Another Forum.net versione 1.9.1.8 (NET v2.0) - 3/29/2008
Copyright © 2003-2008 Yet Another Forum.net. All rights reserved.