Help!

PC-Problemen?
De vrijwilligers van Oplossing.be zoeken gratis met u mee!

Hulp bij posten

Recente topics

Auteur Topic: subscript valt buiten bereik  (gelezen 606 keer)

0 leden en 1 gast bekijken dit topic.

Offline Veerj

  • Ervaren lid
  • ***
  • Berichten: 303
Re: subscript valt buiten bereik
« Reactie #15 Gepost op: 26 november 2021, 18:51:01 »
 :thumbsup: En de debug regel stond op welke regel?

Offline BlackDevil

  • Oplosser
  • ****
  • Berichten: 537
  • Geslacht: Vrouw
  • Oplossing.be
Re: subscript valt buiten bereik
« Reactie #16 Gepost op: 26 november 2021, 19:00:50 »
@Veerj,

dat is het hem juist, ik kreeg enkel de melding dat de eigenschap/methode niet ondersteund werd maar verder geen aanwijzing waar.
en omdat die CountIf-methode het laatste was wat ik had toegevoegd ging ik ervan uit dat de fout daar zat  :-[

Dit is het het betreffende complete If-blokje :
If Application.CountIf(Columns(i + 3), zkart) = 0 Then
                  doelrij = Cells(Rows.Count, i + 2).End(xlUp).Row + 1
                  Cells(doelrij, i + 2) = dlaant
                  Cells(doelrij, i + 3) = zkart
                Else
                  doelrij = Columns(i + 3).Find(zkart, LookAt:=xlWhole).Row
                  Cells(doelrij, i + 2) = Cells(doelrij, i + 2) + dlaant
                End If

en de typfout bleek in volgend lijntje te zitten :
doelrij = Columns(i + 3).Find(zkart, LookAt:=xlWhole).Row
er stond "Fond" ipv "Find"  :-[


groetjes,
BlackDevil
Windows 10 Home / Intel(R) Core(TM) i3-3110M CPU@ 2.40GHz 2.40GHz / RAM : 8,00 GB (7,89 GB beschikbaar) / 64-bits besturingssysteem, x64-processor / Intel(R) 7 Series Chipset Family SATA AHCIController / Qualcomm Atheros AR8161 PCI-E Gigabit Ethernet Controller (NDIS 6.30) / Qualcomm Atheros AR9485 Wireless Network Adapter / HGST HTS541010A9E680 / Seagate Backup+ Hub 6TB / Seagate BUP Slim 2TB / Seagate Expansion Desk 5TB / HP OfficeJet 3831
Bullguard Premium Protection / Office Pro Plus 2016 NL

Offline Veerj

  • Ervaren lid
  • ***
  • Berichten: 303
Re: subscript valt buiten bereik
« Reactie #17 Gepost op: 26 november 2021, 19:02:30 »
Goed opgespoord! :)

Offline BlackDevil

  • Oplosser
  • ****
  • Berichten: 537
  • Geslacht: Vrouw
  • Oplossing.be
Re: subscript valt buiten bereik
« Reactie #18 Gepost op: 28 november 2021, 13:45:11 »
Goede namiddag allemaal,

De laatste twee dagen ben ik hoofdzakelijk bezig geweest om de macro dusdanig aan te passen zodat ik het volledig gedetailleerd resultaat, zoals gewenst, zou verkrijgen.
Uiteindelijk heb ik de macro terug van nul in elkaar geknutseld, ditmaal in een module, en ik krijg het gewenste resultaat. Dus op zich doet de macro wat ik ervan verwacht en zijn er dus geen fouten/problemen. Hij is echter wel opgebouwd in meerdere afzonderlijke onderdelen waardoor de code gigantisch lang is (qua aantal lijntjes) met soms herhalende code-blokjes.

Ondanks dat ik het afgelopen jaar al hťťl wat heb bijgeleerd blijft mijn kennis-niveau nog steeds behoorlijk laag  :(. Daarom zou ik bij wijze van Ďbijlerení nu graag willen proberen om de verschillende onderdelen zoveel mogelijk samen te voegen en eventueel gebruik te maken van verspringingen tussen diverse punten binnen de macro om deze dan (qua aantal lijntjes) in te korten.

Alleen weet ik niet goed (door mijn beperkte kennis) of dit enerzijds met deze macro mogelijk is en anderzijds, als het mogelijk is, hoe ik dit dan moet aanpakken.

Dus indien de kenners onder jullie tijd/zin moesten hebben om mij hieromtrent tips/raad/richtlijnen/hulp te bieden dan zou ik dat ten zeerste appreciŽren. ;)
De macro zit achter de opdrachtknop Ďbestelí op werkblad ďbestellingĒ.

Alvast mijn oprechte dank.

groetjes,
BlackDevil

Windows 10 Home / Intel(R) Core(TM) i3-3110M CPU@ 2.40GHz 2.40GHz / RAM : 8,00 GB (7,89 GB beschikbaar) / 64-bits besturingssysteem, x64-processor / Intel(R) 7 Series Chipset Family SATA AHCIController / Qualcomm Atheros AR8161 PCI-E Gigabit Ethernet Controller (NDIS 6.30) / Qualcomm Atheros AR9485 Wireless Network Adapter / HGST HTS541010A9E680 / Seagate Backup+ Hub 6TB / Seagate BUP Slim 2TB / Seagate Expansion Desk 5TB / HP OfficeJet 3831
Bullguard Premium Protection / Office Pro Plus 2016 NL

Offline RedHead

  • Excel-Expert
  • Ambassadeur
  • *****
  • Berichten: 2.178
  • Geslacht: Man
  • Met Excel lukt 't wel.... (toch???)
Re: subscript valt buiten bereik
« Reactie #19 Gepost op: 28 november 2021, 16:29:46 »
Blackdevil, een hoop coderegels is gťťn probleem hoor. Een pakket als Office365 bestaat uit honderdduizenden (miljoenen?) regels. Dus die paar die jij nu toont, wordt een computer niet warm of koud van. Mijn mening is altijd dat wat werkt, dat werkt!
En als je nu meer gaat samenvoegen, kom je al gauw uit op het gebruik van Array's of Dictionaries. Zo lang de snelheid van het verwerken OK is, zou ik me er niet zoveel zorgen om maken. Maar goed, dat is mijn bescheiden mening.

Ik heb je code wel bekeken, maar zie daar persoonlijk niet zoveel heil in om dat te herschrijven (mede omdat jij exact weet wat het moet doen en dat voor mij als leek een groot raadsel is).
Wat je nog wťl zou kunnen doen, is iets meer gebruik maken van commentaar in je code. Je zal niet de 1e zijn die iets moois maakt en het allemaal prima kan volgen. Totdat je een jaartje verder bent en aanpassingen wilt maken. Dan zit je van "o ja... wat deed ik daar ook al weer?"

Succes met het vergrootten van je kennis.
______________________________

Groet, Leo

Offline BlackDevil

  • Oplosser
  • ****
  • Berichten: 537
  • Geslacht: Vrouw
  • Oplossing.be
Re: subscript valt buiten bereik
« Reactie #20 Gepost op: 28 november 2021, 16:37:09 »
@RedHead,

Bedankt voor je reactie  ;).
En ja, op zich hoeft voor mij die code niet perse korter ofzo, zoals je zegt, het werkt en het is een relatief korte macro  ;D.

