Thema Datum  Von Nutzer Rating
Antwort
Rot Laufzeitfehler 400: Formular wird bereits angezeigt und kann ...
29.11.2018 13:10:53 Jerome
Solved
29.11.2018 16:15:54 Gast51438
NotSolved
29.11.2018 16:21:11 Gast58651
NotSolved
29.11.2018 17:52:39 Gast69660
NotSolved

Ansicht des Beitrags:
Von:
Jerome
Datum:
29.11.2018 13:10:53
Views:
854
Rating: Antwort:
 Nein
Thema:
Laufzeitfehler 400: Formular wird bereits angezeigt und kann ...

Hallo zusammen,

ich habe gerade damit begonnen mich mit VBA zu beschäftigen und bin auf mein erstes kleinere Problem gestoßen, dass ich bisher nicht selbst oder mit google lösen konnte. Ich glaube zwar den Grund zu kennen warum das Problem verursacht wird, habe aber keine Lösung parat (vll bin ich auch auf dem Holzweg). Daher wäre Hilfe von euch wirklich super :)

 

Ich habe einer Userform erstellt, über welche der Benutzer vor dem Speichern über ein paar Dinge abgefragt wird (diese werden anschlißend in einem separatem Arbeitsblatt protokolliert). Wenn das Arbeitsball noch nicht existiert wird es angelegt, ansonsten nur die Werte übertragen. Wenn ich nun versuche die Excel Datei zu speichern öffnet sich die Userform, ich kann die Werte eingeben, diese werden übertragen, jedoch kommt es dann zum Laufzeitfehler 400: "Formular wird bereits angezeigt..."

Das ganze leite ich über das Ereigniss Workbook_BeforSave im Bereich der Arbeitsmappe ein. Hier der Code dazu:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
 
     UserForm1.Show
  
End Sub

Und hier der Code der UserForm:

Private Sub abbrechenButton_Click()
    'Eingabefensterschließen
    Unload UserForm1
End Sub

Private Sub saveButton1_Click()

Dim strBlattName As String
strBlattName = "Protokollierung"
On Error Resume Next
Worksheets(strBlattName).Activate

    If Err.Number <> 0 Then
        Err.Clear
        MsgBox "Blatt [" & strBlattName & "] nicht vorhanden! Wird automatisch angelegt!"
            Worksheets.Add
            ActiveSheet.Name = "Protokollierung"
            ActiveSheet.Move After:=Sheets(Sheets.Count)
            Range("A1:D1").Font.Bold = True
            Range("A1:D1").Interior.ColorIndex = 8
            Range("A1").Value = "Name"
            Range("B1").Value = "Datum"
            Range("C1").Value = "Zeit"
            Range("D1").Value = "Kommentar"
            Columns("D:D").ColumnWidth = 70
            Worksheets("Protokollierung").Range("A2") = NameBox1
            Worksheets("Protokollierung").Range("B2") = DatumBox1
            Worksheets("Protokollierung").Range("C2") = TimeBox1
            Worksheets("Protokollierung").Range("D2") = Commend
            ThisWorkbook.Save
            MsgBox "Änderungen gespeichert und protokolliert."
            ThisWorkbook.Close
    Else
            Worksheets(strBlattName).Activate
            Rows("2:2").Select
            Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
            Range("A3:D3").Select
            Selection.Copy
            Range("A2:D2").Select
            Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
            SkipBlanks:=False, Transpose:=False
            Application.CutCopyMode = False
            Worksheets("Protokollierung").Range("A2") = NameBox1
            Worksheets("Protokollierung").Range("B2") = DatumBox1
            Worksheets("Protokollierung").Range("C2") = TimeBox1
            Worksheets("Protokollierung").Range("D2") = Commend
            ThisWorkbook.Save
            MsgBox "Änderungen gespeichert und protokolliert."
            ThisWorkbook.Close
    End If
End Sub

Private Sub UserForm_Initialize()
'Für Kombofeld Name
    With UserForm1.NameBox1
        .AddItem "Eberle"   'nullter Begriff
        .AddItem "Müller"  'erster Begriff
        .AddItem ".."
        .AddItem ".."
        '.ListIndex = 0      'Sorgt dafür das von Beginn ein Begriff angezeigt wird
    End With
    
    UserForm1.DatumBox1.Value = Date
    UserForm1.TimeBox1.Value = Time
End Sub

Ich gehe davon aus, dass der Fehler deshalb auftritt, da durch das Klicken des speichern Buttons in der UserForm der Befehl "ThisWorkbook.Save" ausgeführt wird, und diese eben auch ein Ereignis in der Arbeitsmappe darstellt und somit das Programm von vorne gestartet wird.

 

Gibt es eine Möglichkeit das Ereignis Speichern über den Befehl "ThisWorkbook.Save" in der UserForm aus dem "Private Sub Workbook_BeforeSave" herauszunehmen? Oder eventuell eine ganz andere Lösung?

 

Würde mich über eure Hilfe sehr freuen. Mit Sicherheit hat mein Code auch noch weitere Schwachstellen und kann optimiert werden, mir geht es aber erstmal drum, dass es überhaupt funktioniert. Vielen Dank und Grüße

 

Jerome

 


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:

 
 

  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
Rot Laufzeitfehler 400: Formular wird bereits angezeigt und kann ...
29.11.2018 13:10:53 Jerome
Solved
29.11.2018 16:15:54 Gast51438
NotSolved
29.11.2018 16:21:11 Gast58651
NotSolved
29.11.2018 17:52:39 Gast69660
NotSolved