Condividi tramite

Anomalia ciclo For: il ciclo non viene completato

Anonimo
2024-02-09T07:14:46+00:00

Ciao,

sto riscontrando un problema in una macro VBA per Excel.

In particolare ho un normalissimo ciclo For che non scorre tutti i valori dell'indice e quindi non arriva al valore massimo impostato, si ferma ed esce prima dal ciclo, il tutto senza visualizzare alcun tipo di errore, come se la macro venisse eseguita senza problemi.

Se taglio ed incollo il codice del ciclo For, senza alcuna modifica, e lo incollo in una parte di codice precedente, funziona perfettamente.

C'è qualche limite di cicli, di codice, o qualsiasi settaggio, che può creare questo tipo di problemi?
Quale potrebbe essere la causa di questa anomalia?

Grazie mille a tutti

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

6 risposte

Ordina per: Più utili
  1. Anonimo
    2024-02-09T14:29:43+00:00

    Ho individuato il problema, anche se non capisco il motivo e quindi come risolvere.

    Sostanzialmente il problema è legato a come viene popolato l'array.

    Se l'array viene popolato con un normale ciclo For tutto funziona correttamente:

    For num_riga_array = 1 To num_colori
    matrice_bor(num_riga_array, 1) = Mid(Trim(Evaluate("libreria_colori!A" & num_riga_array)), 2, 3)
    matrice_bor(num_riga_array, 2) = Mid(Trim(Evaluate("libreria_colori!A" & num_riga_array + 1)), 2, 3)
    matrice_bor(num_riga_array, 3) = Trim(Evaluate("libreria_colori!B" & num_riga_array))
    Next num_riga_array

    In questo primo caso la variavile num_riga_array viene aumentata dal ciclo For.

    Se invece popolo l'array nel modo seguente, tutto smette di funzionare (anche se l'array è comunque popolato correttamente):

    num_riga_array = 1
    For num_riga_libreria = 2 To num_colori
    If Trim(Evaluate("libreria_colori!B" & num_riga_libreria)) = Replace(Trim(Evaluate("libreria_colori!B" & num_riga_libreria + 1)), " C/FILM", "") Then
    matrice_bor(num_riga_array, 1) = Mid(Trim(Evaluate("libreria_colori!A" & num_riga_libreria)), 2, 3)
    matrice_bor(num_riga_array, 2) = Mid(Trim(Evaluate("libreria_colori!A" & num_riga_libreria + 1)), 2, 3)
    matrice_bor(num_riga_array, 3) = Trim(Evaluate("libreria_colori!B" & num_riga_libreria))
    num_riga_array = num_riga_array + 1
    End If

    Next num_riga_libreria

    In poche parole nel secondo caso nella matrice_bor(num_riga_array, 1) la variabile num_riga_array non viene aumentata dal ciclo For ma dalla formula num_riga_array = num_riga_array + 1.

    Così facendo l'array è correttamente popolato, ma non capisco il motivo nei cicli For successivi si generano i problemi che ho descritto sopra.

    Quale è la causa? Come posso risolvere?

    Grazie

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Eleuterio Tedeschi 18,590 Punti di reputazione Moderatore volontario
    2024-02-09T09:06:07+00:00

    La parte di codice che non viene completato è il seguente:

    For indice = 30 To 49
    For num_riga_array = 1 To num_colori
    If matrice_bor(num_riga_array, indice) <> 0 Then

      End If  
    

    Next num_riga_array
    Next indice

    Si tratta di due cicli annidati che servono per verificare tutti i valori presenti nell'array matrice_bor e ovviamente num_colori corrisponde al numero di righe salvate nell'array.

    Se inserisco un Msgbox per visualizzare i valori per esempio della variabile indice mi accorgo che si ferma al 30 (invece di arrivare a 49) mentre num_riga_array si ferma a 454, a volte 460, altre 451.

    Se prendo il codice identico e lo sposto in un punto precedente della macro, funziona.

    Più arretro nel codice più i cicli vengono completati.

    Dentro la condizione If per il momento non c'è codice, è vuota come riportato sopra.
    Non ci sono punti in cui le variabili indice e num_riga_array vengano modificati se non in questi due cicli.

    Essendo legato a quella matrice, avrei bisogno del file, puoi semplificarlo togliendo dati sensibili e condividerlo con OneDrive?

    Grazie.

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2024-02-09T07:59:48+00:00

    In merito al debug, cosa intendi?
    Come devo effettuarlo e cosa dovrei verificare in particolare?

    Grazie mille

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2024-02-09T07:58:55+00:00

    La parte di codice che non viene completato è il seguente:

    For indice = 30 To 49

        For num\_riga\_array = 1 To num\_colori  
              
             If matrice\_bor(num\_riga\_array, indice) &lt;&gt; 0 Then               
               
            End If  
      
        Next num\_riga\_array  
      
    

    Next indice

    Si tratta di due cicli annidati che servono per verificare tutti i valori presenti nell'array matrice_bor e ovviamente num_colori corrisponde al numero di righe salvate nell'array.

    Se inserisco un Msgbox per visualizzare i valori per esempio della variabile indice mi accorgo che si ferma al 30 (invece di arrivare a 49) mentre num_riga_array si ferma a 454, a volte 460, altre 451.

    Se prendo il codice identico e lo sposto in un punto precedente della macro, funziona.

    Più arretro nel codice più i cicli vengono completati.

    Dentro la condizione If per il momento non c'è codice, è vuota come riportato sopra.
    Non ci sono punti in cui le variabili indice e num_riga_array vengano modificati se non in questi due cicli.

    La risposta è stata utile?

    0 commenti Nessun commento
  5. Eleuterio Tedeschi 18,590 Punti di reputazione Moderatore volontario
    2024-02-09T07:41:34+00:00

    Ciao,

    sto riscontrando un problema in una macro VBA per Excel.

    In particolare ho un normalissimo ciclo For che non scorre tutti i valori dell'indice e quindi non arriva al valore massimo impostato, si ferma ed esce prima dal ciclo, il tutto senza visualizzare alcun tipo di errore, come se la macro venisse eseguita senza problemi.

    Se taglio ed incollo il codice del ciclo For, senza alcuna modifica, e lo incollo in una parte di codice precedente, funziona perfettamente.

    C'è qualche limite di cicli, di codice, o qualsiasi settaggio, che può creare questo tipo di problemi?
    Quale potrebbe essere la causa di questa anomalia?

    Grazie mille a tutti

    Ottimo sarebbe poter avere il file di prova condiviso con OneDrive, ma almeno il codice che stai usando è indispensabile per pensare di poterti dare una risposta.

    Genericamente ti rispondo che non ci sono i limiti che ipotizzi, ma facendo il debug cosa rilevi?

    Ciao.

    La risposta è stata utile?

    0 commenti Nessun commento