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 1842 keer)

0 leden en 1 gast bekijken dit topic.

Offline BlackDevil

  • Ambassadeur
  • *****
  • Berichten: 1.029
  • Geslacht: Vrouw
  • veni vidi vici
subscript valt buiten bereik
« Gepost op: 26 november 2021, 09:15:35 »
Goedemorgen allen,

Ik loop al de hele ochtend (sinds 5u vanmorgen) tegen een hindernis aan bij het uitvoeren van mijn WERKBLAD-macro.

Mijn origineel code-blok werkte perfect en zag er als volgt uit :
For zoekkol = 2 To 32
            If .Cells(zoekrij, zoekkol) <> "" Then
              zkaant = .Cells(zoekrij, zoekkol)
              zkart = .Cells(2, zoekkol)
              dlaant = zkaant * braant
              doelrij = Cells(Rows.Count, 10).End(xlUp).Row + 1
              Cells(doelrij, 10) = dlaant
              Cells(doelrij, 11) = zkart
            End If
          Next zoekkol
Echter had ik dan het fenomeen dat wanneer het "zkart" meerdere keren voorkwam (met telkens een ander "dlaant") dit ook meerdere keren werd weggeschreven.
Bedoeling is echter dat in dat geval het "zkart" maar één keer voorkomt en dat het "dlaant" telkens word bijgeteld bij het reeds vermelde.

Ik probeer dus al een hele ochtend het code-blok dusdanig aan te passen maar ik krijg dan telkens de melding "subscript valt buiten bereik". 
For zoekkol = 2 To 32
            If .Cells(zoekrij, zoekkol) <> "" Then
              zkaant = .Cells(zoekrij, zoekkol)
              zkart = .Cells(2, zoekkol)
              dlaant = zkaant * braant
              doelrij = Cells(Rows.Count, 10).End(xlUp).Row + 1
              If doelrij >= 4 Then
                vind = Columns(11).Find(zkart, LookIn:=xlValues, LookAt:=Whole).Row
                If Cells(vind, 11) <> "" And Cells(vind, 11) = zkart Then
                  tmp = Cells(vind, 10)
                  Cells(vind, 10) = tmp + dlaant
                Else
                  Cells(doelrij, 10) = dlaant
                  Cells(doelrij, 11) = zkart
                End If
              End If
            End If
          Next zoekkol

Als ik 'stap voor stap' door de code loop geeft hij die foutmelding zodra ik het lijntje vind = Columns(11).Find(zkart, LookIn:=xlValues, LookAt:=Whole).Row wil laten verwerken.

Ik lijk de oorzaak maar niet te vinden....

Alvast dank voor tips/hulp...


groetjes,
BlackDevil
1) HP ProDesk (Windows 10 Pro Edu / Intel(R) Core(TM) i5-7500 CPU@ 3.40Ghz 3.41Ghz)
2) Laptop ASUS (Windows 10 Home / Intel(R) Core(TM) i3-3110M CPU@ 2.40GHz 2.40GHz)
Beide (RAM : 8,00 GB / 64-bits besturingssysteem, x64-processor)
Extern (Seagate Backup+ Hub 6TB / Seagate BUP Slim 2TB / Seagate Expansion Desk 5TB / HP ENVY 6030e)
Bullguard Premium Protection / Office Pro Plus 2016 NL

Offline MollyVH

  • Excel-Expert
  • Oplosser
  • *****
  • Berichten: 847
Re: subscript valt buiten bereik
« Reactie #1 Gepost op: 26 november 2021, 10:44:41 »
Dag BlackDevil,

Mijn uitgangspunt is zomaar dat de rest wel in orde is, maar daar valt zonder voorbeeld weinig zinvols over te vertellen.
Als dat zo is zal het enkel hieraan liggen: Whole is niet hetzelfde als xlWhole  :-X

