Variablen zwischen 2 UserForms übergeben

Moderator: ModerationP

Variablen zwischen 2 UserForms übergeben

Beitragvon redryder » 19. Okt 2015, 09:36

Hallo Wissende,

ich habe ein UserForm, in dem ich via Textbox eine Eingabe abfrage. Beim Klick auf einen Suchen Button soll ein 2. Userform geöffnet, in einer noch zu öffnenden Excel Datei gesucht werden und die Werte der gefundnen Zeile in entsprechenden Labelfeldern angezeigt werden.
Wie muss ich es anstellen, dass ich den Suchstring an das 2. Userfoem (beim öffnen) übergebe?
Ich steh etwas auf dem Schlauch....

vielen Dank schon mal für Eure Hilfe
Wer Rechtschriebfehler findet möchte sie bitte behalten. Manchmal sind meine Finger schneller als die Augen..... ;-)
redryder
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 101
Registriert: 19. Feb 2007, 14:43
Wohnort: Hof

Re: Variablen zwischen 2 UserForms übergeben

Beitragvon DerHoepp » 19. Okt 2015, 09:59

Moin Ryder,

ich persönlich würde Userforms als Klassenmodule sehen, die ich auch wie Klassen verwende. Dementsprechend würde ich in der zweiten UserForm eine Methode schreiben, die einen Parameter annimmt. Wenn die Userform2 auch noch einen Rückgabewert liefern soll, wird das ganze entsprechend eine Function. Beispiel: clsUserForm1 mit TextBox1, CommandButton1 und Label1. clsUserForm2 mit Textbox1 und CommandButton. In UserForm2 kann der Text geändert werden, der von UF1 geliefert wurde. Der geänderte Text steht anschließend in Label1 der UserForm1. Dazu noch ein allgemeines Modul, um die erste Form aufzurufen
In das Allgemeine Modul:
Code: Alles auswählen
Option Explicit

Sub Probieren()
    Dim MeineErsteForm As New clsUserForm1
   
    clsUserForm1.Show
End Sub

In das Codemodul zur Klasse clsUserForm1:
Code: Alles auswählen
Option Explicit

Private Sub CommandButton1_Click()
    Dim uf2 As New clsUserForm2
   
    If TextBox1 = "" Then
        MsgBox "Bitte erst Text eingeben"
    Else
        Label1.Caption = uf2.getChangedText(TextBox1.Text)
    End If
   
End Sub

In das Codemodul zur Klasse clsUserForm2:
Code: Alles auswählen
Option Explicit
Private retVal As String
Private Sub CommandButton1_Click()
    retVal = TextBox1.Text
    Me.Hide
End Sub

Public Function getChangedText(Ursprungstext As String) As String
    TextBox1.Text = Ursprungstext
    Me.Show
    getChangedText = retVal
End Function

Beim Aufruf des Allgemeinen Makros wird nun die erste Userform geöffnet. Dort kann der User in die Textbox einen Text eintragen. Beim Klick auf den dortigen Button wird dieser Text an die Userform 2 übergeben, wo er geändert werden kann. Beim Klick auf den Button dort, wird der geänderte Text zurückgegeben und im Label1 der ersten Userform angezeigt.

Viele Grüße erstmal!
derHöpp
DerHoepp
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 8291
Registriert: 14. Mai 2013, 11:08

Re: Variablen zwischen 2 UserForms übergeben

Beitragvon redryder » 19. Okt 2015, 10:07

Hi.
Wenn ich Dich richtig verstanden habe, lege ich unter den Formularen die beiden Forms an. Dann erzeuge ich 2 Klassenmodule (Für jedes Form eines).
Das erste will ich beim öffnen des Excel anzeigen lassen.
Habe ich das so richtig verstanden? Ich habe noch nie wirklich mit Klassenmodulen gearbeitet.
Verzeih meine Unwissenheit.
Zuletzt geändert von redryder am 19. Okt 2015, 10:13, insgesamt 1-mal geändert.
Wer Rechtschriebfehler findet möchte sie bitte behalten. Manchmal sind meine Finger schneller als die Augen..... ;-)
redryder
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 101
Registriert: 19. Feb 2007, 14:43
Wohnort: Hof

Re: Variablen zwischen 2 UserForms übergeben

Beitragvon DerHoepp » 19. Okt 2015, 10:12

Moin nochmal,

ne, ganz richtig hast du's noch nicht. UserForms sind schon von sich aus Klassenmodule, du brauchst keine gesonderten. Wenn du das erste beim öffnen von Excel anzeigen willst, kannst du dies auch wie gewöhnlich über UserForm1.Show machen (Excel erzeugt automatisch für jede UserForm-Klasse ein Objekt dieser Klasse und nennt es genauso wie die Klasse selbst).

Viele Grüße
derHöpp
DerHoepp
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 8291
Registriert: 14. Mai 2013, 11:08