Het was dan ook maar puur om mijn kennis uit te breiden dat ik het wou proberen en dan is het vergroten van mijn kennis meer gericht op toekomstige projecten die veel uitgebreider en complexer zijn.

Wat je tip mbt nog uitgebreidere commentaar betreft zal ik er zeker rekening mee houden om er nog iets meer detail-info in te vermelden.  :thumbsup:


groetjes,
BlackDevil
Windows 10 Home / Intel(R) Core(TM) i3-3110M CPU@ 2.40GHz 2.40GHz / RAM : 8,00 GB (7,89 GB beschikbaar) / 64-bits besturingssysteem, x64-processor / Intel(R) 7 Series Chipset Family SATA AHCIController / Qualcomm Atheros AR8161 PCI-E Gigabit Ethernet Controller (NDIS 6.30) / Qualcomm Atheros AR9485 Wireless Network Adapter / HGST HTS541010A9E680 / Seagate Backup+ Hub 6TB / Seagate BUP Slim 2TB / Seagate Expansion Desk 5TB / HP OfficeJet 3831
Bullguard Premium Protection / Office Pro Plus 2016 NL

Offline MollyVH

  • Volledig lid
  • **
  • Berichten: 125
  • Hey, ik ben nieuw hier !
Re: subscript valt buiten bereik
« Reactie #21 Gepost op: 30 november 2021, 15:01:36 »
Hallo BlackDevil,