Mvg,
Molly
Windows 11 Home NLD 64bit
11th Gen Intel(R) Core(TM) i7-11700 @ 2.50GHz 2496
Aspire TC-1660
Intel(R) UHD Graphics 750 1024MB
476 GB SSD KINGSTON OM8PCP3512F-AA
1863 GB HD Seagate ST2000DM008-2FR102
Office 2021 Professional Plus NLD 64bit

Offline BlackDevil

  • Ambassadeur
  • *****
  • Berichten: 1.029
  • Geslacht: Vrouw
  • veni vidi vici
Re: subscript valt buiten bereik
« Reactie #2 Gepost op: 26 november 2021, 11:15:22 »
***OPGELOST***

na nog wat puzzelen en testen heb ik de correcte structuur gevonden.
Dit is het uiteindelijk geworden :
For zoekkol = 2 To 32
            If .Cells(zoekrij, zoekkol) <> "" Then
              zkaant = .Cells(zoekrij, zoekkol)
              zkart = .Cells(2, zoekkol)
              doelrij = Cells(Rows.Count, 14).End(xlUp).Row + 1
              For vind = 4 To doelrij
                If Cells(vind, 15) = zkart Then
                  Cells(vind, 14) = Cells(vind, 14) + (zkaant * braant)
                Else
                  Cells(doelrij, 14) = zkaant * braant
                  Cells(doelrij, 15) = zkart
                End If
              Next vind
            End If
          Next zoekkol

het werkt perfect nu  :thumbsup:

groetjes,
BlackDevil
1) HP ProDesk (Windows 10 Pro Edu / Intel(R) Core(TM) i5-7500 CPU@ 3.40Ghz 3.41Ghz)
2) Laptop ASUS (Windows 10 Home / Intel(R) Core(TM) i3-3110M CPU@ 2.40GHz 2.40GHz)
Beide (RAM : 8,00 GB / 64-bits besturingssysteem, x64-processor)
Extern (Seagate Backup+ Hub 6TB / Seagate BUP Slim 2TB / Seagate Expansion Desk 5TB / HP ENVY 6030e)
Bullguard Premium Protection / Office Pro Plus 2016 NL

Offline BlackDevil

  • Ambassadeur
  • *****
  • Berichten: 1.029
  • Geslacht: Vrouw
  • veni vidi vici
Re: subscript valt buiten bereik
« Reactie #3 Gepost op: 26 november 2021, 11:17:28 »
Dag BlackDevil,

Mijn uitgangspunt is zomaar dat de rest wel in orde is, maar daar valt zonder voorbeeld weinig zinvols over te vertellen.
Als dat zo is zal het enkel hieraan liggen: Whole is niet hetzelfde als xlWhole  :-X

Mvg,
Molly

Hey MollyVH,

oops... had de typfout niet eens opgemerkt  :-[
moest uiteraard xlWhole zijn...

Maar heb het helemaal anders opgelost gekregen ondertussen  :thumbsup:

groetjes,
BlackDevil
1) HP ProDesk (Windows 10 Pro Edu / Intel(R) Core(TM) i5-7500 CPU@ 3.40Ghz 3.41Ghz)
2) Laptop ASUS (Windows 10 Home / Intel(R) Core(TM) i3-3110M CPU@ 2.40GHz 2.40GHz)
Beide (RAM : 8,00 GB / 64-bits besturingssysteem, x64-processor)
Extern (Seagate Backup+ Hub 6TB / Seagate BUP Slim 2TB / Seagate Expansion Desk 5TB / HP ENVY 6030e)
Bullguard Premium Protection / Office Pro Plus 2016 NL

Offline BlackDevil

  • Ambassadeur
  • *****
  • Berichten: 1.029
  • Geslacht: Vrouw
  • veni vidi vici
Re: subscript valt buiten bereik
« Reactie #4 Gepost op: 26 november 2021, 11:46:14 »
***CORRECTIE***

De nieuwe structuur blijkt uiteindelijk dan toch niet te werken  :default_thumpdown:

Ik krijg nu wel geen foutmelding meer maar niet alleen blijft hij de "zkart" (die meermaals voorkomen met telkens een ander 'zkaant') meermaals vermelden, nu kloppen ook de 'zkaant' niet meer :-(..., die staan nu verdubbelt....

kzal het nog eventjes zelf proberen uit te zoeken en als ik er echt niet uitgeraak dan zal ik het bestandje aanhangen.

groetjes,
BlackDevil

1) HP ProDesk (Windows 10 Pro Edu / Intel(R) Core(TM) i5-7500 CPU@ 3.40Ghz 3.41Ghz)
2) Laptop ASUS (Windows 10 Home / Intel(R) Core(TM) i3-3110M CPU@ 2.40GHz 2.40GHz)
Beide (RAM : 8,00 GB / 64-bits besturingssysteem, x64-processor)
Extern (Seagate Backup+ Hub 6TB / Seagate BUP Slim 2TB / Seagate Expansion Desk 5TB / HP ENVY 6030e)
Bullguard Premium Protection / Office Pro Plus 2016 NL

Offline BlackDevil

  • Ambassadeur
  • *****
  • Berichten: 1.029
  • Geslacht: Vrouw
  • veni vidi vici
Re: subscript valt buiten bereik
« Reactie #5 Gepost op: 26 november 2021, 12:40:10 »
Goedemiddag allen,

Na een volledige ochtend en voormiddag puzzelen, testen, herstructureren, ...repeat... zie ik eventjes door de bomen het bos niet meer...
Ik heb dan de macro opnieuw naar de originele structuur gezet om vervolgens, met in bijlage het bestand, alsnog om hulp te vragen hier.

Het betreft de macro 'benodigd' die achter werkblad "smnvttng" (waar alle acties moeten plaatsvinden) zit.

Ik heb eventjes rechts op het werkblad (grijs gedeelte met rode tekst) enerzijds vermeld wat het resultaat is met de huidige macro en anderzijds wat het gewenste resultaat zou moeten zijn.
Mijn vraag slaat dus enkel op hoe de gegevens in de kolommen "N" en "O" vermeld dienen te worden.
De rest van de code doet wat het moet doen.

Alvast mijn oprechte dank voor tips/hulp...

groetjes,
BlackDevil
1) HP ProDesk (Windows 10 Pro Edu / Intel(R) Core(TM) i5-7500 CPU@ 3.40Ghz 3.41Ghz)
2) Laptop ASUS (Windows 10 Home / Intel(R) Core(TM) i3-3110M CPU@ 2.40GHz 2.40GHz)
Beide (RAM : 8,00 GB / 64-bits besturingssysteem, x64-processor)
Extern (Seagate Backup+ Hub 6TB / Seagate BUP Slim 2TB / Seagate Expansion Desk 5TB / HP ENVY 6030e)
Bullguard Premium Protection / Office Pro Plus 2016 NL

Offline MollyVH

  • Excel-Expert
  • Oplosser
  • *****
  • Berichten: 847
Re: subscript valt buiten bereik
« Reactie #6 Gepost op: 26 november 2021, 13:52:12 »
Hallo BlackDevil,

