Wie Klassendefinitionen Arbeit in VBA

Als ich versuche zu lernen, VBA, Klassen sind Strahlen mich einige schwere Schmerzen!!!

Ist hier etwas aus einem meiner VBA-Bücher (VBA und Makros Microsoft Excel 2010 - Bill Jelen Seite 497), die absolut Bizarre und eigentümliche:

  1. Öffnen wir ein Klasse Modul im VBE

  2. Und wir schreiben die 4 Eigenschaften und 1-Methode der benutzerdefinierten Objekt im Klassenmodul clsEmployee:

    'Properites   
    Public EmpName As String             
    Public EmpID As String   
    Public EmpRate As Double         
    Public EmpWeeklyHrs As Double
    
    'Methods   
    Public Function EmpWeeklyPay() As Double  
        EmpWeeklyPay = EmpRate * EmpWeeklyHrs  
    End Function
  3. Dem Buch schreibt Sie, dass das benutzerdefinierte Objekt ist nun abgeschlossen

  4. Nun geht das Buch zu öffnen, ein einfaches Modul (kein Klassenmodul) mit einem Verweis auf das benutzerdefinierte Objekt aus einem anderen Modul, so geht es:

    Dim Employee as clsEmployee
    
    Set Employee = New clsEmployee
  5. Nicht es stellt alle den code-block. Wirklich peinlich, was hier ist, dass die Dim Mitarbeiter as clsEmployee ist außerhalb der sub procudure! Warum? (Dies könnte man als die unbedeutende Frage)

    Option Explicit
    
    Dim Employee as clsEmployee 'why is this outside of the code block?
    
    Sub EmpPay()
        Set Employee = New clsEmployee
    
        With Employee
            .EmpName = "Tracy Syrstad"
            .EmpID = "1651"
            .EmpRage = 25
            .EmpWeeklyHrs = 40
    
            MsgBox .EmpName & " earns $" & .EmpWeeklyPay & " per week."
        End With
    
    End Sub
  6. Buch gnädig, sagt:

Die Prozedur deklariert ein Objekt Employee als eine neue Instanz clsEmployee. Es weist dann Werte für die vier Eigenschaften des Objekts und erzeugt eine Nachricht im Feld anzeigen den Namen des Mitarbeiters und die wöchentlichen zahlen. Die Objekt-Methode EmpWeeklyPay ist
verwendet, um generieren die angezeigten zahlen.

Bin ich fest die Menschen hier

Soweit ich weiß, wenn wir (ein original-VBA-gemacht und nicht selbst eine aus dem Klassenmodul) eine Eigenschaft, nachdem ein Objekt zum Beispiel

Application.Name

...VBA gibt ein Zeichenfolgenwert, der den Namen des Objekts. OK, also VBA irgendwie weiß, wie dies zu tun. Aber ich kann einfach nicht verstehen, wie ist es möglich, in der Bücher Paradigma zu erstellen Sie eine benutzerdefinierte Eigenschaft nur durch Eingabe nix mit hart-codiert

Public EmpName As String
Public EmpID As String
Public EmpRate As Double
Public EmpWeeklyHrs As Double

...nur als Name-Eigenschaft unterscheidet sich von der Eigenschaft "Wert", was schafft bis es 4 verschiedene Eigenschaften? Ich meine, wie sind Ihre mechanik anders? Was macht die Eigenschaft EmpName anders EmpID??? Für alles, was ich weiß, Sie sind nur Variablen in der Klasse deklariert-Modul. Wie können wir das erstellen von benutzerdefinierten Objekt-Eigenschaften nur durch das deklarieren von Variablen im Klassenmodul??? Sollten wir nicht irgendwie die Eingabe der mechanik, eine Abgrenzung, die chassis wenn man so will, also wenn ich mit/set EmpID es wird gehen, um sich die Mitarbeiter-ID-und nicht seinen Namen. Was ist eigentlich, versicherte mir, dass wenn ich Anrufe der EmpRate es nicht gehen für die EmpWeeklyHrs es den gleichen Datentyp und es gibt keine andere Art von code in Ihrem "blueprint" die Klasse-Modul zu stoppen, die Dinge aus immer unzuverlässig. Es gibt sicherlich etwas hardcoded, lässt Value und Name Eigenschaft unterschiedliche wie können wir nur Variablen deklarieren, in der custom made-Objekt? es macht für mich keinen Sinn

vielen Dank für das ansehen meiner lange lange lange Frage

Vielleicht eine Sache zu erkennen, ist die built-in-Klassen, wie Application sind (im funktionalen Sinne) das gleiche tun wie Ihre benutzerdefinierte Klasse. Sie würde nicht erwarten, dass Application.Name zu verwechseln mit Application.Intersect, richtig? Natürlich nicht, und der Grund dafür ist, das diese Eigenschaften haben unterschiedliche Erklärungen in der Application Klasse, genau wie deine EmpID und EmpRate.
Nomenklatur: In der ersten code-block, was Sie nennen Eigenschaften sind eigentlich Variablen, und was man den Aufruf einer Methode ist eine Eigenschaft.
Die Dim Employee As clsEmployee erklärt die Objekt-variable Mitarbeiter, welche Eigenschaften und Verhaltensweisen, die in der Klasse definiert clsEmployee. Gleichen Weise wie Dim sLabel As String deklariert die variable sLabel mit den Eigenschaften und Verhaltensweisen definiert, die von der eingebauten Klasse String. Die variable Mitarbeiter ist nicht instanziiert (erstellt), bis Set Employee = New clsEmployee.

InformationsquelleAutor ExoticBirdsMerchant | 2014-02-01

Schreibe einen Kommentar