Laat me er eerst en vooral op wijzen dat ik volledig akkoord ben met de opvatting van RedHead.
Maar aangezien je benadrukt dat het jou hier vooral gaat over extra kennis opdoen toch een kleine aanpassing. Ik heb het bij die ene, namelijk de meest in het oog springende code-herhalingen, gelaten, zodanig dat je makkelijkst het principe kan doorgronden.
In jouw code heb je vanaf regel 71 dus 6 maal een gelijkaardige code staan. In mijn versie staat die er 1 maal in een aparte sub die 6 maal vanuit de 'hoofdsub' wordt aangeroepen. Het is dan uiteraard nodig de onderlinge verschillen als parameter mee te geven.
Verder heb ik dus niets aan de bestaande code gewijzigd.
Je zal hier geen tijdswinst mee boeken, maar je code is wel (wat uiteindelijk je vraag was) wat korter geworden. Het grootste voordeel is natuurlijk dat het eenvoudiger wordt om indien nodig achteraf wijzigingen aan te brengen.

Oeps, wat me plots te binnen schiet (maar ik ga dit bericht dus zo dadelijk wel plaatsen) is dat precies dezelfde kwestie al eens in een vorige vraag van jou aan bod is gekomen: https://www.oplossing.be/excel/switchen-tussen-macro's-met-overname-variabelen/

Mvg,
Molly

Sub orders()

Sheets("detail").Activate
Sheets("detail").Range("A2:O100").ClearContents

  '----- bestelling inlezen
  With Sheets("bestelling")
    bestelling = .Cells(Rows.Count, 1).End(xlUp).Row
    For best = 2 To bestelling
      art = .Cells(best, 1)
      aant = .Cells(best, 2)
      If aant <> "" Then
        '----- bestelling wegschrijven
        With Sheets("detail")
          '----- als hoofdbestelling
          hfdordr = .Cells(Rows.Count, 1).End(xlUp).Row + 1
          .Cells(hfdordr, 1) = aant
          .Cells(hfdordr, 2) = art
          '----- volgens aantal productieprocessen
          Select Case best
            '----- 1 productieproces
            Case 2 To 31
              pp1 = .Cells(Rows.Count, 4).End(xlUp).Row + 1
              .Cells(pp1, 4) = aant
              .Cells(pp1, 5) = art
            '----- 2 productieprocessen
            Case 32 To 47
              pp2 = .Cells(Rows.Count, 6).End(xlUp).Row + 1
              .Cells(pp2, 6) = aant
              .Cells(pp2, 7) = art
            '----- 3 productieprocessen
            Case 48 To 53
              pp3 = .Cells(Rows.Count, 8).End(xlUp).Row + 1
              .Cells(pp3, 8) = aant
              .Cells(pp3, 9) = art
            '----- 4 productieprocessen
            Case 54 To 57
              pp4 = .Cells(Rows.Count, 10).End(xlUp).Row + 1
              .Cells(pp4, 10) = aant
              .Cells(pp4, 11) = art
          End Select
        End With
      End If
    Next best
  End With
  With Sheets("detail")
    For subordr = 1 To 3
      '----- bepalen welke kolommen ingelezen moeten worden adhv lus-nr voor verdere verdeling suborders met >1 productieproces
      Select Case subordr
        '----- orders met 4 productieprocessen
        Case 1
          kol = 11
        '----- orders met 3 productieprocessen
        Case 2
          kol = 9
        '----- orders met 2 productieprocessen
        Case 3
          kol = 7
      End Select
      '----- orders inlezen volgens huidig lus-nr
      ordr = .Cells(Rows.Count, kol).End(xlUp).Row
      For so = 2 To ordr
        soaant = .Cells(so, kol - 1)
        soart = .Cells(so, kol)
        With Sheets("prodovrzcht")
          zoekrij = .Columns(1).Find(soart, LookIn:=xlValues, LookAt:=xlWhole).Row
          Select Case zoekrij
            '----- orders met 4 productieprocessen
            Case 55 To 58
              '----- ingredienten 4e pp
              For zoekkol = 50 To 52
                detail_aanvullen zoekrij, zoekkol, 8, soaant
              Next zoekkol
              '----- ingrediŽnten 3e pp
              For zoekkol = 45 To 49
                detail_aanvullen zoekrij, zoekkol, 6, soaant
              Next zoekkol
              '----- ingrediŽnten 2e pp
              For zoekkol = 33 To 44
                detail_aanvullen zoekrij, zoekkol, 4, soaant
              Next zoekkol
            '----- orders met 3 productieprocessen
            Case 49 To 54
              '----- ingrediŽnten 3e pp
              For zoekkol = 45 To 49
                detail_aanvullen zoekrij, zoekkol, 6, soaant
              Next zoekkol
              '----- ingrediŽnten 2e pp
              For zoekkol = 33 To 44
                detail_aanvullen zoekrij, zoekkol, 4, soaant
              Next zoekkol
            '----- orders met 2 productieprocessen
            Case 33 To 48
              '----- ingrediŽnten 2e pp
              For zoekkol = 33 To 44
                detail_aanvullen zoekrij, zoekkol, 4, soaant
              Next zoekkol
          End Select
        End With
      Next so
    Next subordr
    '----- ingrediŽnten 1 pp voor alle orders
    For i = 4 To 10 Step 2
      rijen = .Cells(Rows.Count, i).End(xlUp).Row
      For rij = 2 To rijen
        bronaant = .Cells(rij, i)
        bronart = .Cells(rij, i + 1)
        With Sheets("prodovrzcht")
          zkrij = .Columns(1).Find(bronart, LookIn:=xlValues, LookAt:=xlWhole).Row
          For zkkol = 2 To 32
            If .Cells(zkrij, zkkol) <> "" Then
              zoekaant = .Cells(zkrij, zkkol)
              zoekart = .Cells(2, zkkol)
              doelaant = zoekaant * bronaant
              If Application.CountIf(Sheets("detail").Columns("O"), zoekart) = 0 Then
                dlrij = Sheets("detail").Cells(Rows.Count, 14).End(xlUp).Row + 1
                Sheets("detail").Cells(dlrij, 14) = doelaant
                Sheets("detail").Cells(dlrij, 15) = zoekart
              Else
                dlrij = Sheets("detail").Columns("O").Find(zoekart, LookAt:=xlWhole).Row
                Sheets("detail").Cells(dlrij, 14) = Sheets("detail").Cells(dlrij, 14) + doelaant
              End If
            End If
          Next zkkol
        End With
      Next rij
    Next i
  End With
