• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Set probleem (fout 91)

Status
Niet open voor verdere reacties.

Symphysodon

Gebruiker
Lid geworden
14 dec 2012
Berichten
468
Beste forummers,

Ik heb een probleem met het toekennen van een waarde aan een variabele. Bij het draaien van de eerste keer gaat het goed, bij de volgende Next krijg ik de foutmelding 91. De foutmelding komt tevoorschijn bij het toekennen van kc.

Code:
Dim kc As Object
Dim le As Integer
'With Sheets("Constanten").Range(Sheets("Constanten").Range("A1"), Sheets("Constanten").Cells(Sheets("Constanten").Rows.Count, 40).End(xlUp))
With Sheets("Constanten")
    le = .Range("A60").End(xlDown).Row
    Set Kaltab = .Range("A60:A" & le)
   
    For i = 1 To le - 59
       ' Set kc = Nothing
        
        lijn = Kaltab.Cells(i, 1)
        
        kc = .[c28].EntireRow.Cells.Find(Left(lijn, 2)).Column
        Application.DisplayAlerts = False
        Sheets(lijn).Range("B11:C28").ClearContents
        .Range(.Cells(30, kc), .Cells(47, kc)).Copy
        Sheets(lijn).[b11].PasteSpecial xlPasteValues
        Application.DisplayAlerts = True
        
    Next
End With
 

Bijlagen

Laatst bewerkt:
Hij gaat zelfs de eerste keer al fout. Wat verwacht je te zien in kc?
 
Waarom heb je kc dan als object gedimd en niet als Integer? Dat doet overigens niks af aan de foutmelding in het testbestand.
 
Bedoel je niet zoiets?
Code:
Sub test()
Dim kc As Range, cl As Range
  With Sheets("Constanten")
    For Each cl In .Range("A60").CurrentRegion
      Set kc = .Rows(28).Find(Trim(Left(cl.Value, 2)), , , xlWhole)
      If Not kc Is Nothing Then Sheets(cl.Value).Range("B11:B28") = .Cells(30, kc.Column).Resize(18).Value
    Next
  End With
End Sub
 
@Octafisch
Heb ik in eerste instantie ook gedaan, maar kreeg toen die foutmelding en dan ga je dingen uitproberen (helaas).

@VenA
Mooie oplossing.
Het is alleen frustrerend dat ik het dan niet zelf kan bedenken en het zou leuk zijn als ik er achter kom waarom mijn code niet werkt. Niet dat ik hem ga gebruiken, maar toch.
Ik heb wel wat gevonden over with block variabele maar is toch moeilijk te volgen.

https://msdn.microsoft.com/en-us/library/aa264506(v=vs.60).aspx

Bedankt voor de oplossing
 
Het heeft ook niets met with block te maken. De foutmelding krijg je doordat de te zoeken waarde niet gevonden wordt en, zoals al eerder opgemerkt, je de variabele verkeerd gedeclareerd hebt. Dit is allemaal vrij eenvoudig te vinden als je met <F8> door de code loopt. Je had dan kunnen zien dat bij de eerste loop Left(lijn, 2) de waarde "B " krijgt en deze waarde bestaat niet.
 
Ok ik zie dat je gelijk hebt en dat "B " niet bestaat en dat je met Trim de spaties weghaalt. Als ik de code start krijg ik bij de eerste loop Left(lijn, 2) de waarde "D 122" te zien en niet de waarde "B ", dat is toch pas de tweede loop?
 
De code werkt nu bijna goed alleen na de laatste zoekwaarde in [A60].CurrentRegion valt het sub script buiten bereik. Dit kan ik waarschijnlijk oplossen met On Error Resume Next, maar in principe is de For Next lus toch beëindigt bij de laatste waarde van de range?
 
Kan je dat even laten zien in een bestandje met de gebruikte code?
 
Het programma is veel te groot, daarom heb ik ook een testbestandje gemaakt. Maar ik heb het al ontdekt. De tabbladen worden aangemaakt van het lijstje [a60].CurrentRegion en ik zie nu dat van de laatst gevulde cel geen tabblad is gemaakt.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan