Help!

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

Hulp bij posten

Recente topics

Auteur Topic: Compileer fout in lijst listbox  (gelezen 8243 keer)

0 leden en 1 gast bekijken dit topic.

Offline Richard2000

  • Lid
  • *
  • Berichten: 21
  • Geslacht: Man
  • Oplossing.be
Compileer fout in lijst listbox
« Gepost op: 24 december 2020, 20:57:00 »
Hallo, ik ben met een database bezig voor mijn magazijntje, ik ben nog een leek in VBA maar met wat afkijken links rechts en hier is het gelukt om een formulier te maken waarmee ik de database kan aanvullen, nou heb ik er ook een listbox in waarop de data in de database zichtbaar is en ik wil deze filteren op de invoer van de tekstvakken, ik heb wat code van hier gevonden maar krijg het niet aan de praat, ik krijg een compileer fout met de melding dat een variable niet is gedefinieerd..

Iemand die kan zien wat ik fout heb gedaan en weet een oplossing?

Heb de excel file bijgevoegd 
    Sub maaklijst()

    'toont de data van het werkblad in de listbox die overeenkomt met de invoer in de tekstvakkenin in het formulier
    Dim lijst
    LsbWeerstanden.ListIndex = -1
    laatste = Sheets("Componenten").Cells(Rows.Count, 1).End(xlUp).Row
    lijst = Sheets("Componenten").Range("A2:F" & laatste)
    arg = 0
    For i = 1 To UBound(lijst)
        If InStr(1, lijst(i, 1), txtWaardeR, vbTextCompare) > 0 _
            And InStr(1, lijst(i, 3), txtVermogenR, vbTextCompare) > 0 _
            And (InStr(1, lijst(i, 4), txtTolerantieR, vbTextCompare) > 0 Or txtTolerantieR = "") Then
                arg = arg + 1
        End If
    Next i
    If arg = 0 Then
        LsbWeerstanden.Clear
        Exit Sub
    End If
    ReDim nwlijst(arg - 1, 4)
    arg = 0
    For i = 1 To UBound(lijst)
        If InStr(1, lijst(i, 1), txtWaardeR, vbTextCompare) > 0 _
            And InStr(1, lijst(i, 3), txtVermogenR, vbTextCompare) > 0 _
            And (InStr(1, lijst(i, 4), txtTolerantieR, vbTextCompare) > 0 Or txtTolerantieR = "") Then
                For k = 1 To 4
                    nwlijst(arg, k - 1) = lijst(i, k)
                Next k
            arg = arg + 1
        End If
    Next
    LsbWeerstanden.List = nwlijst

    'slechts één record in listbox > automatisch selecteren
    If LsbWeerstanden.ListCount = 1 Then LsbWeerstanden.ListIndex = 0

    End Sub

    Private Sub UserForm_Click()

    End Sub

Offline SoftAid

  • Administrator
  • Ambassadeur
  • *****
  • Berichten: 18.752
  • Geslacht: Man
  • Nobody is perfect, not even me...
Re: Compileer fout in lijst listbox
« Reactie #1 Gepost op: 24 december 2020, 21:03:02 »
Hallo Richard,

mooi dat je de code hebt gepost, maar in je werkboek zitten een formulier en andere objecten.
Om je hiermee snel en goed mee te kunnen helpen zou je toch een voorbeeldbestand moeten toevoegen.
Dan kunnen de helpers zien waar je mee bezig bent, zonder te moeten raden.

Een kopie van je huidig bestand, ontdaan van persoonlijke data met enkele regels uit de database lijkt me het beste;

:) SoftAid :)             
Dubbelposten, het posten op verschillende forums van dezelfde vraag, dient op
voorhand gemeld te worden, met een link naar het topic op de andere site.
Overtreding van deze regel kan bestraft worden met verbanning !

Offline RedHead

  • Excel-Expert
  • Ambassadeur
  • *****
  • Berichten: 2.056
  • Geslacht: Man
  • Met Excel lukt 't wel.... (toch???)