Ik zie jou in de ganse code ook geen enkele poging doen om te kijken of een product al in kolom O staat :(
Je bestaande code gaat over opzoekwerk en het daarna wegschrijven op de eerstvolgende lege rij.
Opdat je zo goed mogelijk zou kunnen volgen heb ik zoveel mogelijk van je code ongemoeid gelaten en een kleine uitbreiding ingelast voor die kolom O.

Mvg,
Molly

Sub benodigd()
For i = 1 To 11 Step 2
  bron = Cells(Rows.Count, i).End(xlUp).Row
  For b = 3 To bron
    braant = Cells(b, i)
    brart = Cells(b, i + 1)
    With Sheets("prodovrzcht")
      zoekrij = .Columns(1).Find(brart, LookIn:=xlValues, LookAt:=xlWhole).Row
      Select Case zoekrij
        Case 3 To 32
          For zoekkol = 2 To 32
            If .Cells(zoekrij, zoekkol) <> "" Then
              zkaant = .Cells(zoekrij, zoekkol)
              zkart = .Cells(2, zoekkol)
              dlaant = zkaant * braant
              If Application.CountIf(Columns("O"), zkart) = 0 Then
                  doelrij = Cells(Rows.Count, 14).End(xlUp).Row + 1
                  Cells(doelrij, 14) = dlaant
                  Cells(doelrij, 15) = zkart
              Else
                  doelrij = Columns("O").Find(zkart, LookAt:=xlWhole).Row
                  Cells(doelrij, 14) = Cells(doelrij, 14) + dlaant
              End If
            End If
          Next zoekkol
        Case Is > 32
          For zoekkol = 2 To 52
            If .Cells(zoekrij, zoekkol) <> "" Then
              zkaant = .Cells(zoekrij, zoekkol)
              zkart = .Cells(2, zoekkol)
              dlaant = zkaant * braant
              If zoekkol < 33 Then
                  If Application.CountIf(Columns("O"), zkart) = 0 Then
                      doelrij = Cells(Rows.Count, 14).End(xlUp).Row + 1
                      Cells(doelrij, 14) = dlaant
                      Cells(doelrij, 15) = zkart
                  Else
                      doelrij = Columns("O").Find(zkart, LookAt:=xlWhole).Row
                      Cells(doelrij, 14) = Cells(doelrij, 14) + dlaant
                  End If
              Else
                doelrij = Cells(Rows.Count, i + 2).End(xlUp).Row + 1
                Cells(doelrij, i + 2) = dlaant
                Cells(doelrij, i + 3) = zkart
              End If
            End If
          Next zoekkol
      End Select
    End With
  Next b
Next i
End Sub
Windows 11 Home NLD 64bit
11th Gen Intel(R) Core(TM) i7-11700 @ 2.50GHz 2496
Aspire TC-1660
Intel(R) UHD Graphics 750 1024MB
476 GB SSD KINGSTON OM8PCP3512F-AA
1863 GB HD Seagate ST2000DM008-2FR102
Office 2021 Professional Plus NLD 64bit

Offline BlackDevil

  • Ambassadeur
  • *****
  • Berichten: 1.029
  • Geslacht: Vrouw
  • veni vidi vici
Re: subscript valt buiten bereik
« Reactie #7 Gepost op: 26 november 2021, 14:41:18 »
Dag MollyVH,

Bedankt voor jouw aangereikte code  _/-\o_.

Ik zie jou in de ganse code ook geen enkele poging doen om te kijken of een product al in kolom O staat :(

Als je kijkt naar de bijgevoegde code in mijn eerste bericht (topicstart) en in reactie #2 zal je zien dat het net bij die pogingen
was (om te kijken of een bepaald product reeds in kolom O stond) dat het misliep. Heb buiten die twee codeblokken urenlang, talloze
manieren uitgeprobeerd om die controle in te voegen in mijn code maar kreeg nooit het gewenste resultaat zoals ik dan in mijn reactie #4
 en reactie #5 verduidelijkt heb.
Daarom had ik dan mijn macro opnieuw naar de oorspronkelijke code gebracht waarbij ik mijn pogingen dus terug verwijderd had om alzo
met een schone lei te kunnen verder gaan.

Ik had ondertussen, in afwachting van een betere oplossing, wel al het gewenste resultaat gekregen via een omweg (met hulpkolommen).
Maar omdat het werkblad zelf toch wel mooier oogt zonder die hulpkolommen en de code zelf ook 'properder' is zonder die extra omweg
ga ik nu jouw aangereikte code implementeren.

Nogmaals dank  _/-\o_ :thumbsup:

groetjes,
BlackDevil
1) HP ProDesk (Windows 10 Pro Edu / Intel(R) Core(TM) i5-7500 CPU@ 3.40Ghz 3.41Ghz)
2) Laptop ASUS (Windows 10 Home / Intel(R) Core(TM) i3-3110M CPU@ 2.40GHz 2.40GHz)
Beide (RAM : 8,00 GB / 64-bits besturingssysteem, x64-processor)
Extern (Seagate Backup+ Hub 6TB / Seagate BUP Slim 2TB / Seagate Expansion Desk 5TB / HP ENVY 6030e)
Bullguard Premium Protection / Office Pro Plus 2016 NL