End Sub

Sub detail_aanvullen(zoekrij, zoekkol, tmp_kolom, soaant)

With Sheets("prodovrzcht")
    If .Cells(zoekrij, zoekkol) <> "" Then
        zkaant = .Cells(zoekrij, zoekkol)
        zkart = .Cells(2, zoekkol)
        dlaant = zkaant * soaant
        If Application.CountIf(Sheets("detail").Columns(tmp_kolom + 1), zkart) = 0 Then
            doelrij = Sheets("detail").Cells(Rows.Count, tmp_kolom).End(xlUp).Row + 1
            Sheets("detail").Cells(doelrij, tmp_kolom) = dlaant
            Sheets("detail").Cells(doelrij, tmp_kolom + 1) = zkart
        Else
            doelrij = Sheets("detail").Columns(tmp_kolom + 1).Find(zkart, LookAt:=xlWhole).Row
            Sheets("detail").Cells(doelrij, tmp_kolom) = Sheets("detail").Cells(doelrij, tmp_kolom) + dlaant
        End If
    End If
End With

End Sub

Offline BlackDevil

  • Oplosser
  • ****
  • Berichten: 537
  • Geslacht: Vrouw
  • Oplossing.be
Re: subscript valt buiten bereik
« Reactie #22 Gepost op: 30 november 2021, 16:16:06 »
Goedenavond MollyVH,

Hartelijk dank voor jouw bijdrage.
Het is inderdaad echt wel puur om bij te leren betreffende bepaalde handelingen.
Het gewoon switchen tussen subs heb ik al redelijk onder de knie, dat bewijst het eindresultaat van mijn complexe bastandje uit dat andere topic waarnaar je verwijst.

Maar omdat er hier, voor de herhalende verwerkings code, toch wel steeds andere parameters waren wist ik totaal niet hoe of wat.
Ik zal de komende dagen jouw bijdrage dan ook wat nader bestuderen om hier beter inzicht in te krijgen.

Dit zal me zeker helpen bij toekomstige projecten  :thumbsup: _/-\o_

groetjes,
BlackDevil
Windows 10 Home / Intel(R) Core(TM) i3-3110M CPU@ 2.40GHz 2.40GHz / RAM : 8,00 GB (7,89 GB beschikbaar) / 64-bits besturingssysteem, x64-processor / Intel(R) 7 Series Chipset Family SATA AHCIController / Qualcomm Atheros AR8161 PCI-E Gigabit Ethernet Controller (NDIS 6.30) / Qualcomm Atheros AR9485 Wireless Network Adapter / HGST HTS541010A9E680 / Seagate Backup+ Hub 6TB / Seagate BUP Slim 2TB / Seagate Expansion Desk 5TB / HP OfficeJet 3831
Bullguard Premium Protection / Office Pro Plus 2016 NL

 


www.combell.com