Re: Compileer fout in lijst listbox
« Reactie #2 Gepost op: 24 december 2020, 21:19:52 »
Een bijlage is altijd beter, maar als schot voor de boeg? Heb je misschien boven aan elke module "Option Explicit" staan? Zo ja, zet dan overal een ' voor om er en comment van te maken en probeer je code dan nog eens uit.
______________________________

Groet, Leo

Offline Richard2000

  • Lid
  • *
  • Berichten: 21
  • Geslacht: Man
  • Oplossing.be
Re: Compileer fout in lijst listbox
« Reactie #3 Gepost op: 24 december 2020, 21:34:22 »
Ik was idd vergeten code toe te voegen, maar die zit er nu bij,

Maar het is opgelost, er stond idd een option expl. bovenaan, en heb die gewoon verwijderd en het werkt nu goed, helemaal top en bedankt!

Ik ga nu verder spelen en als ik weer niet uitkom dan lezen jullie het wel..

Offline Warme bakkertje

  • Lid
  • *
  • Berichten: 94
  • Geslacht: Man
Re: Compileer fout in lijst listbox
« Reactie #4 Gepost op: 25 december 2020, 02:01:31 »
Of je kan natuurlijk ook al je variabelen benoemen, dan heb je dat probleem ook niet meer.  8)
Windows 10 Home   NLD 64bit

Microsoft Office Professional Plus 2016 US

Offline Richard2000

  • Lid
  • *
  • Berichten: 21
  • Geslacht: Man
  • Oplossing.be
Re: Compileer fout in lijst listbox
« Reactie #5 Gepost op: 25 december 2020, 11:43:29 »
Of je kan natuurlijk ook al je variabelen benoemen, dan heb je dat probleem ook niet meer.  8)

Ja dat kan ook, als ik wist hoe dat moet,  :)

Nou het volgende probleem, en heb idd het vermoeden dat het met bovenstaande te maken heeft, want het stukje code wat ik daaruit geraust heb begint idd met bovenstaande en de mijne niet..
Ik wil nu de regel in de listbox selecteren en dan invullen op de tekstvakken en krijg nu deze melding,  "Fout 1004, door toepassing of object gedefinieerde fout" in de regel van de listbox behorend bij de FrmWeerstand eerste regel, en ik heb echt geen idee hoe dit op te lossen..

code bijgevoegdPrivate Sub cmdOpslaanR_Click()
Dim iRow As Long
Dim ws As Worksheet
Set ws = Worksheets("Componenten")

'vindt laatst gebruikte cel, ga naar volgende rij
 iRow = ws.Cells(Rows.Count, 1) _
 .End(xlUp).Offset(1, 0).Row
 
 'controleert of een er een textbox is ingevuld
 If Trim(Me.txtWaardeR.Value) = "" Then
 Me.txtWaardeR.SetFocus
 MsgBox "Resistance is Futile! vul een Waarde in!"
 Exit Sub
 End If
 
 If Trim(Me.txtVermogenR.Value) = "" Then
 Me.txtVermogenR.SetFocus
 MsgBox "Resistance is Futile, vul het Vermogen in!"
 Exit Sub
 End If
 
 If Trim(Me.txtTolerantieR.Value) = "" Then
 Me.txtTolerantieR.SetFocus
 MsgBox "Resistance is Futile, vul de Tolerantie in!"
 Exit Sub
 End If
 
 If Trim(Me.txtMateriaalR.Value) = "" Then
 Me.txtMateriaalR.SetFocus
 MsgBox "Resistance is Futile, vul een Materiaal in!"
 Exit Sub
 End If
 
 If Trim(Me.txtMontageR.Value) = "" Then
 Me.txtMontageR.SetFocus
 MsgBox "Resistance is Futile, vul een waarde in!"
 Exit Sub
 End If
 
 If Trim(Me.txtAfmetingR.Value) = "" Then
 Me.txtAfmetingR.SetFocus
 MsgBox "Resistance is Futile, vul de Afmeting in!"
 Exit Sub
 End If
 
 'plaats de gegevens naar de cellen in het werkblad
 ws.Cells(iRow, 1).Value = Me.txtWaardeR.Value
 ws.Cells(iRow, 2).Value = Me.txtVermogenR.Value
 ws.Cells(iRow, 3).Value = Me.txtTolerantieR.Value
 ws.Cells(iRow, 4).Value = Me.txtMateriaalR.Value
 ws.Cells(iRow, 5).Value = Me.txtMontageR.Value
 ws.Cells(iRow, 6).Value = Me.txtAfmetingR.Value
 
 'verwijder gegevens formulier
 Me.txtWaardeR.Value = ""
 Me.txtVermogenR.Value = ""
 Me.txtTolerantieR.Value = ""
 Me.txtMateriaalR.Value = ""
 Me.txtMontageR.Value = ""
 Me.txtAfmetingR.Value = ""
 
