FAQ 0037: Wie kann ich eine Variable von einer Form an eine andere übergeben?
von Helge Rex
Frage
Wie kann ich eine Variable von einer Form an eine andere übergeben?
Die unsaubere Variante
Die Variable, die in mehreren Forms benutzt werden soll, wird in einer Form als Public deklariert.
Nachteil ist, daß die Form geladen wird (sofern sie noch nicht geladen ist), sobald man auf die Variable zugreift.
' Form1: ' Benötigte Steuerelemente: ' - 1 CommandButton: Command1 Option Explicit ' Variable, die öffentlich sein soll Public MeinString As String Private Sub Command1_Click() ' Zweite Form aufrufen Form2.Show vbModal End Sub Private Sub Form_Load() ' Inhalt festlegen MeinString = "Form mit öffentlicher Variable" End Sub
' Form2: ' Benötigte Steuerelemente: ' - 1 CommandButton: Command1 ' - 1 Textbox : Text1 Option Explicit Private Sub Command1_Click() ' Form schließen Unload Me End Sub Private Sub Form_Load() ' Textbox mit Inhalt füllen Me.Text1.Text = Form1.MeinString End Sub
Die saubere Variante
Deutlich besser ist es, wenn die Variable, welche in mehreren Forms benutzt werden soll, in einem Modul als Public deklariert wird.
' Modul1 Option Explicit ' Variable, die öffentlich sein soll Public MeinString As String
' Form1: ' Benötigte Steuerelemente: ' - 1 CommandButton: Command1 Option Explicit Private Sub Command1_Click() ' Zweite Form aufrufen Form2.Show vbModal End Sub Private Sub Form_Load() ' Inhalt festlegen Module1.MeinString = "Modul mit öffentlicher Variable" End Sub
' Form2: ' Benötigte Steuerelemente: ' - 1 CommandButton: Command1 ' - 1 Textbox : Text1 Option Explicit Private Sub Command1_Click() ' Form schließen Unload Me End Sub Private Sub Form_Load() ' Textbox mit Inhalt füllen Me.Text1.Text = Module1.MeinString End Sub
Die objektorientierte Variante
Das Ganze geht natürlich auch objektorientiert (Code von pks optimiert).
' Form1: ' Benötigte Controls: ' - 1 CommandButton (Command1) Option Explicit Private Sub Command1_Click() Dim Frm As Form Dim s As String Set Frm = New Form2 Frm.MeinName = "Peter" Load Frm Frm.Show vbModal Set Frm = Nothing End Sub
' Form2: ' Benötigte Controls: ' - 1 Textbox (Text1) Option Explicit Private strMeinName As String Public Property Get MeinName() As String MeinName = strMeinName End Property Public Property Let MeinName(ByVal strNewName As String) strMeinName = strNewName End Property Private Sub Form_Load() Me.Text1.Text = MeinName End Sub
Ihre Meinung
Falls Sie Fragen zu dieser FAQ haben, Ihre Erfahrung mit anderen Nutzern austauschen möchten oder auf eine Ergänzung hinweisen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.