Begin met Klassemodules

Status
Niet open voor verdere reacties.

JJZijlstra

Gebruiker
Lid geworden
26 nov 2013
Berichten
283
Beste lezer(s),

Voor mezelf ben ik begonnen met het oefenen met klassenmodules in excel VBA. Werken met klassenmodules is helemaal nieuw voor mij.
Ondanks voorbeelden uit internet en het overnemen hiervan lukt het me niet om de gegevens aan de praat te krijgen in een eigen hierbij toegevoegd bestand.
Graag zou ik willen weten waarom dit niet lukt en wat ik fout heb gedaan.

Zie voorbeeldbestand met 2 verschillende modules.

Vriendelijke groet,
Toby
 

Bijlagen

  • JJZ _ ClassModules.xlsm
    13,4 KB · Weergaven: 35
Voor je voorbeeld moet je clsCustomer niets anders bevatten dan dit:
Code:
Public name As String

Wat je er nu hebt staan moet niet in een Class module maar in een gewone module:
Code:
Sub CustomerExample()
    [COLOR="#008000"]' Create the object from the class module[/COLOR]
    Dim oCustomer As New clsCustomer
    [COLOR="#008000"]' Set the customer name[/COLOR]
    oCustomer.name = "John"
    [COLOR="#008000"]' Print the name to the Immediate Window(Ctrl + G)[/COLOR]
    Debug.Print oCustomer.name
End Sub
Dat zal dan gewoon werken.

Overigens is dat geen mooi voorbeeld voor het gebruik van een Class.
Voor dat voorbeeld kan je beter een User Defined Datatype (UDT) in een gewone module gebruiken:
Code:
Type UDT_CUSTOMER
     Firstname As String
     Lastname As String
     Enroled As Date
End Type

Public TP_Customer As UDT_CUSTOMER

Sub Test()
    With TP_Customer
        .Firstname = "John"
        .Lastname = "Walker"
        .Enroled = "23-01-2008"
    End With
    Debug.Print TP_Customer.Firstname & " " & TP_Customer.Lastname & " " & TP_Customer.Enroled
End Sub
De Sub Test kan dan weer overal staan.
Maar goed, dat was je vraag niet ;)
 
Laatst bewerkt:
@EdM

Tot nog toe heb ik geen andere class-voorbeelden aangetroffen dan de soort die TS aanreikt, inderdaad als alternatief voor een UDT.

Heb jij leuke voorbeelden waarin een Class zinvol toegepast wordt (afgezien van de bekende Withevents Classes) ?

Ik ben benieuwd en bij voorbaat dank
 
Die WithEvents is eigenlijk de enige die ik gebruik.
Andere voorbeelden die ik zou kunnen aanreiken heb ik dus helaas ook niet.

Wel heb ik classes in een voor ons commercieel product waarvan ik de code daarom niet kan plaatsen.
Het gaat om het resizen van userforms, waarbij de controls ook mee groeien/shrinken.
 
Laatst bewerkt:
Leuke site :)
Staan een paar dingen op die ik ook nog niet wist over het gebruik van UDT's en classes.
Die ga ik eens rustig doornemen.
 
Beste lezer(s),

In mijn voorbeeldbestand ben ik uitgegaan van een leerboek via het internet.
Stap voor stap ben ik hiermee aan het werk gegaan en ook het bijbehorende voorbeeldbestand gedownload.
Voor zover ik weet heb ik precies dezelfde code gemaakt als het voorbeeldbestand. In mijn bestand werkte hij niet, bij het gedownloade voorbeeldbestand wel.
Mijn vraag is of was: waarom niet bij mij. M.a.w. hoe krijg ik mijn bijgeleverd bestand wel werkend?

Een UDT zoals Edmoor beschreef lijkt me (globaal gezien) hetzelfde als de classmodule voor zover ik het beoordelen kan, maar misschien zie ik dit wel helemaal fout.
Deze UDT zal ik eerst grondig gaan bekijken en ik laat jullie weten wat mijn bevindingen zijn, of vragen die naar voren komen.

Een andere vraag:
In welk geval(len) maakt de programmeur gebruik van UDT's of Classmodules?
Wat is het nut hiervan?


Groet,
Toby
 
Laatst bewerkt:
Hoe je je voorbeeld werkend kan maken staat in het eerste gedeelte van #2.
 
Beste lezer(s),


Zorgvuldig opnieuw aan de gang geweest met Klassenmodules met de module clsCustomer.

Helaas werkt het niet in het gebied "Direct". Zie hier bijgevoegd bestand.

Wat doe ik fout ?? Waarom werkt het niet?


Vriendelijke groet,
Toby
 

Bijlagen

  • JJZ _ ClassModules.xlsm
    13,7 KB · Weergaven: 35
de sub CustomerExample moet je wel in een gewone module zetten
 
Zoals gemeld in #2.
 
@Edmoor:
Jij hebt helemaal gelijk, ik heb het over het hoofd gezien. Excuus hiervoor. Anders had het direct gewerkt.


@Aan allen die gereageerd hebben:
Nu de klassenmodule in een gewone module staat, werkt het zoals ik dit zou willen.
Geleidelijk aan zal ik me in deze materie verder gaan verdiepen.
Als er nieuwe vragen komen van mijn kant, dan horen jullie van me.

Mijn dank aan allen die gereageerd hebben op mijn vraag in dit draadje.


Vriendelijke groet,
Toby
 
@EdM, @ E V R,

Maar even zelf iets bedacht als een object (klasse) om een volgnummer te genereren.
Zie de bijlage.
Kan in principe door een onbeperkt aantal gebruikers benut worden als de opslagplaats gemeenschappelijk is.
De startmacro in sheet1.
 

Bijlagen

  • __volgnummer_Class.xlsb
    12,2 KB · Weergaven: 39
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan