Condividi tramite

aiuto ciclo VBA excel

Anonimo
2014-04-02T17:22:46+00:00

eccomi di nuovo a richiedere un aiuto :-(

mi capita questo:

Private Sub prova()

Dim lriga As Long

Set shfoglio = ThisWorkbook.Worksheets("foglio1")

shfoglio.Activate

With shfoglio

lriga = .Range("A" & Rows.Count).End(xlUp).Row

For lng = 3 To lriga

If Cells(lng, 1) = variabile Then...............

.

.

Call prova2 ..............

.

.

End If

Next

End With

Set shfoglio = Nothing

End Sub

il problema è che non mi compie il ciclo ! praticamente non esegue il comando Next e si ferma alla riga 3 senza proseguire :-(

Se inibisco la chiamata alla sub prova2 il ciclo lo esegue.

premetto la sub prova2 lavora su un foglio diverso da quello ove è presente il ciclo in questione

Grazie ai buoni di cuore

taz

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

9 risposte

Ordina per: Più utili
  1. Anonimo
    2014-04-03T19:33:03+00:00

    Ciao Taz,

    la mia domanda si può inserire cicli dentro altri cicli in fogli diversi ?  mahh !

    Innanzitutto, non c'è alcun problema intrinseco nella nidificazione di uno o più cicli dentro un ciclo esterno. Questi cicli possono riferirsi a diversi intervalli, diversi fogli o diverse cartelle di lavoro. A scopo di dimostrazione (ma senza qualunque altro valore) guarda:

    '=============>>

    Option Explicit

    '------------>>

    Public Sub Demo()

        Dim SH As Worksheet

        Dim SH2 As Worksheet

        Dim Rng As Range, Rng2 As Range

        Dim i As Long, b As Long, c As Long, d As Long

        With ThisWorkbook

            Set SH = .Sheets("Foglio1")

            Set SH2 = .Sheets("Foglio2")

        End With

        Set Rng = SH.Range("A1:A10")

        Set Rng2 = SH2.Range("A1:A20")

        With Rng

            For i = 1 To Rng.Cells.Count

                For b = 1 To Rng2.Cells.Count

                    SH2.Cells(b, 2).Value = Rng.Cells(i).Value * b

                Next b

            Next i

        End With

    End Sub

    '<<=============

    in pratica ho inserito un ciclo   del foglio CONTO_ADD dentro un ciclo del foglio   APPOGGIO

    e mi dà errore di debug alla linea 

    URadd = .Range("A" & .Rows.Count).End(xlUp).Row

    Visto l'uso precedente di:

      With shCONTO_ADD

    io non anticiperei un errore qui, ma il codice non mostra come la variabile shCONTO_ADD sia stata dichiarata o inizializzata. In ogni caso, sarebbe opportuno indicare il numero del messaggio di errore e l'errore che ti incontrano.

            shCONTO_ADD.Activate

    Non penso questa istruzione sia utile e io ti consiglio di eliminarla.

                    shCONTO_ADD = Nothing   

    Penso questa istruzione debba essere eliminata; in caso contrario dovrebbe essere:

                     Set shCONTO_ADD = Nothing  

                    .Range("P" & RIGAapp) = CDbl(subsala)

                    .Range("Q" & RIGAapp) = CDbl(subbar)

                    .Range("R" & RIGAapp) = CDbl(subservizi)

             Exit For

    Come il codice è stato scritto, questa ultima istruzione causerà la procedura di terminarsi alla fine del primo ciclo esterno! Se tua intenzione  è quella di uscire dalla procedura in risposta ad una data condizione, dove si trova questa condizione?

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2014-04-03T16:36:35+00:00

    Ciao Norman

    forse ho capito il perchè:

    inserisco parte del codice ( la parte precedente la ho tralasciata perchè troppo lunga )

    With shAPPOGGIO

        LRapp = .Range("A" & .Rows.Count).End(xlUp).Row

        For RIGAapp = 4 To LRapp

        IDconto = CInt(.Range("A" & RIGAapp))

        DT_SC = CDate(.Range("I" & RIGAapp))

            shCONTO_ADD.Activate

                    With shCONTO_ADD

            subsala = 0

            subbar = 0

            subservizi = 0

            URadd = .Range("A" & .Rows.Count).End(xlUp).Row

            For RIGAadd = 4 To URadd

            If .Range("A" & RIGAadd) = IDconto And .Range("B" & RIGAadd) = DT_SC Then

                              Select Case vreparto

                                Case "1-SALA"

                                subsala = subsala + .Range("F" & RIGAadd)

                                Case "2-BAR"

                                subbar = subbar + .Range("F" & RIGAadd)

                                Case "3-SERVIZI"

                                subservizi = subservizi + .Range("F" & RIGAadd)

                            End Select

                            Exit For

                        End If

                    Next

                    End With

                    shCONTO_ADD = Nothing

                    .Range("P" & RIGAapp) = CDbl(subsala)

                    .Range("Q" & RIGAapp) = CDbl(subbar)

                    .Range("R" & RIGAapp) = CDbl(subservizi)

                Exit For

                Next

                End With

    ================

    in pratica ho inserito un ciclo   del foglio CONTO_ADD dentro un ciclo del foglio   APPOGGIO

    e mi dà errore di debug alla linea

    URadd = .Range("A" & .Rows.Count).End(xlUp).Row

    la mia domanda si può inserire cicli dentro altri cicli in fogli diversi ?  mahh !

    Taz

    End If

    End Sub

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2014-04-03T05:58:05+00:00

    Ciao mauro

    hai ragione  è poco comprensibile ma l'ho ristretto per non essere troppo confusionario

    in pratica:

    nella sub prova prendo dei valori da foglio1 e li memorizzo in varie variabili dichiarate in option explicit

    con la sub prova2

    con queste variabili vado a cercare dei valori in foglio 2 e li memorizzo in altre variabili (di prova2)

    chiusa la sub prova2 e quindi ritornardo nel ciclo della sub prova prendo i valori e li elaboro

    fatto questo dovrei passare alla riga successiva ma il ciclo si ferma

    Non ho idea del perchè

    Taz

    Ciao Taz,

    Non ho capito un granché neanche io, ma come una spinta, guarda:

    '==========>>

    Option Explicit

    '---------->>

    Public Sub Prova()

        Dim WB As Workbook

        Dim shFoglio As Worksheet

        Dim lng As Long

        Dim lriga As Long

        Dim aVal As Variant

        Const myValue = 5

        Set WB = ThisWorkbook

        Set shFoglio = WB.Worksheets("Foglio1")

        'shFoglio.Activate      '\Attivare il foglio NON e' necessario!

        With shFoglio

            lriga = .Range("A" & Rows.Count).End(xlUp).Row

            For lng = 3 To lriga

                With .Cells(lng, 1)

                    If .Value  >= myValue Then

                        .Offset(0, 1).Value = Prova2(.Item(1), lng)

                    End If

                End With

            Next lng

        End With

    End Sub

    '---------->>

    Public Function Prova2(Rng As Range, RowNumber As Long)

        Dim SH As Worksheet

        Set SH = Rng.Parent.Next

        With SH

                If RowNumber Mod 2 Then

                        Prova2 = .Range(Rng.Address).Value

                    Else

                        Prova2 = .Range(Rng.Address).Offset(0, 1).Value

                    End If

        End With

    End Function

    '<<==========

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2014-04-02T18:17:44+00:00

    Ciao mauro

    hai ragione  è poco comprensibile ma l'ho ristretto per non essere troppo confusionario

    in pratica:

    nella sub prova prendo dei valori da foglio1 e li memorizzo in varie variabili dichiarate in option explicit

    con la sub prova2

    con queste variabili vado a cercare dei valori in foglio 2 e li memorizzo in altre variabili (di prova2)

    chiusa la sub prova2 e quindi ritornardo nel ciclo della sub prova prendo i valori e li elaboro

    fatto questo dovrei passare alla riga successiva ma il ciclo si ferma

    Non ho idea del perchè

    Taz

    La risposta è stata utile?

    0 commenti Nessun commento
  5. Anonimo
    2014-04-02T17:37:42+00:00

    <cut>

    Grazie ai buoni di cuore

    taz 

    Capito poco.

    Il codice che vedo, non è proprio comprensibile...

    Intanto, variabile cosa è, da dove salta fuori? Io non vedo nulla con quel nome nelle dichiarazioni delle variabili. Inoltre, cosa fa prova2 ? Fino a che il codice di prova2 non sarà tutto eseguito, il ciclo non proseguirà.

    Per favore, spiega a parole (molte parole) quello che vorrsti fare.

    Grazie.

    La risposta è stata utile?

    0 commenti Nessun commento