Microsoft Excel

Herbers Excel/VBA-Archiv

Variable ändern anhand aktivierter Multipageseite


Betrifft: Variable ändern anhand aktivierter Multipageseite
von: Dominik
Geschrieben am: 06.12.2018 06:32:45

Hallo zusammen,

ich vermute ein überschaubares Problem, hänge aber gerade genau daran fest:

Ich habe eine Userform mit Multipage (mpgPage1), diese hat zwei Seiten.

Nun will ich, dass eine Variable (g_ZurBerechnung) auf "True" gesetzt wird, wenn der User über die Reiter auf die 2. Seite (Index/Value = 1) wechselt.

Ich habe es unter anderem so versucht:

Private Sub mpgPage1_Click(ByVal Index As Long)
  
  If mpgPage1.Value = 1 Then
    g_ZurBerechnung = True
  End If
Leider hat das und viele andere Versuche nicht geklappt und daher hoffe ich, dass mir jemand aushelfen kann. Vielen Dank schon einmal im voraus!

Viele Grüße aus Nürnberg,
Dominik

  

Betrifft: Variable ändern anhand aktivierter Multipageseite
von: Nepumuk
Geschrieben am: 06.12.2018 08:42:46

Hallo Dominik,

teste mal:

Private Sub mpgPage1_Change()
    g_ZurBerechnung = mpgPage1.Value = 1
End Sub

Gruß
Nepumuk


  

Betrifft: AW: Variable ändern
von: Dominik
Geschrieben am: 06.12.2018 09:09:14

Hallo Nepumuk,

danke für den Tipp, leider führt das nun zu dem Ergebnis, das die Variable schon immer umgestellt wird, wenn die Userform automatisiert die Controls (auch auf Seite 2 (Index = 1) setzt.

Ich muss mal sehen, ob ich das irgendwie umgehen kann :)

Viele grüße,
Dominik


  

Betrifft: AW: Variable ändern anhand aktivierter Multipageseite
von: UweD
Geschrieben am: 06.12.2018 08:45:52

Hallo

so...

Private Sub MultiPage1_Click(ByVal Index As Long)
    Dim g_ZurBerechnung
    g_ZurBerechnung = (Index = 1) '0=page1; 1=page2 
    
    MsgBox g_ZurBerechnung
End Sub

LG UweD


  

Betrifft: AW: Variable ändern
von: Dominik
Geschrieben am: 06.12.2018 09:12:05

Hallo UweD,

danke für den Hinweis, leider führt das nun zu dem Ergebnis, das die Variable schon immer umgestellt wird, wenn die Userform automatisiert die Controls (auch auf Seite 2 (Index = 1) setzt.

Ich bemühe mich weiter um eine Lösung :)

Viele Grüße,
Dominik


  

Betrifft: AW: Variable ändern
von: UweD
Geschrieben am: 06.12.2018 09:39:47

WANN soll denn genau WAS geschehen??


  

Betrifft: AW: Variable ändern
von: Dominik
Geschrieben am: 06.12.2018 09:52:46

Die Maske startet mit Aufruf der Vorlage, angezeigt wird die Userform "start". Diese beinhaltet eine Multipage mit zwei Seiten, sowie darunter verschiedene Controlbuttons zum Abschluss der Vorlage.

Die Controlbuttons sind deaktiviert bis der User die Angaben auf Seite 1 der Multipage gemacht hat UND zumindest Seite 2 aufgerufen hat.

Seite 2 kann der User aktuell über

a) einen Controlbutton auf Seite 1 und
b) den Klick auf den Reiter oben

erreichen.

Beim Klick auf den Controlbutton wird bereits eine globale Variable (g_zurBerechnung) auf true gesetzt, das funktioniert. Nun soll aber der User, der über den Klick auf den Reiter Seite 2 aufruft, ebenfalls den Dokumentabschluss erreichen können, aber erst SOBALD er Seite 2 tatsächlich aufgerufen hat.

Da die Userform regelmäßig prüft, wie die Controls (Checkboxen, Textfelder etc.) aktiviert sein sollen und auch je nach Auswahl auf Seite 1 ein paar Felder auf Seite 2 bereits vorbelegt, scheint die genannte Lösung direkt beim Start schon die Variable auf True zu setzen. So zumindest meine Semi-laienhafte Erkenntnis.


  

Betrifft: Musterdatei???
von: UweD
Geschrieben am: 06.12.2018 10:22:06




  

Betrifft: AW: Musterdatei???
von: Dominik
Geschrieben am: 06.12.2018 12:03:49

Eine Musterdatei kann ich leider nicht zur Verfügung stellen, da die Vorlage auf eine Vielzahl Routine aus unserem internen System zurückgreift und Daten entsprechend auch aus Schnittstellen lädt. Das würde natürlich außerhalb unserer Umgebung nicht mehr funktionieren, leider.


  

Betrifft: AW: Musterdatei???
von: Daniel
Geschrieben am: 06.12.2018 12:06:53

Die Musterdatei muss nur die Inhalte enthalten, die benötigt werden um dein Problem aufzuzeigen (Multipage, Variablenzuweisung)
alles andere kannst du löschen oder du erstellst eine neue Datei mit den benötigten Inhalten.
Gruß Daniel


  

Betrifft: Die Lösung
von: Dominik
Geschrieben am: 11.12.2018 13:50:31

Hallo,

entschuldigt, dass es etwas gedauert hat, ich kam die letzten Tage nicht dazu, mich damit zu beschäftigen.

Ich konnte nun mit etwas Hilfe die Lösung finden:

Im VBA-Editor war die 2. Seite (1) der Multipage zuletzt angewählt und wurde im Vorlagenstart auf Seite 1 (0) gesetzt, dadurch hatte er jedes mal das Change-Ereignis bzw. die Anwahl der Seite 2 (1) gehabt, ehe auf Seite 1 (0) gewechselt wurde. Um das zu lösen musste ich dann natürlich nur im Editor Seite 1 (0) der Maske anwählen und speichern.

Kleine Sachen können sich manchmal als große Stolpersteine herausstellen.

Vielen Dank an alle für die Hilfe!


  

Betrifft: AW: Variable ändern anhand aktivierter Multipageseite
von: Daniel
Geschrieben am: 06.12.2018 08:55:36

Hi
hast du die Variable g_ZurBerechnung irgendwo deklariert?
wenn ja, wo?
damit du diese Variable auch in anderen Makro nutzen kannst, muss sie im Modul der Userform, oberhalb der Makros mit

Dim g_ZurBerechnung as boolean

deklariert werden, dann ist sie für alle Makros, die sich in diesem Modul befinden, verwendbar.
Oder du deklarierst sie in einem allgemeinen Modul oberhalb der der Makors mit
Public g_ZurBerechnung as boolean

dann ist sie für alle Makros des Projekts verwendbar.
innerhalb der Makros darfst du diese Variable dann nicht mehr deklarieren.

zum Code, der ist etwas umständlich.
wie schon gezeigt, ein
g_ZurBerechnung = mpgPage1.Value = 1

reicht aus.


Gruß Daniel


  

Betrifft: AW: Variable ändern
von: Dominik
Geschrieben am: 06.12.2018 09:13:51

Hallo Daniel,

danke dir erstmal. Die Variable war global als Boolean definiert, ein anderer "Switch" über ein cmd-Button funktioniert auch problemlos.

Der geänderte Code führt leider nun zu dem Ergebnis, das die Variable schon immer umgestellt wird, wenn die Userform automatisiert die Controls (auch auf Seite 2 (Index = 1) setzt.

Ich suche weiter nach Möglichkeiten und gebe Bescheid, wenn ich etwas gefunden habe.

Viele Grüße,
Dominik