[Access97 / VBA] listbox.additem wil niet lukken

Pagina: 1
Acties:
  • 159 views sinds 30-01-2008
  • Reageer

  • ErikRo
  • Registratie: Juni 2001
  • Laatst online: 12-12 22:28
In VB werkt het, volgens een VBA boek kan het, maar in Access97 wordt dit commando niet herkend (method not found). In Word97 werkt het echter wel, schiet mij maar lek.
Werkt dit commando soms pas vanaf een bepaalde versie van Access? Op de MS site staat de methode wel beschreven in een voorbeeld, maar niet voor welke versies dit geldt.
Zo ja, bestaat er dan een tegenhanger voor Access97

"I don't have any solution but I certainly admire the problem." -- Ashleigh Brilliant


Verwijderd

Ik gebruik hiervoor altijd het ActiveX ListView object. Misschien heb je hier wat aan. Werkt in Access 97. Het object vind je onder het gereedschap ikoon en heet "ListView Control Version 5.0".

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
Function FillList(Domain As String, LV As Object) As Integer
'==================================================================
'  Purpose:   to fill a ListView control with data from a table or
'             query
'  Arguments: a Domain which is the name of the table or query, and
'             a ListView control object
'  Returns:   The number of records
'==================================================================

Dim db As Database, rs As Recordset
Dim intTotCount As Integer
Dim intCount1 As Integer, intCount2 As Integer
'Dim colNew As ColumnHeader, NewLine As ListItem
Dim colNew, NewLine

On Error GoTo Err_Man

' Clear the ListView control.
LV.ListItems.Clear
LV.ColumnHeaders.Clear

' Set Variables.
Set db = CurrentDb
Set rs = db.OpenRecordset(Domain)

' Set Column Headers.
For intCount1 = 0 To rs.Fields.Count - 1
  Set colNew = LV.ColumnHeaders.Add(, , rs(intCount1).Name)
Next intCount1
LV.View = 3    ' Set View property to 'Report'.

' Set Total Records Counter.
rs.MoveLast
intTotCount = rs.RecordCount
FillList = intTotCount
rs.MoveFirst

' Loop through recordset and add Items to the control.
For intCount1 = 1 To intTotCount
  If IsNumeric(rs(0).Value) Then
    Set NewLine = LV.ListItems.Add(, , Str(rs(0).Value))
  Else
    Set NewLine = LV.ListItems.Add(, , rs(0).Value)
  End If
  For intCount2 = 1 To rs.Fields.Count - 1
    NewLine.SubItems(intCount2) = rs(intCount2).Value
  Next intCount2
  rs.MoveNext
  Next intCount1

Exit Function

Err_Man:
' Ignore Error 94 which indicates you passed a NULL value.
Select Case Err
Case 94
  Resume Next
Case 3021
  Exit Function
Case 93, 3075
  MsgBox "In de zoekcriteria staan ongeldige leestekens. " & _
    "Pas de zoekcriteria aan.", vbInformation, "Ongeldige query"
  Exit Function
Case Else
  ' Otherwise display the error message.
  MsgBox "Error: " & Err.Number & Chr(13) & _
    Chr(10) & Err.Description
End Select

End Function

  • ErikRo
  • Registratie: Juni 2001
  • Laatst online: 12-12 22:28
ik zal het eens proberen, bedankt.

"I don't have any solution but I certainly admire the problem." -- Ashleigh Brilliant


  • FitNiX
  • Registratie: April 2001
  • Laatst online: 13-12 00:51
