178 Aufrufe
Gefragt in Tabellenkalkulation von

Moin zusammen, 

ich habe eine Excel Arbeitsmappe mit mehreren Tabellenblättern, bspw. 10. Auf drei dieser Tabellenblätter möchte ich beim Öffnen eine Userform anzeigen lassen. 

Folgender Code funktioniert einwandfrei:

Private Sub Worksheet_Activate()
UserForm1.Show
End Sub

Nun möchte ich allerdings, dass die Userform nur beim ersten Aufruf des Tabelleblattes geöffnet wird. Wenn ich weiterhin in der Arbeitsmappe arbeite, auf andere Tabellenblätter klicke und dann wieder auf eins der drei Tabellenblätter klicke, auf denen sich die Userform während meiner derzeitigen Sitzung schon geöffnet hat, soll es sich nicht noch einmal öffnen. 

Kann mit hier jemand helfen? Vielen Dank schon mal 

3 Antworten

0 Punkte
Beantwortet von beverly_ Experte (3.3k Punkte)

Hi,

definiere in einem Stamdardmodul eine Public-Variable - z.B. so:

Public strOffen As String

Deinen Code für das Anzeigen des Userforms schreibst du dann so:

Private Sub Worksheet_Activate()
    If InStr(strOffen, ActiveSheet.Name) = 0 Then
        strOffen = strOffen & ActiveSheet.Name
        UserForm1.Show
    End If
End Sub

Bis später, Karin

0 Punkte
Beantwortet von computerschrat Profi (32.3k Punkte)

Hallo Noreia,

deklariere zu Beginn eine Variable in der du merkst, dass die Form bereits angezeigt wurde und setze sie auf false. Vor dem Anzeigen prüfst du und zeigst nur an, wenn die Variable noch false war. Nach dem Anzeigen der Form setzt du die Variable als true.Ich kann für die richtige Syntax im folgenden Code nicht garantieren, da ich nie in VB programmiert habesad

Also

Zu Beginn beim Öffnen der Datei

Dim schonAngezeigt As Boolean
schonAngezeigt = False

und dann in deiner Anzeigeroutine:

Private Sub Worksheet_Activate()
   If schonAngezeigt = False Then
       UserForm1.Show
       schonAngezeigt = True
   End If
End Sub

Gruß computerschrat

0 Punkte
Beantwortet von vbastler Mitglied (228 Punkte)

Moin Noreia,

hier noch eine ganz einfache Lösung - allerdings verbunden mit einer weiterführenden Frage. 

Du definierst in einem Allg. Modul eine Public Variable namens isShown (=wurde schon gezeigt). Diese wird beim Öffnen Deiner Arbeitsmappe immer als Falsch/false gesetzt.

Public isShown as Boolean

Wenn Du nun ein Arbeitsblatt aktivierst, wird diese Variable abgefragt. Steht sie auf Falsch/False, wird Deine Userform als neu angezeigt.

Sub WorkSheet_Activate()

     If  isShown = False Then

 UserForm1.Show

End If

End Sub

Nun ist aber noch die Frage, was soll passieren, wenn Du das Arbeitsblatt wechselst? Soll die USF weiterhin sichtbar sein, oder ausgeblendet werden? Lass wissen!

Grüße

d'r Bastler von den VBAsteleien.de

...