End Sub

Private Sub CmdSluitenR_Click()
Unload Me
End Sub


Private Sub lsbWeerstanden_Click()
 Dim strAddress As String
 Dim l As Long
 For l = 0 To LsbWeerstanden.ListCount
        If LsbWeerstanden.Selected(l) = True Then
            strAddress = LsbWeerstanden.List(l, 1)
            With Worksheets("Componenten")
                FrmWeerstand.txtWaardeR.Value = .Cells(.Range(strAddress).Row, 1).Value
                FrmWeerstand.txtVermogenR.Value = .Cells(.Range(strAddress).Row, 2).Value
                FrmWeerstand.txtTolerantieR.Value = .Cells(.Range(strAddress).Row, 3).Value
                FrmWeerstand.txtMateriaalR.Value = .Cells(.Range(strAddress).Row, 4).Value
                FrmWeerstand.txtMontageR.Value = .Cells(.Range(strAddress).Row, 5).Value
                FrmWeerstand.txtAfmetingR.Value = .Cells(.Range(strAddress).Row, 6).Value
            End With
            GoTo EndLoop
        End If
    Next l
EndLoop:
End Sub

'maakt een (filter) lijst voor de listbox als je een waarde ingeeft in de textvakken
Private Sub txtWaardeR_Change()
maaklijst
End Sub

Private Sub txtVermogenR_Change()
maaklijst
End Sub

Private Sub txtTolerantieR_Change()
maaklijst
End Sub



Sub maaklijst()

'toont de data van het werkblad in de listbox die overeenkomt met de invoer in de tekstvakkenin in het formulier
Dim lijst
LsbWeerstanden.ListIndex = -1
laatste = Sheets("Componenten").Cells(Rows.Count, 1).End(xlUp).Row
lijst = Sheets("Componenten").Range("A2:F" & laatste)
arg = 0
For i = 1 To UBound(lijst)
    If InStr(1, lijst(i, 1), txtWaardeR, vbTextCompare) > 0 _
        And InStr(1, lijst(i, 2), txtVermogenR, vbTextCompare) > 0 _
        And (InStr(1, lijst(i, 3), txtTolerantieR, vbTextCompare) > 0 Or txtTolerantieR = "") Then
            arg = arg + 1
    End If
Next i
If arg = 0 Then
    LsbWeerstanden.Clear
    Exit Sub
End If
ReDim nwlijst(arg - 1, 4)
arg = 0
For i = 1 To UBound(lijst)
    If InStr(1, lijst(i, 1), txtWaardeR, vbTextCompare) > 0 _
        And InStr(1, lijst(i, 2), txtVermogenR, vbTextCompare) > 0 _
        And (InStr(1, lijst(i, 3), txtTolerantieR, vbTextCompare) > 0 Or txtTolerantieR = "") Then
            For k = 1 To 4
                nwlijst(arg, k - 1) = lijst(i, k)
            Next k
        arg = arg + 1
    End If
Next
LsbWeerstanden.List = nwlijst