Offline BlackDevil

  • Ambassadeur
  • *****
  • Berichten: 1.029
  • Geslacht: Vrouw
  • veni vidi vici
Re: subscript valt buiten bereik
« Reactie #8 Gepost op: 26 november 2021, 16:54:55 »
goedenavond allen,

Ik heb nog een klein vraagje....

Hoe kan je de "Application.CountIf(Columns()"-methode gebruiken als de te doorzoeken kolom afhangt van een loop-variabele?

In mijn geval is de te doorzoeken kolom bepalend via de variabele "i" + 3.
Dus als de loop in lus 3 zit (dus als i = 3) dan is de te doorzoeken kolom i + 3 (dus kolom 6).

Of is er een andere methode om in dergelijk geval een kolom te doorzoeken op een al dan niet reeds aanwezige waarde?

groetjes,
BlackDevil
1) HP ProDesk (Windows 10 Pro Edu / Intel(R) Core(TM) i5-7500 CPU@ 3.40Ghz 3.41Ghz)
2) Laptop ASUS (Windows 10 Home / Intel(R) Core(TM) i3-3110M CPU@ 2.40GHz 2.40GHz)
Beide (RAM : 8,00 GB / 64-bits besturingssysteem, x64-processor)
Extern (Seagate Backup+ Hub 6TB / Seagate BUP Slim 2TB / Seagate Expansion Desk 5TB / HP ENVY 6030e)
Bullguard Premium Protection / Office Pro Plus 2016 NL

Offline JEC

  • Excel-Expert
  • Ervaren lid
  • *****
  • Berichten: 422
Re: subscript valt buiten bereik
« Reactie #9 Gepost op: 26 november 2021, 17:15:11 »
Ik denk dat je al goed zat

Sub jec()
 For i = 1 To 3
   If Application.CountIf(Sheets(1).Columns(i), 20) Then MsgBox "aanwezig in kolom " & i
 Next
End Sub

Offline BlackDevil

  • Ambassadeur
  • *****
  • Berichten: 1.029
  • Geslacht: Vrouw
  • veni vidi vici
Re: subscript valt buiten bereik
« Reactie #10 Gepost op: 26 november 2021, 17:31:21 »
@Veerj,

Ik denk dat ik mijn vraag wat verkeerd geformuleerd heb...

Ik heb dus een "For i = 1 To 11 Step 2" loop waarin afhankelijk van de waarde van i
in een specifieke kolom gezocht moet worden....
als de loop in de eerste lus zit (en i dus waarde 1 heeft) dan moet hij zoeken in Columns(i + 3) = dus kolom 4
als de loop in de tweede lus zit (en i dus waarde 3 heeft) dan moet gezocht worden in kolom 6 (= i + 3)
als de loop in de derde lus zit (en i dus waarde 5 heeft) dan moet gezocht worden in kolom 8 (= i + 3)
enz....

Maar als ik gewoon Columns(i + 3) noteer in de CountIf-methode dan krijg ik telkens een foutmelding, vandaar mijn vraag nu.

Dit zoeken is van toepassing op een deel van de loop in de macro uit mijn vorige berichten...

groetjes,
BlackDevil
1) HP ProDesk (Windows 10 Pro Edu / Intel(R) Core(TM) i5-7500 CPU@ 3.40Ghz 3.41Ghz)
2) Laptop ASUS (Windows 10 Home / Intel(R) Core(TM) i3-3110M CPU@ 2.40GHz 2.40GHz)
Beide (RAM : 8,00 GB / 64-bits besturingssysteem, x64-processor)
Extern (Seagate Backup+ Hub 6TB / Seagate BUP Slim 2TB / Seagate Expansion Desk 5TB / HP ENVY 6030e)
Bullguard Premium Protection / Office Pro Plus 2016 NL

Offline JEC

  • Excel-Expert
  • Ervaren lid
  • *****
  • Berichten: 422
Re: subscript valt buiten bereik
« Reactie #11 Gepost op: 26 november 2021, 17:41:13 »
Of je maakt een nieuwe variabele aan met als waarde: i + 3

Of zoiets misschien

Sub jecc()
 With Sheets(1).UsedRange
   For i = 1 To 3
     If Application.CountIf(.Columns(1).Offset(, i + 3), 20) Then MsgBox "aanwezig in kolom " & i
   Next
 End With
End Sub

Offline BlackDevil

  • Ambassadeur
  • *****
  • Berichten: 1.029
  • Geslacht: Vrouw
  • veni vidi vici
Re: subscript valt buiten bereik
« Reactie #12 Gepost op: 26 november 2021, 18:18:31 »
als ik een nieuwe variabele maak (bvb kol = i + 3) en deze dan gebruik in dit lijntje code :
If Application.CountIf(Columns(kol), zkart) = 0 Then
dan krijg ik de foutmelding 438

ik zal vrees ik een andere methode moeten zoeken  :(


groetjes,
BlackDevil
1) HP ProDesk (Windows 10 Pro Edu / Intel(R) Core(TM) i5-7500 CPU@ 3.40Ghz 3.41Ghz)
2) Laptop ASUS (Windows 10 Home / Intel(R) Core(TM) i3-3110M CPU@ 2.40GHz 2.40GHz)
Beide (RAM : 8,00 GB / 64-bits besturingssysteem, x64-processor)
Extern (Seagate Backup+ Hub 6TB / Seagate BUP Slim 2TB / Seagate Expansion Desk 5TB / HP ENVY 6030e)
Bullguard Premium Protection / Office Pro Plus 2016 NL

Offline JEC

  • Excel-Expert
  • Ervaren lid
  • *****
  • Berichten: 422
Re: subscript valt buiten bereik
« Reactie #13 Gepost op: 26 november 2021, 18:43:31 »
Het zou echt moeten werken op deze manier. De fout zit ergens anders :(
Probeer altijd een bladverwijzing te gebruiken als je een kolom aanroept. Dus bvb sheets(1).columns(1)

Offline BlackDevil

  • Ambassadeur
  • *****
  • Berichten: 1.029
  • Geslacht: Vrouw
  • veni vidi vici
Re: subscript valt buiten bereik
« Reactie #14 Gepost op: 26 november 2021, 18:49:52 »
@Veerj,

ja idd, had net het mysterie opgelost....  :)
er zat blijkbaar een typfout enkele lijntjes lager dan het CountIf-lijntje...  :-[
nu werkt zelfs "Columns(i + 3)" zoals ik het aanvankelijk had genoteerd... :thumbsup:

sorry voor de last  :-[

groetjes,
BlackDevil
1) HP ProDesk (Windows 10 Pro Edu / Intel(R) Core(TM) i5-7500 CPU@ 3.40Ghz 3.41Ghz)
2) Laptop ASUS (Windows 10 Home / Intel(R) Core(TM) i3-3110M CPU@ 2.40GHz 2.40GHz)
Beide (RAM : 8,00 GB / 64-bits besturingssysteem, x64-processor)
Extern (Seagate Backup+ Hub 6TB / Seagate BUP Slim 2TB / Seagate Expansion Desk 5TB / HP ENVY 6030e)
Bullguard Premium Protection / Office Pro Plus 2016 NL

 


www.combell.com