• 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.

lijst filteren mvb autofilter

Eastw00d

Gebruiker
Lid geworden
3 mrt 2013
Berichten
144
IK vul een listbox mbv een autofilter. Wil ik vervolgens op 1 record klikken krijg ik een fout. Ik heb het nu geprobeerd om het te ondervangen door eerst de autfilter uit te zetten, maar ik blijf in deze lus zitten. Weet iemand een oplossing?
 

Bijlagen

Code:
Private Sub Workbook_Open()
Sheets("Blad1").Select
End Sub
Je verteld niet wat de foutmelding is, maar Blad1 bestaat niet in het document dat je plaatste.
 
Dan hebben we niks aan dat document.
Klik op Foutopsporing.
Dan zie je in de code waar het mis gaat.
 
wat opvalt in je code is dat je een rij nummer wil ophalen om vervolgens te gebruiken in een andere procedure. Maar het is geen rij, het is de tekst in die rij (kolom 8 in jouw geval).
 
Zie #5:
De waarde van de variabele rij is daar 0.
 
ik krijg hem niet gevonden. waarde van 5 verander, dan komt de volgende regel met foutmelding
 
Er is geen rij 5 in het document.
Plaats een goed voorbeeld document en vertel wat er moet worden gedaan om de fout te krijgen.
 
ik kan rechts selecteren op openstaande storingen, ik krijg dan dmv een autofilter deze storingen te zien. Als ik op deze storing klik, dan verschijnt de foutmelding. Laat ik de auto filter weg (zoals aan de linkerkant), dan werkt het wel.
 

Bijlagen

Je methode gaat niet werken. Je laadt je data in je listbox2. Daarna wil je op basis van die listbox index de werkbladwaarden gaan inladen. Dat is je valkuil. Lees je data in vanuit je listbox. Je indexes komen namelijk niet meer overeen met je werkblad zodra je de data hebt ingeladen.
Bericht automatisch samengevoegd:

Achter je Storingopen formulier deze regel zo schrijven (achter je listbox2 click)

Code:
frmEdit.txtRij.Text = ListBox2.ListIndex


Achter je frmEdit zoiets gebruiken:
Code:
Private Sub UserForm_Activate()

    rij = Val(txtRij.Text)   'Verborgen textbox
    
    For Each it In Array("txtDatum", "txtNaam", "txtProces", "txtomschrijving", "TextBox3", "keuze", "TextBox1", "TxtBxDate")
      frmEdit.Controls(it) = Storingopen.ListBox2.List(rij, j + 0)
      j = j + 1
    Next
    keuze.List = Split(" Ja Nee")

End Sub
 
Laatst bewerkt:
In kolom 8 van Listbox2 zou het rijnummer moeten staan, dat is echter niet gevuld. Bij het (dubbel)aanklikken van een storing wordt de verborgen textbox txtRij gebruikt en die bevat een nul. En zoals je weet, een Excel werkblad heeft geen rij nul, vandaar de foutmelding.

En waarom gebruik je textboxen en niet gewoon cellen op Blad1? Met een WorksheetBeforeDoubleclick kun je hetzelfde bereiken als met de doubleclick op de textboxen. Je hebt nu 400 coderegels nodig om de dagen een kleurtje te geven, dat zou met 4 regels voorwaardelijke opmaak kunnen als je cellen gebruikt.
 
weer een stukje verder met dank aan JEC. Alleen als ik frmedit wil opslaan begint het verhaal opnieuw
Code:
 With ActiveSheet
        .Cells(rij, 1) = Me.txtDatum
        .Cells(rij, 2) = Me.txtNaam
        .Cells(rij, 3) = Me.txtProces
        .Cells(rij, 4) = Me.txtomschrijving
        .Cells(rij, 5) = Me.TextBox3
        .Cells(rij, 6) = Me.keuze
        .Cells(rij, 7) = Me.TxtBxDate
        .Cells(rij, 8) = Me.TextBox1
    End With
fout 1004
@AHulpje aan het verhaal met voorwaardelijke opmaak had ik nog niet gedacht
 
Laatst bewerkt:
Verander die save procedure in zijn geheel naar onderstaande code. Je moet nog wel zorgen dat je "rij" variabele overeenkomt met je regel in je tabel. Dat is nu nog niet het geval.

"rij" geeft waarde 0 in je listbox omdat je maar 1 regel inlaadt. Maar in je tabel moet het regel twee zijn. Zorg bvb voor een ID nummer waaraan je kan linken.

Code:
Private Sub cmdOpslaan_Click()
ActiveSheet.Cells(rij, 1).Resize(, 8) = Array(txtDatum, txtNaam, txtProces, txtomschrijving, TextBox3, keuze, TextBox1, TxtBxDate)
Unload Me
End Sub
 
En overweeg eens om de 36 vrijwel identieke ComboCox change events (903 regels!) in je formulier Dagplanning te vervangen door een generieke functie die je vanuit iedere ComboBox change event aanroept, dat is dan nog maar één regel per ComboBox en veel makkelijker te onderhouden. Dat scheelt bijna 800 regels code. Daarmee vermijd je ook typefouten, zie DAG17 in ComboBox35_Change.
Dus in plaats van 36 keer:
Code:
Private Sub ComboBox1_Change()
    Dim index As Integer
    index = ComboBox1.ListIndex
    Select Case index
    Case Is = 0
      Worksheets("Dagplanning").Range("E5") = Me("combobox1").Value
      Dag1.BackColor = vbRed
    Case Is = 1
      Worksheets("Dagplanning").Range("E5") = Me("combobox1").Value
      Dag1.BackColor = RGB(255, 192, 0)
    Case Is = 2
       Worksheets("Dagplanning").Range("E5") = Me("combobox1").Value
       Dag1.BackColor = RGB(153, 0, 0)
    Case Is = 3
    Worksheets("Dagplanning").Range("E5") = Me("combobox1").Value
    Dag1.BackColor = RGB(0, 102, 204)
    Case Is = 4
    Worksheets("Dagplanning").Range("E5") = Me("combobox1").Value
    Dag1.BackColor = vbWhite
End Select
    Me("real1").Value = Worksheets("dagplanning").Range("m6")
    Me("real2").Value = Worksheets("dagplanning").Range("m7")
    Me("real3").Value = Worksheets("dagplanning").Range("m5")
    Me("real4").Value = Worksheets("dagplanning").Range("m10")
End Sub

zoiets:

Code:
Private Sub ComboBox1_Change()
    cboChange 1, "E5"
End Sub

Private Sub ComboBox2_Change()
    cboChange 2, "E7"
End Sub

Sub cboChange(nr, celadres)
    'nr = nummer combobox
    'celadres = te wijzigen cel
    kleur = Array(vbRed, RGB(255, 192, 0), RGB(153, 0, 0), RGB(0, 102, 204), vbWhite)
    Controls("dag" & nr).BackColor = kleur(Me.Controls("combobox" & nr).Value)
    With Worksheets("Dagplanning")
        .Range(celadres) = Me.Controls("combobox" & nr).Value
        Me.Real1.Value = .Range("m6")
        Me.Real2.Value = .Range("m7")
        Me.Real3.Value = .Range("m5")
        Me.Real4.Value = .Range("m10")
    End With
End Sub
En dit soort acties kun je op veel meer plaatsen in je code uitvoeren.
 
Terug
Bovenaan Onderaan