'slechts één record in listbox > automatisch selecteren
If LsbWeerstanden.ListCount = 1 Then LsbWeerstanden.ListIndex = 0

End Sub

Private Sub UserForm_Click()

End Sub
]

Offline Warme bakkertje

  • Lid
  • *
  • Berichten: 94
  • Geslacht: Man
Re: Compileer fout in lijst listbox
« Reactie #6 Gepost op: 25 december 2020, 16:02:01 »
Laat ons hier al eens mee beginnen.
Windows 10 Home   NLD 64bit

Microsoft Office Professional Plus 2016 US

Offline Richard2000

  • Lid
  • *
  • Berichten: 21
  • Geslacht: Man
  • Oplossing.be
Re: Compileer fout in lijst listbox
« Reactie #7 Gepost op: 26 december 2020, 11:08:50 »
Helemaal geweldig  \o/ , doet precies wat ik wil, dat automatisch invullen van de tekstvakken was waarschijnlijk een volgende vraag dus mooi dat je dat erin gezet heb  :thumbsup:

Ik zie dat je aardig wat heb moeten verbouwen aan de code en daar was ik nooit uitgekomen, dus ik ga het bestuderen en zien of ik het snap.

Bedankt ik ga er mee aan de slag!

Prettige kerst nog gewenst!

Offline Richard2000

  • Lid
  • *
  • Berichten: 21
  • Geslacht: Man
  • Oplossing.be
Re: Compileer fout in lijst listbox
« Reactie #8 Gepost op: 12 januari 2021, 12:18:47 »
Ben intussen wat verder aan het stoeien met m'n database en heb het uitgebreid met een leveranciers pagina waarin ik eerst de leveranciers wil invoeren, dat lukt opzich aardig maar ben aan het stuntelen met een info formulier waarop dus de info van de leverancier zichtbaar zou moeten worden.
En dat lukt dus niet, het infoform wordt met een cmd geopend uit een ander formulier "leverancier" met daarin een listbox met zoekfunctie die goed werkt, als eenmaal de juiste leverancier geselecteerd is zou ik de resterende informatie van de tabel in de tekstvakken van het infoform willen hebben.
Die info is dan al gefilterd in het leverancier formulier dus kan het info formulier dan dezelfde range gebruiken of wordt de range van het lev. form dan verwijderd oid als ik het info form open en moet er dan een nieuwe range gemaakt worden?

En nog een dingetje, de zoekfunctie van het lev. form heb ik gecopied van het eerdere weerstand form en daarin zit,denk ik, in regel 6 een functie die collom 4 omzet naar een % notatie die idd in het weerstand tabel zat maar nu niet nodig is, heb code toegevoegd en excel file.
Maar ik krijg het er niet uit, als ik iets verwijder krijg ik foutmeldingen, de overige % notaties heb ik er wel uitgekregen.

Wie weet raad..

Sub maaklijst(obj As Object, col As Long)
exitsub = True
Range("T1").CurrentRegion.Offset(1).ClearContents
With Sheets("Leverancier")
    .Range("AM1").CurrentRegion.ClearContents
     Cells(2, col) = IIf(obj <> cbbTolerantieR, obj.Text & "*", obj.Text & "%")
    .ListObjects("tblLeverancier").Range.AdvancedFilter 2, Range("FilterCriteria2"), Range("am1")
End With
With Me.LsbLeverancier
    .List = Range("am1").CurrentRegion.Offset(1).Value
     exitsub = False
    If .ListCount - 1 = 1 Then .ListIndex = 0
End With
Range("T1").CurrentRegion.Offset(1).ClearContents
Range("AM1").CurrentRegion.ClearContents
End Sub

Offline Warme bakkertje

  • Lid
  • *
  • Berichten: 94
  • Geslacht: Man
Re: Compileer fout in lijst listbox
« Reactie #9 Gepost op: 12 januari 2021, 14:55:53 »
Heb al enkele aanpassingen gedaan in je Info formulier. De rest kan je dan wel verder zelf aanvullen.

