PDA

View Full Version : [VB-Excel]


Nemok
27-10-2009, 15:26
Salve a tutti, sto lavorando un paio di macro per automatizzare l'elaborazione di report per lavoro.
Fondamentalmente nel report è presente una colonna contentente un elenco ordinato di codici contabili (con ripetizioni), e vorrei lavorare proprio su questa colonna per far si che dopo l'elaborazione il file risulti come nel seguente esempio:

- PRIMA:

1000
1000
1020
1025
1025
1025

- DOPO:

1000
1000
[riga vuota]
1020
[riga vuota]
1025
1025
1025

Il codice l'ho già scritto, ed è qualcosa del tipo.


iRiga = 1
iNumRigheVuote = 0
iColCC = 3 'indice della colonna contenente il codice contabile
Rows(iRiga).Select
sCodiceContabile = Cells(iRiga, iColCC).Value 'Upper case della ragione sociale (per evitare problemi nei confronti tra stringhe)

While iNumRigheVuote < 4

While Cells(ActiveCell.Row, iColCC) = sCodiceContabile
iNumRigheVuote = 0
iRiga = iRiga + 1
'Cells(iRiga, iColCC).Select
Rows(iRiga).Select
Wend

If Cells(iRiga, iColCC).Value <> "" Then
sCodiceContabile= Cells(iRiga, iColCC).Value
End If

Selection.Insert Shift:=xlDown
iRiga = iRiga + 1
Rows(iRiga).Select
iNumRigheVuote = iNumRigheVuote + 1

Wend
'Fine While iNumRigheVuote < 4


Tutto funziona, se non fosse che nel momento in cui modifica manualmente un codice contabile prima dell'elaborazione (magari per correggerlo), il codice modificato fa sballare i confronti tra stringhe. Tra l'altro se effettuo nuovamente l'ordinamento della colonna (funzione a->z di excel) la cella modificata va alla prima riga, ovvero perde la propria posizione. Ho provato anche a modificare le proprietà della colonna (formato celle), impostandola come "testo", o come "Generico", ma l'esito è sempre lo stesso, e la macro non raggruppa correttamente dunque...

Qualche suggerimento in merito?

zuper
27-10-2009, 17:06
nn si capisce molto bene la storia dei confronti.

puoi allegare il foglio?

MarcoGG
27-10-2009, 19:45
Fondamentalmente nel report è presente una colonna contentente un elenco ordinato di codici contabili (con ripetizioni), e vorrei lavorare proprio su questa colonna per far si che dopo l'elaborazione il file risulti come nel seguente esempio:

- PRIMA:

1000
1000
1020
1025
1025
1025

- DOPO:

1000
1000
[riga vuota]
1020
[riga vuota]
1025
1025
1025


Non ho esaminato il tuo codice, ma mi pare ce ne sia troppo per quel che deve fare. Per il discorso dell'inserimento righe vuote tra gruppi di valori uguali direi che basta questo ( esempio su colonna "A" ) :

Dim i As Long
i = 1
Do
If Range("A" & i).Text = "" Then Exit Do
If Range("A" & i).Text = Range("A" & (i + 1)).Text Then
i = i + 1
Else
Rows((i + 1) & ":" & (i + 1)).Insert Shift:=xlDown
i = i + 2
End If
Loop

Per il resto, cerca di essere più chiaro su cosa vuoi ottenere... ;)