Ein Formular ist ein Objekt; Ein öffentliches Feld in einem Objektmodul gehört zu einer Instanz dieses Objekts. UserForms sind wenig mehr als Klassenmodule mit einer Standardinstanz (d. H. Einem VB_PredeclaredId = True
-Attribut) und einem Designer.
Wenn Sie mit dem Standardinstanz des Formulars (eine ziemlich schlechte Idee), dann können Sie dies tun:
MsgBox UserForm1.DelMonth
Beachten Sie, dass in der globalen Objekten Zustand speichert Bug-anfällig ist, und werden am Ende verursacht Probleme.
Wenn Sie die Form wie die vollwertigen Klasse behandeln ist, dann werden Sie etwas wie dieses:
With New UserForm1
.Show
MsgBox .DelMonth
End With
Beachten Sie, dass das Feld jemand Public
bedeutet sein, überall kann gehen und schreiben Sie dazu. Was Sie meinen ist für die Form seinen Wert zu bestimmen, und für die Aufruferlesen diesen Wert. Sie tun dies, indem das Feld mit einem Property Get
Mitglied Einkapseln - Start durch das Feld zu machen Private
:
Option Explicit
Private DelMonth As Variant ' wouldn't Integer or Long be more appropriate?
Public Property Get DeliveryMonth() As Long
DeliveryMonth = DelMonth
End Property
Nun wird die Anrufer nicht bekommen, die privaten DelMonth
zu sehen, und alles, was sie mit DeliveryMonth
tun können, ist Aufruf der Get
Accessor, der sie nicht an den eingekapselten Wert manipulieren lässt.
Es wirft nicht einmal einen Fehler.
Das ist beunruhigend. Sie erlauben VBA, Tippfehler und anderen illegalen Code zu kompilieren. Geben Sie Option Explicit
an der Oberseite von alle Modul. Immer.
Sie müssen 'userformname.DelMonth' von jeder Routine außerhalb des Formulars verwenden. – Rory