Hou er wel rekening mee dat het kolomnummer in een ListBox begint bij 0 en niet 1.

Dus leverancier = 0, Dienst = 1, Nummer = 2, enz....
Windows 10 Home   NLD 64bit

Microsoft Office Professional Plus 2016 US

Offline Richard2000

  • Lid
  • *
  • Berichten: 21
  • Geslacht: Man
  • Oplossing.be
Re: Compileer fout in lijst listbox
« Reactie #10 Gepost op: 13 januari 2021, 11:40:47 »
Bedankt Warme Bakkertje, :thumbsup:  werkt perfect, ik had zelf ook al wat met de list geprobeerd maar kreeg het niet aan de praat, ik had de "with" regel niet, en waarschijnlijk nog wel wat meer..

Alleen nu is het zo als je niets selecteert in het leverancier form je een complimeer error krijgt, ik heb wat voorbeeld bestanden waar ik dan wat uit leen maar kreeg helaas niets werkend, de .list is niet gedefinieerd en ik kom er niet uit, ik zou dan graag een msgbox willen met een tekst en met ok kom je dan weer terug in het leverancier form, mijn dank zou groot zijn als je hier even naar wilt kijken.. :)

Nog een vraagje, weet of heb je of iemand anders wat voorbeeld bestanden die een beetje lijken op wat ik van plan ben, ik heb hier wel wat, maar die werken allemaal met een extra module met code en heb al eerder gemerkt dat dat niet echt samenwerkt met de code die ik al heb.
En aan de andere knoppen zie je al een beetje wat ik wil maar weet nog niet exact wat voor code dat nodig heeft..

Bestand bijgevoegd met de code waarin ik een msgbox probeer te bouwen..

Option Explicit

Private Sub smdSluitenLI_Click()
    Unload Me
End Sub

Sub UserForm_Initialize()
With frmLeverancier.LsbLeverancier
If .ListCount = -1 Then
        MsgBox "Kies een Leverancier"
       
        Exit Sub
        End If
       
       
       
   

        Me.txtDienstLI = .List(.ListIndex, 1)
        Me.txtNummerLI = .List(.ListIndex, 2)
        Me.txtTAVLI = .List(.ListIndex, 11)
        Me.txtAdresLI = .List(.ListIndex, 4)
        Me.txtPostcodeLI = .List(.ListIndex, 10)
        Me.txtStadLI = .List(.ListIndex, 5)
        Me.txtLandLI = .List(.ListIndex, 6)
        End With
End Sub

Offline Warme bakkertje

  • Lid
  • *
  • Berichten: 94
  • Geslacht: Man
Re: Compileer fout in lijst listbox
« Reactie #11 Gepost op: 13 januari 2021, 15:11:35 »
Kijk eens of dit je verder helpt.

PS: Vergeet niet je info formulier verder aan te vullen.
Windows 10 Home   NLD 64bit

Microsoft Office Professional Plus 2016 US

Offline Richard2000

  • Lid
  • *
  • Berichten: 21
  • Geslacht: Man
  • Oplossing.be
Re: Compileer fout in lijst listbox
« Reactie #12 Gepost op: 14 januari 2021, 14:21:40 »
Wederom bedankt Warme Bakkertje \o/, hier kan ik zeker wat mee!

Ik ga er mee aan de gang en laat het (hopelijk foutloze) resultaat hier zien.

Offline Richard2000

  • Lid
  • *
  • Berichten: 21
  • Geslacht: Man
  • Oplossing.be
Re: Compileer fout in lijst listbox
« Reactie #13 Gepost op: 19 januari 2021, 14:38:38 »
Heb de database verder afgemaakt en het werkt helemaal foutloos, misschien of meer waarschijnlijk niet helemaal op de juiste manier want heb er 2 opgelost door wat geleende code bij te voegen.

