Foutmelding in excel vba

Status
Niet open voor verdere reacties.

Sophie90

Gebruiker
Lid geworden
4 nov 2011
Berichten
46
Hallo allemaal,

Sinds een aantal jaar gebruik ik een ledenbestand in excel, waarin ik mbv VBA wat acties heb gezet. Dit werkte al een tijd prima, maar nu (lees: vanaf Office 2010) krijg ik steeds een foutmelding bij het initiëren van een form. De volgende code heb ik staan:
Code:
Sub UserForm_Initialize()
    Dim rCell As Range
    Set colParms2 = New Collection
    ComboBox1.Clear
    For Each rCell In Range("B7:B100")
        If rCell.Value <> vbNullString Then
            ComboBox1.AddItem rCell.Value
            colParms2.Add rCell.Offset(, 1).Value
        End If
    Next rCell
End Sub

De foutmelding gaat over colParms;
Code:
 Set [COLOR="#FFA07A"]colParms2[/COLOR] = New Collection
Melding: 'Compile error, can't find project or library'. Ik weet niet meer waarom ik die regel er toen in heb gezet en ook niet waarom de nieuwere versies van Office hier problemen mee hebben. Weten jullie hoe ik dit op moet lossen?
 
Werkt hier in Office 2016 prima. Kijk eens bij de Verwijzingen in VBA of je niks mist.
Probeer het anders eens zo:
Code:
Sub UserForm_Initialize()
    Dim rCell As Range
    Dim i As Integer
    Dim colparms2() As String
    [COLOR="#008000"]'Set colparms2 = New Collection[/COLOR]
    ComboBox1.Clear
    For Each rCell In Range("B7:B100")
        If rCell.Value <> vbNullString Then
            ReDim Preserve colparms2(i)
            colparms2(i) = rCell.Offset(, 1).Value
            ComboBox1.AddItem rCell.Value
            i = i + 1
        End If
    Next rCell
End Sub
 
Laatst bewerkt:
Helaas komt de collParm ook weer terug in de if-then formule die er onder staat, dus die vlieger gaat niet op...
 
Klopt, maar dan is hij gedefinieerd als een array en niet als een collection.
 
Ik heb het geprobeerd, maar dan schuift de foutmelding door naar de collOarm2 in de if-then..
 
Plaats dan je document.
 
Ga ik morgen even doen. Ivm de privacy moet ik dan ff de gegevns wissen. Bedankt alvast!
 
Ik heb Off 2010 en kreeg net als jij een foutmelding. Vervolgens keek in bij de Verwijzingen (<Extra>, <Verwijzingen>) en daar stond een verwijzing naar een ontbrekende bibliotheek: CalAdapter 1.1. Die verwijderd en toen deed het formulier het.
 
Overigens kan je logica in je formulier en code een stuk logischer, als je een beetje oplet hoe je objecten noemt. Nu heb je dit om je cellen te vullen:
Code:
            .Offset(, [B][COLOR="#FF0000"]4[/COLOR][/B]).Value = TextBox[B][COLOR="#FF0000"]3[/COLOR][/B].Value
            .Offset(, 5).Value = TextBox5.Value
            .Offset(, [B][COLOR="#FF0000"]3[/COLOR][/B]).Value = TextBox[B][COLOR="#FF0000"]4[/COLOR][/B].Value
Als jij dat handig vindt: ik niet. Zou je de namen van de tekstvakken gelijk houden aan de offset, dan kan het namelijk zo:
Code:
            For i = 3 To 12
                .Offset(, i).Value = Me(TextBox & "i").Value
            Next i

En dat geldt ook voor het leegmaken:
Code:
    For i = 1 To 12
        Me(TextBox & "i").Value = vbNullString
    Next i
Daar kan je de code uiteraard wel in deze variant gebruiken, omdat er verder geen consequenties aan hangen. Maar nadenken over hoe je objecten noemt, maakt de structuur van je code een stuk korter en overzichtelijker.
 
Ziet er goed uit. Ach, als het programma werkt, is het voor mij goed en kijk ik niet meer naar evt verbeteringen. Totdat iemand mij hier weer eens wakker schud :D
Ik heb je code geprobeerd, maar ook hier gaat er iets mis.
Code:
Sub Aanpassen_Click()
        nn = ComboBox1.Value
    With Sheets("Herhalers")
    Set nnFound = .Columns(2).Find(What:=nn, After:=.Cells(7, 2), LookIn:=xlValues, LookAt:= _
    xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
    
    nnFound.Value = TextBox1.Value
    nnFound.Offset(, 1).Value = TextBox2.Value
        If Optman = False And Optvrouw = False Then
            MsgBox "Kies Dhr. of Mw. ", , "Let op"
            Exit Sub
        End If
    
    keuze = IIf(Optman = True, "Dhr.", "Mw.")
    nw = IIf(CheckBox1 = True, "X", "")
    rabolid = IIf(CheckBox2 = True, "X", "")
    nnFound.Offset(, 2).Value = keuze
     For i = 3 To 9
                [COLOR="#FF0000"]nnFound.Offset(, i).Value = Me(TextBox & "i").Value
[/COLOR]            Next i
            
    'Kolom L (10) gebruikt voor berekening van datum AED verlenging
    nnFound.Offset(, 11).Value = nw
    nnFound.Offset(, 12).Value = TextBox10.Value
    nnFound.Offset(, 13).Value = TextBox11.Value
    nnFound.Offset(, 14).Value = TextBox12.Value
    'Kolom Q (15) gebruikt voor waarde jubilarissen
    nnFound.Offset(, 16).Value = rabolid
    
   End With

De tip van het uitschakelen deed hem inderdaad. Dank je wel!
 
Doet hetzelfde als jouw code:

Code:
Sub Aanpassen_Click()
   If Optman = False And Optvrouw = False Then
     MsgBox "Kies Dhr. of Mw. ", , "Let op"
     Exit Sub
   End If
   
   Sheets("Herhalers").Columns(2).Find(ComboBox1.Value).resize(,16)=array(Textbox1,Textbox2,IIf(Optman, "Dhr.", "Mw."),Textbox3,Textbox4,textbox5,textbox6,textbox7,textbox8,textbox9,"",IIf(CheckBox1, "X", ""),textbox10,textbox11,textbox12,"",IIf(CheckBox2, "X", ""))
End sub
 
Die code ziet er een stuk beter uit dan die van mij, maar als ik hem invoer, werkt het formulier niet meer (wordt niet bijgewerkt)...
 
Zonder formulier: geen idee.
 
Laatst bewerkt:
Hier is ie.
Het aanpassen is opgelost, die doet het weer.
Nu heb ik alleen nog dat bij het verwijderen via het form, de combobox niet wordt geleegd, waardoor hij ook in de dropdownlist blijft staan. In de excellijst wordt ie wel verwijderd. Als ik dan in het dropdownlijstje de (verwijderde) naam aanklik, gaat het programma uiteraard in de fout.
Deze code heb ik gebruikt:
Code:
Dim c As Control
       For Each c In Me.Controls
        Select Case TypeName(c)
            Case "TextBox", "Combobox"
                c.Value = ""
            Case "OptionButton", "CheckBox"
                c.Value = False
        End Select
    Next
Bekijk bijlage 317553

edit: fout gevonden: Combobox
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan