Excel VBA For Next ciklus nem végzi el a műveletet a lista végén

Excel VBA For Next ciklus nem végzi el a műveletet a lista végén
2021-12-30T23:17:37+01:00
2021-12-31T12:01:52+01:00
2022-10-15T21:20:39+02:00
amatore
Sziasztok,

Segítséget szeretnék kérni, hátha valaki már találkozott hasonló problémával és tudja a megoldást.
Több For Next ciklusom van, aminek a feladata az, hogy beszúrjon egy-egy sort bizonyos feltételek teljesülése esetén. A lista nem hosszú, max 300 sor, amit a ciklusnak vizsgálnia kell.
Ha léptetve futtatom a makrót (Step Into), akkor a ciklus az utolsó sorig hibátlanul elvégzi a feladatát. Ellenben, ha egyben futtatom le a makrót (Run Sub), akkor csak egy darabig végzi el a dolgát a ciklus, utána nem csinál semmit, nem érzékeli a feltételek teljesülését, és hibát sem jelez.
Napok óta szenvedek vele, de sajnos nem sikerült rájönnöm a megoldásra.
Bármilyen hasznos ötletet szívesen fogadok.
Előre is nagyon köszönöm

Üdv,
Mutasd a teljes hozzászólást!
Közben rájöttem a megoldásra: hátulról kell léptetni a ciklust, nem pedig elölről.
Üdv,
Mutasd a teljes hozzászólást!

  • Szia!

    példa excel, fals adatokkal nem tudsz feltenni, vagy a hibás kódot csak?
    Mutasd a teljes hozzászólást!
  • Sziasztok,
    Közben rájöttem, hogy ha léptetve futtatom, akkor se fut le végig.
    A probléma az, hogy csak az eredeti utolsó sorig végzi el a ciklus a műveletet, hiába deklarálom az utolsó sor értékét: lrow = lrow + 1 (azaz, minden egyes újabb beszúrt sorral emelkedik az utolsó sor értéke).
    Esetleg valami ötlet, hogy mit kell még máshogy csinálni?
    Köszönöm
    Üdv,
    Mutasd a teljes hozzászólást!
  • Szia,

    Sajnos a céges gépem van a fájl is és a makró is. Eléggé le van védve, arról nem tudok a fórumbe belépni, sem kimásolni onnan az adatokat. Begépelni a makrót meg hosszú idő, plusz az adatokat is.
    De közben írtam, hogy a probléma az, hogy az eredeti utolsó sorig végzi el a ciklus a műveletet, utána elegánsan kilép a ciklusból, hiába deklarálom az új utolsó sor értékét: lrow = lrow + 1.

    De, ha ennyi elég neked a probléma megfejtéséhez, akkor csak erre a ciklusra vonatkozó rész így néz ki:

    Dim i, lrow as integer
    For i = 3 to lrow
    On Error Resume Next
    If Cells(i, 1).value <> Cells((i-1), 1).value and Cells(i, 2).value <> "" and Cells(i, 2).value <> "ÖSSZESEN" then
    rows(i).entirerow.insert
    cells(i, 2).value = "ÖSSZESEN"
    cells(i, 1).value = cells((i-1), 1).value
    cells(i, 3).formulaR1C1 = "=sumif(R2C1:R[-1]C1,RC[3],R2C:R[-1]C)"
    i = i
    lrow = lrow + 1
    End if
    Next i

    Nagyon köszönöm
    Üdv,
    Mutasd a teljes hozzászólást!
  • Partnerenkénti összesítésről van szó, és értelemszerűen partnerenként nő a lista egy sorral a beszúrt összesítő soroknak köszönhetően.
    Mutasd a teljes hozzászólást!
  • Közben rájöttem a megoldásra: hátulról kell léptetni a ciklust, nem pedig elölről.
    Üdv,
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd