Variable an Userform übergeben

Moderator: ModerationP

Variable an Userform übergeben

Beitragvon Calle Cool » 20. Mai 2022, 15:11

Hi,
wenn ich eine Userform öffne
Code: Alles auswählen
xy.show
danl läuft ja als erstes
Code: Alles auswählen
userform_Activate()


Kann ich irgendwie dorthin eine Variable übergeben? Hab ansowas wie

Code: Alles auswählen
xy.show (4)

Code: Alles auswählen
userform_Activate(test as string)


gedacht... Funktioniert aber nicht...
Calle Cool
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 70
Registriert: 24. Apr 2012, 11:11

Re: Variable an Userform übergeben

Beitragvon F_en » 20. Mai 2022, 15:16

Hallo,

nein, so kann man keine Variable übergeben.

Aber "xy_Activate" kann auf alle Zellen, Properies und globale Variable zugreifen. Da sollte ein geeigneter Ansatz dabei sein.

mfg
F_en
 

Re: Variable an Userform übergeben

Beitragvon knobbi38 » 20. Mai 2022, 17:47

Hallo,

als erstes läuft UserForm_Initialize(), nicht _Activate()!
Wenn deine Userform nicht modal ist, kannst du anschließend im VBA Code eine Methode in der UF aufrufen, der du dann deine gewünschten Werte als Argumente mitgeben kannst, alternativ kann sich die Userform auch selber die Informationen holen.

Gruß Ulrich
knobbi38
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 4213
Registriert: 02. Jul 2015, 14:23

Re: Variable an Userform übergeben

Beitragvon Mullit » 20. Mai 2022, 21:18

Hallo,

am einfachsten geht sowas über die Tag-Eig., die kannst Du auch im Activate-Event verbraten, enthält allerdings die Variable immer als String, wäre dann ggf. zu konvertieren... 8-)

Code: Alles auswählen
Public Sub showform()
UserForm1.Tag = 4
Call UserForm1.Show
End Sub

im Form-Modul dann:
Code: Alles auswählen
Private Sub UserForm_Activate()
MsgBox Tag
End Sub

[edit] Du kannst den Wert nat auch als Parameter im Showaufruf übergeben:
Code: Alles auswählen
Option Explicit

Public Sub test()
Call showform(UserForm1, 4)
End Sub

Public Sub showform(ByVal pvobjUserForm As Object, ByVal pvlngValue As Long)
With pvobjUserForm
    .Tag = pvlngValue
    Call .Show
End With
End Sub

Gruß, Mullit
Mullit
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 977
Registriert: 16. Jan 2015, 19:31

Re: Variable an Userform übergeben

Beitragvon d'r Bastler » 21. Mai 2022, 16:24

Moin Calle,
wo kommt er her, Dein Wert und wo soll er hin?

Ein Möglichkeit z.B. im UserForm_Initialize als Wert aus einer Tabelle? und dann bei Bedarf an eine andere Sub zu übergeben werden?

Siehe Anhang ;-)

Den CommandButton kannst Du einsparen, wenn Du den Aufruf der Sub (Ohne Call, also ohne ()) in die Initialize schreibst.

Schönes Wochenende!
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
d'r Bastler

Selbst Heiden glauben an min. 10% Mystik in der EDV! Gilt auch für mein Win 10 pro & Office 2019, Win 11 pro & Office 2021 und alle VBAsteleien ... Aktueller Trollfutter-Vorrat: NULL
Benutzeravatar
d'r Bastler
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 646
Registriert: 23. Jan 2021, 22:36
Wohnort: VBAsteln makes the world go around

Re: Variable an Userform übergeben

Beitragvon DerHoepp » 21. Mai 2022, 20:25

Hallo und guten Abend auch von mir,

weil eine UserForm ja auch nur eine Klasse ist, solltest du dieser eine Methode spendieren, mit der der Aufrufer alles, was in der Schnittstellendefinition benötigt wird, übergibt. Das Anzeigen, Schließen, Rückgeben und sonstige übernimmt dann die UserForm.

Code: Alles auswählen
Option Explicit
'ClassName: SimpleQuestionaire
Private mRetVal As Variant

Public Function getAnswer(Question As String) As Variant
   Me.Label1.Caption = Question
   Me.Show
   getAnswer = mRetVal
End Function

Private Sub CommandButton1_Click()
   'OK
   mRetVal = Me.TextBox1.Text
   Me.Hide
End Sub

Private Sub CommandButton2_Click()
   'Cancel
   mRetVal = -1
   Me.Hide
End Sub

Und beim Aufrufer:
Code: Alles auswählen
Option Explicit
Sub Test()
   Dim FrageAntwort As New SimpleQuestionaire
   Dim Antwort as Variant
   Antwort = FrageAntwort.getAnswer("How many Roads must a man walk down?")
   If Antwort = -1 Then
      Debug.Print "Abbruch"
   Else
      Debug.Print Antwort
   End If
   'Der Aufrufer ist Herr über das konkrete Objekt einer Klasse und terminiert es, wenn es notwendig ist:
   Set FrageAntwort = Nothing
End Sub


Woher und wohin ist dabei egal, der Aufrufer hat die Kontrolle.
Viele Grüße
derHöpp
DerHoepp
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 10380
Registriert: 14. Mai 2013, 11:08

Re: Variable an Userform übergeben

Beitragvon d'r Bastler » 21. Mai 2022, 21:20

@Hoepp:

Er nun wieder :razz: !! Kommt mit Klassen-Programmierung ... Und ich hatte doch nur versucht, zu vereinfachen ... :badgrin:

Liebe Grüße und schönen Abend noch ;-)
d'r Bastler

Selbst Heiden glauben an min. 10% Mystik in der EDV! Gilt auch für mein Win 10 pro & Office 2019, Win 11 pro & Office 2021 und alle VBAsteleien ... Aktueller Trollfutter-Vorrat: NULL
Benutzeravatar
d'r Bastler
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 646
Registriert: 23. Jan 2021, 22:36
Wohnort: VBAsteln makes the world go around


Zurück zu Excel Forum (provisorisch)

Wer ist online?

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