Re: Variablen zwischen 2 UserForms übergeben

Beitragvon Nepumuk » 19. Okt 2015, 10:15

Hallo,

du könntest:

1. Eine Sub von einem Userform in der anderen aufrufen und dabei den Wert als Parameter übergeben.
2. Den Wert einer Property-Prozedur übergeben.
3. Den Wert per Raise-Event übergeben.
4. Eine öffentliche Variable benutzen.
De fontibus non est disputandum

Gruß
Nepumuk 8-)
Benutzeravatar
Nepumuk
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 14564
Registriert: 10. Aug 2004, 08:40
Wohnort: Regensburg

Re: Variablen zwischen 2 UserForms übergeben

Beitragvon redryder » 19. Okt 2015, 10:54

@ DerHoepp,
ich habe gerade deine Lösung versucht.
Beim öffnen des frmAusgabe meckert er das private an. "Ungültiges Attribut in Sub oder Function"
Wenn ich das auskommentiere kann er auf die Textbox des frmEingabe nicht zugreifen.

Mein Code sieht bisher so aus:
Beim öffnen des Workbooks:
Code: Alles auswählen
Private Sub Workbook_Open()
Dim MeineErsteForm As New frmEingabe
frmEingabe.Show
End Sub



frmEingabe beim klicken auf cmd-Button:
Code: Alles auswählen
Private Sub cmdSearch_Click()
Dim Artikel As String, uf2 As New frmAusgabe
If Me!txtEingabe = "" Then
    MsgBox "Bitte erst einen Suchbegriff eingeben", vbCritical, "Achtung!!!"
    Me!txtEingabe = ""
    Me!txtEingabe.SetFocus
Else
    Artikel = Me!txtEingabe
End If

frmAusgabe.Show

End Sub


Beim frmAusgabe:
Code: Alles auswählen
Private Sub UserForm_Activate()
Private Artikel As String                                 Hier meckert er

Artikel = txtEingabe.Text
Me.Hide

MsgBox Artikel
End Sub
Zuletzt geändert von redryder am 19. Okt 2015, 11:09, insgesamt 1-mal geändert.
Wer Rechtschriebfehler findet möchte sie bitte behalten. Manchmal sind meine Finger schneller als die Augen..... ;-)
redryder
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 101
Registriert: 19. Feb 2007, 14:43
Wohnort: Hof

Re: Variablen zwischen 2 UserForms übergeben

Beitragvon Nepumuk » 19. Okt 2015, 11:06

Hallo,

1. Im Workbook:

Code: Alles auswählen
Private Sub Workbook_Open()
    frmEingabe.Show
End Sub

2. In frmEingabe:

Code: Alles auswählen
Option Explicit

Private mstrArtikel As String

Private Sub cmdSearch_Click()
    If txtEingabe.Text = "" Then
        MsgBox "Bitte erst einen Suchbegriff eingeben", vbCritical, "Achtung!!!"
        txtEingabe.SetFocus
    Else
        Artikel = txtEingabe.Text
    End If
    frmAusgabe.Show
End Sub

Public Property Get Artikel() As String
    Artikel = mstrArtikel
End Property

Public Property Let Artikel(ByVal pvstrArtikel As String)
    mstrArtikel = pvstrArtikel
End Property

3. In frmAusgabe:

Code: Alles auswählen
Option Explicit

Private Sub UserForm_Activate()
    Dim strArtikel As String
    strArtikel = frmEingabe.Artikel
End Sub
De fontibus non est disputandum

Gruß
Nepumuk 8-)
Benutzeravatar
Nepumuk
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 14564
Registriert: 10. Aug 2004, 08:40
Wohnort: Regensburg

Re: Variablen zwischen 2 UserForms übergeben

Beitragvon DerHoepp » 19. Okt 2015, 11:33

Moin,

ich würde den Artikel im Gegensatz zu Nepumuk eher das Attribut übergeben (Push), als es über eine Property auszulesen (Pull):
1. Allgemeines Modul wie gehabt
2. frmEingabe
Code: Alles auswählen
Option Explicit

Private Sub cmdSearch_Click()
    If txtEingabe.Text = "" Then
        MsgBox "Bitte erst einen Suchbegriff eingeben", vbCritical, "Achtung!!!"
        txtEingabe.SetFocus
    Else
        Artikel = txtEingabe.Text
    End If
    frmAusgabe.ShowIt Artikel
End Sub

3. frmAusgabe
Code: Alles auswählen
Option Explicit
Private mArtikel As String

Public Sub ShowIt(artikel As String)
    mArtikel = artikel
    Me.Show
End Sub


Grüße
derHöpp
DerHoepp
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 8291
Registriert: 14. Mai 2013, 11:08


Zurück zu Excel Forum (provisorisch)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 22 Gäste