Newsgroup: it.comp.lang.visual-basic
Titolo: Riposto il mio msg. AIUTOOOOOOOOO!!!!!!!!!!

Allora io ho 4 fogli excell contenuti nella stessa cartella.
I fogli si chiamano:
Foglio1
Pippo1
Pippo2
Pippo3.
in foglio1 ho tre record:
Pippo1        x        y        z         a        p
Pippo2        1        2        3        4        5
Pippo3        a        b        c        d        e
Ho creato una macro che:
1) mi conta il n° di record(nell'esempio sono tre ma in pratica potrebbero
anche essere di più);
2) mi copia il record che ha nella 1° colonna Pippo(n) nel foglio Pippo(n);
3) mi ordina il foglio Pippo(n) secondo un criterio che non è importante
sapere.
La macro me la sono già creata ed ho già fatto tutte le modifiche in visual
basic affinchè sia il più efficiente possibile.
Insomma la macro così come è descritta Funziona.
Il problema è:
Supponiamo che nel record 3 invece di :
Pippo3        a        b        c        d        e
ci sia:
Pippo4        a        b        c        d        e
mi viene generato il seguente errore:
(
Errore di run-time '9'
Indice non incluso nell'intervallo
)
Ovvio nell'intervallo di fogli non è incluso il foglio Pippo4...
Ok io voglio che quando viene generato tale errore mi si crei
automaticamente il foglio Pippo4 e il record n° 3 mi venga copiato
automaticamente nel nuovo foglio Pippo4. Ho modificato la mia macro nel
seguente modo:
For i = 1 To nRighe
    On Error GoTo GestioneErr
    Nome = Cartella1.Cells(i, 1)
        Range(Cartella1.Cells(i, 1), Cartella1.Cells(i, 6)).Cut
        Sheets(Nome).Select
        Range("A2").Activate
        Selection.Insert Shift:=xlDown
        Selection.Sort Key1:=Range("A2"), Order1:=xlAscending,
Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
        End If
GestioneErr:
    If Err.Number = 9 Then
        Excel.Worksheets.Add
        ActiveSheet.Name = Nome
        Range("A2").Activate
        Selection.Insert Shift:=xlDown
        Selection.Sort Key1:=Range("A2"), Order1:=xlAscending,
Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
    Err.Clear
    End If
    Next i
Ok funziona tutto come voglio tranne una cosa:
Supponiamo che io abbia 2 record differenti dal "normale" (nell'esempio ho
supposto che solo il record 3 fosse anomalo), quindi per esempio:
Pippo1        x        y        z         a        p
PippoA        1        2        3        4        5
Pippo4        a        b        c        d        e
ecco ciò che succede:
1° Ciclo
Tutto Ok copia l'intero record 1 nel foglio Pippo1;
2° Ciclo
Tutto Ok Crea il nuovo foglio PippoA e copia l'intero record 2 nel foglio
PippoA;
3° Ciclo
Quando il codice arriva all'istruzione Sheets(Nome).Select, si blocca e di
nuovo appare il messaggio di errore:
(
Errore di run-time '9'
Indice non incluso nell'intervallo
)
come se l'errore venisse gestito solo la prima volta dopodichè non viene più
gestito!!!
CHI DI VOI MI PUO' AIUTARE!!!!
Grazie 1000 anticipatamente e spero di essere stato chiaro.
Se volete potete rispondermi anche all'indirizzo 
carmi...@libero.it

 ha scritto nel messaggio
news:cMkm8.52170$1S3.1...@twister1.libero.it...


Scusa ma io non gestirei la cosa così, ma prima di andare avanti volevo
chiederti a quale if è associato il primo end if
In ogni caso io farei così:
sub mia_procedura()
 For i = 1 To nRighe
     On Error GoTo GestioneErr
         Nome = Cartella1.Cells(i, 1)
         Range(Cartella1.Cells(i, 1), Cartella1.Cells(i, 6)).Cut
         Sheets(Nome).Select
         Range("A2").Activate
         Selection.Insert Shift:=xlDown
         Selection.Sort Key1:=Range("A2"), Order1:=xlAscending,
Header:=xlGuess, _
         OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
  Next i
    exit sub
 GestioneErr:
     If Err.Number = 9 Then
         Excel.Worksheets.Add
         ActiveSheet.Name = Nome
     End If
    resume next
end sub