[VBA] Kan geen objecten aan Collection toevoegen

Pagina: 1
Acties:

  • Ryceck
  • Registratie: Oktober 2001
  • Laatst online: 21-07 18:06

Ryceck

Constants and Variables

Topicstarter
Heren,

Ben nu al een kleine halve dag aan het speuren naar een oplossing hiervoor maar ik kom er gewoon niet achter wat er mis is. Waarschijnlijk een standaardgeval van tunnelvisie dus vandaar dat ik het maar even hier neergooi want misschien dat iemand hier de fout ziet.

De situatie:
Ben bezig met een access-database wat te automatiseren en gebruik hier VBA voor. Het draait om een volledig rapportageproces gebaseerd op access databases.
Hetgeen ik nu mee bezig ben is een formpje wat met behulp van een aantal knoppen een aantal andere databases opent om daar direct macros uit te kunnen voeren. Naast de knopjes bevat mijn form per uit te voeren database ook een tweetal checkboxjes welke aangeven of de database uitgevoerd is en of de output van de database verwerkt is (mail, papier etc).

Wat ik nu heb gedaan is een aparte klasse Databeest aangemaakt waarin ik mijn "databases" ga bewaren. In deze klasse zitten simpel een aantal variabelen waarin ik de betreffende objecten voor die database kan opslaan (de bijbehorende knop, checkboxjes en een aantal stringetjes).
Voor verdere verwerking wil ik deze Databeest-objecten opslaan in een Collection zodat ik er weer gemakkelijk bijkan. Op basis van een aantal criteria moeten sommige databases af en toe wel en af en toe niet uitgevoerd gaan worden vanaf dit form, en ik wil dit on-the-fly kunnen wijzigen, vandaar de collection.
Nu krijg ik hier dus een foutmelding op wat ik niet snap...

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
Dim DbNames As Collection
Dim wwDatabases As Collection


Function CheckActivation()
    Dim i As Integer
    Set DbNames = New Collection

    DbNames.Add ("temp")

    Set wwDatabases = New Collection
    Dim db As Databeest
   
    For i = 1 To DbNames.Count
        Set db = New Databeest
        'db.strDbCode = DbNames(i)
        Select Case DbNames(i)
            Case "temp"
                db.strDbName = "TempDB"
            Case Else
                MsgBox "Onbekende database!?!?!"
        End Select
       wwDatabases.Add (db)
        
    Next
End Function


Op de regel "wwDatabases.Add(db)" krijg ik nu consequent een "438 Property or method not supported by object"

Ik kom oorspronkelijk vanuit de .NET-hoek waardoor ik met 99% zekerheid weet dat het niets uitmaakt daar wat er in gepropt wordt (alhoewel ik daar eerder met een arraylist had gewerkt maar ok). Vandaar dat ik dus niet snap wat hier nu fout gaat :S

Als ik overigens gewoon een string of Int aan de collection toevoeg gaat het wel goed, maar ik wil dus een object erin hebben omdat ik de properties van dit betreffende object verderop weer nodig heb.

PS: in het orgineel is de case select wat groter en staat er wat meer in, heb het ff gefilterd naar de kern

PS2:
De classmodule:
code:
1
2
3
4
5
6
7
8
Option Explicit

Public strDbName As String
Public strDbCode As String
Public strDbMacro As String
Public chkExecuted As New CheckBox
Public chkSent As New CheckBox
Public btnKnop As New CommandButton

[ Voor 6% gewijzigd door Ryceck op 12-09-2006 11:01 ]

If everything is working perfect, break something before someone else fucks up.


  • Tukk
  • Registratie: Januari 2002
  • Laatst online: 22-07 09:58

Tukk

De α-man met het ẞ-brein

Waarom stop je er eerst een string in om daarna aan de string een property te setten?

Kijk eens naar dit voorbeeld op msdn.

Je voegt een object toe aan de collectie en ter herkenning kan je er een string bij opslaan.
Wat jij hierboven doet is een string in een collectie stoppen en daarna doe je string.propery = "bla"

Een string is in Vb6 geen object.

Q: How many geeks does it take to ruin a joke? A: You mean nerd, not geek. And not joke, but riddle. Proceed.


  • Ryceck
  • Registratie: Oktober 2001
  • Laatst online: 21-07 18:06

Ryceck

Constants and Variables

Topicstarter
De string wordt in een andere collection toegevoegd welke dient als lijstje om dynamisch de databasenamen in op te slaan, dit gebeurt normaal ergens anders maar for the sake of clarity had ik dat even hier neergezet :)

Anyway, het is dus gefixt dankzij je linkie (waar ik zelf al een keer of 6 had zitten kijken maar dus niets heb gezien :/ )

code:
1
Collection.Add Db, "key"


Gewoon dynamisch een key dr aan toevoegen en hij vreet het wel... voor alle databases

Klote-vba... zeg dan gewoon dat je een parameter mist ipv gekke errors te spuien :(

Thanks anyway :Y)

If everything is working perfect, break something before someone else fucks up.


Verwijderd

de haakjes moeten weggehaald worden rond db:wwDatabases.Add db, je bent blijkbaar verplicht dit object by reference door te geven ipv. by value (alhoewel dat niet zou mogen uitmaken, want het is niet meer dan een pointer naar een object). de haakjes geven aan dat je het argument by value doorgeeft, met als gevolg de fout.
Wat jij hierboven doet is een string in een collectie stoppen
hij stopt een klasseobject met een reeks eigenschappen in een collection, niet de string rechtstreeks. zijn er trouwens ook geen problemen met de as new declaratie? dit kan je misschien beter naar de class_initialize gebeurtenis verplaatsen. (compileren!)
edit:Ryceck:de ontbrekende key is geen probleem.

[ Voor 3% gewijzigd door Verwijderd op 12-09-2006 11:36 ]