Via het dashboard die je had bijgemaakt werkte opzoek/filter code niet meer, deze filtert de resultaten in de listbox die gekozen zijn in de comboboxen op het leverancier formulier, ik heb de cmd knop dus terug geplaatst op het leverancier werkblad maar dat gaf een compileer foutcode in de maaklijst van het opzoek/filter als ik een leverancier wilde verwijderen, dit heb ik kunnen oplossen door deze code

    With frmLeverancier
        .LsbLeverancier.ListIndex = -1
        .cbbNaamL = "": .cbbDienstL = "": .cbbNummerL = "": .cbbContactL = ""
    End With


voor deze van jou te zetten

    With Blad1.ListObjects("tblleverancier").DataBodyRange
        fRow = Application.Match(frmLeverancier.txtLeverancierIDL, .Columns(1), 0)
        .Rows(fRow).EntireRow.Delete
    End With

en ik had een stukje code die dubbelle waardes controleerd, die ik gebruik voor het leverancier nummer,

If WorksheetFunction.CountIf(ws.Range("D2", ws.Cells(iRow, 1)), Me.txtNummerLI.Value) > 0 Then
 MsgBox "Dit Nummer is al in gebruik", vbCritical
 Exit Sub
 End If

die pas goed werkte door dit ervoor te zetten,

iRow = ws.Cells(Rows.Count, 1) _
 .End(xlUp).Offset(1, 0).Row

Heb ik dit goed gedacht of kan dit problemen gaan brengen?

En nog een vraag, in het eerste formulier leveranciers heb ik een listbox met 4 combo's waarmee ik leveranciers kan opzoeken, werkt goed maar wat ik zou willen dat als ik bv alleen een F kies in bv de leveranciers listbox kies alle lev. verschijnen die met F beginnen en niet maar 1, er verschijnen er enkel meer als het eerste woord van de naam gelijk is, ipv de eerste letter.
Heb het web wat afgestruint maar alle listboxen incl de codes die ik hier nog heb doen allemaal het zelfde, laten maar 1 resultaat zien ipv alle die beginnen met dezelfde letter..

Hier de code van het opzoek/filter

Private Sub cbbNaamL_Change()
If exitsub Then Exit Sub
    maaklijst cbbNaamL, 33
End Sub

Private Sub cbbDienstL_Change()
If exitsub Then Exit Sub
    maaklijst cbbDienstL, 34
End Sub

Private Sub cbbNummerL_Change()
If exitsub Then Exit Sub
    maaklijst cbbNummerL, 35
End Sub

Private Sub cbbContactL_Change()
If exitsub Then Exit Sub
    maaklijst cbbContactL, 36
End Sub

Sub maaklijst(obj As Object, col As Long)
exitsub = True
Range("AF1").CurrentRegion.Offset(1).ClearContents

With Sheets("Leverancier")
    .Range("BK1").CurrentRegion.ClearContents
     Cells(2, col) = obj.Text & "*"
    .ListObjects("tblLeverancier").Range.AdvancedFilter 2, Range("FilterCriteria2"), Range("bk1")
End With

With Me.LsbLeverancier
    .List = Range("bk1").CurrentRegion.Offset(1).Value
     exitsub = False
    If .ListCount - 1 = 1 Then .ListIndex = 0
End With

Range("AF1").CurrentRegion.Offset(1).ClearContents
Range("BK1").CurrentRegion.ClearContents
End Sub

Oh ja, ik heb nog geprobeerd de cmd leverancier knop aan de praat te krijgen met een werkend opzoek/filter door de CurrenRegion te veranderen naar het werkblad en nog wat dingen met de range maar kwam er niet uit, wat is de verwijzing dan en hoe pas ik dat aan?


Offline Warme bakkertje

  • Lid
  • *
  • Berichten: 94
  • Geslacht: Man
Re: Compileer fout in lijst listbox
« Reactie #14 Gepost op: 19 januari 2021, 17:24:20 »
Heb al je issues aangepakt, denk ik.

Je dashboard werkt ook terug.

Aan jou om te testen of ik nog ergens iets vergeten ben.
Windows 10 Home   NLD 64bit

Microsoft Office Professional Plus 2016 US

 


www.combell.com