ErikRo schreef op 08 November 2002 @ 09:39:
ik zal het eens proberen, bedankt.
Sorry voor de kick, maar ik zit dus met hetzelfde probleem... :(

Is het jou al wel gelukt ErikRo?

Verwijderd

Ik heb eens even in de help van Access gekeken. Ik wist het ook niet meer |:(

Maar ik zie dat de listbox drie typen rowsource kent. Als je hem instelt op lijst met waarden dan moet je gewoon een string meegeven met daarin de waarden. Als je een table/query type selecteert geef je dus een query of tabel mee enzovoort enzovoort...

  • FitNiX
  • Registratie: April 2001
  • Laatst online: 13-12 00:51
Verwijderd schreef op 19 November 2002 @ 16:12:
Ik heb eens even in de help van Access gekeken. Ik wist het ook niet meer |:(

Maar ik zie dat de listbox drie typen rowsource kent. Als je hem instelt op lijst met waarden dan moet je gewoon een string meegeven met daarin de waarden. Als je een table/query type selecteert geef je dus een query of tabel mee enzovoort enzovoort...
Ja die had ik ook al :)
Maar hoe gooi je die quuery eroverheen dan :?

Ik heb in m'n VBA code nu dit:
code:
1
listbox.RowSource = stringMetTekst

Maar op die manier gooit ie alleen een waarde in de 1e row, de rest vult ie niet. :?

[edit]
* FitNiX heeft zojuist de oplossing gevonden :)
YES, heb hem net gevonden, t*ring, enkele uren op gezeten. Terwijl het zo simpel is :+
Voor de nieuwsgierigen onder ons is hier de oplossing:

• Zorg ervoor dat de listbox ingesteld is als: Table/View/StoredProc
• Daaronder bij Datasource vul je niets in.
• Vervolgens zet je in je code het volgende:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
'Haalt de modulen horende bij de categorie op
Private Sub combobox_Change()
    Dim sCategorie As String
    Dim sQuery As String

    'Haalt de gekozen categorie op uit de combobox
    sCategorie = combobox.Value

    'Haalt alle modules op die horen bij die categorie.
    sQuery = "SELECT m.Name FROM module m, categorie_module cm WHERE cm.ukeyCat ='" & sCategorie & "'"
    
    listbox.RowSource = sQuery
End Sub
Voila :7


Sorry voor de layout O-)


Ook hierzo te vinden
[/edit]

Verwijderd

Kermit schreef op 19 November 2002 @ 16:56:
[...]
Ik heb in m'n VBA code nu dit:
code:
1
listbox.RowSource = stringMetTekst

Maar op die manier gooit ie alleen een waarde in de 1e row, de rest vult ie niet. :?
De lijst is een semicolumn seperated lijst, met puntkomma's in normaal NL. Maar 9/10 is een query wel handiger...

  • FitNiX
  • Registratie: April 2001
  • Laatst online: 13-12 00:51
Verwijderd schreef op 19 November 2002 @ 19:00:
[...]


De lijst is een semicolumn seperated lijst, met puntkomma's in normaal NL. Maar 9/10 is een query wel handiger...
Ah bedankt, dat is altijd makkelijk om te weten...

  • TromboneFreakus
  • Registratie: Juli 2001
  • Laatst online: 01-08-2023
Verwijderd schreef op 19 november 2002 @ 19:00:
[...]


De lijst is een semicolumn seperated lijst, met puntkomma's in normaal NL. Maar 9/10 is een query wel handiger...
Even ter aanvulling, aangezien ik er ook heel lang mee geprutst heb.

In Access 2003 (misschien 2002 ook wel) werkt dit perfect
For x = 1 To .RecordCount
Me.lstcontractafloop.AddItem !SpelerID & ";" & !Voornaam & "; etc. etc
.MoveNext
Next
Voor Access 2000 geeft dit echter problemen. Aangezien 2000 voor de meeste databases prima voldoet, gebruik je voor eigen code i.c.m. een listbox beter het volgende.
For x = 1 To .RecordCount
Me.lstcontractafloop.RowSource = Me.lstcontractafloop.RowSource & !SpelerID & ";" & !Voornaam & ";" & etc. etc
.MoveNext
Next
Het voordeel: geen extra combobox en bovendien code die iets meer tot de verbeelding spreekt. Zeker bij grafisch ontwerp als in Access toch wel handig, al zeg ik het zelf.

NB. Denk aan de punt-komma na het laatste item! Anders krijg je alsnog hele rare resultaten na het toevoegen van meer dan een item.

  • TromboneFreakus
  • Registratie: Juli 2001
  • Laatst online: 01-08-2023
Even voor de helderheid: deze oplossing werkt zowel in Access 97, als 2000 als in 2003.
Pagina: 1