exceluserin
Goto Top

VBA Excel Pflichtfelder

Hallo zusammen,

ich arbeite gerade an einer Tabelle, bei der ich folgendes versuche :

Es soll, sobald die Zellen D5 bis D35 und I5 bis I35 ausgefüllt sind und der Benutzer versucht, die Tabelle so zu schliessen, verhindert werden, dass es abgespeichert werden kann und eine Meldung erscheint, dass man z.B. die Zellen B5 bis P5 ausfüllen muss.

Leider kenne ich mich überhaupt nicht mit VBA aus... ich hoffe, ihr könnt mir helfen face-smile

Liebe Grüsse

Lou

Content-Key: 246380

Url: https://administrator.de/contentid/246380

Printed on: April 18, 2024 at 21:04 o'clock

Member: colinardo
colinardo Aug 13, 2014 updated at 16:19:58 (UTC)
Goto Top
Hallo Lou, Willkommen auf Administrator.de!
Kannst folgendermaßen machen, wenn du den Bereich B5:P5 auf Inhalt prüfen willst. Hierbei ist es bei diesem Code wichtig das bevor du den Code in das Workbook einfügst die Datei vorher abspeicherst und dann im Explorer die Eigenschaft Inhaltsstatus auf dem Tab Details auf Entwurf festlegst bzw. eingibst (Dokument natürlich vorher schließen).

cd6e22ce143767612ddcc3389257a93d

Der Hintergrund dafür ist, das das BeforeSave-Event auch anspricht während du das Dokument im Entwurf bearbeitest und es so bei leeren Zellen im Bereich B5:P5 das Dokument nicht speichern würde. Deswegen legst du die Eigenschaft während des Entwurfs auf diesen Wert, und wenn du fertig zum Verteilen der Datei bist, löschst du den Wert nach dem Schließen der Datei im Explorer raus. Damit wird dann das Makro quasi "scharf" geschaltet, das Makro prüft nämlich auf diesen Wert.
'Event wird vor jedem Speichern ausgeführt  
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    ' Nur wenn die Dokumenteigenschaft nicht auf 'Entwurf' steht führe die Abfrage-Routine aus  
    If Not ActiveWorkbook.BuiltinDocumentProperties.Item("Content Status") = "Entwurf" Then  
        'Prüfe jede Zelle im Bereich B5:P5 auf Inhalt  
        For Each cell In Worksheets(1).Range("B5:P5")  
            ' wenn die Zelle leer ist gebe eine Warnung aus, und breche den Speichervorgang ab  
            If cell.Value = "" Then  
                MsgBox "Es wurden nicht alle Pflichtfelder ausgefüllt!", vbCritical  
                ' Speichervorgang abbrechen  
                Cancel = True
                Exit For
            End If
        Next
    End If
End Sub
Hinweis: Der Code muss im VBA-Editor (ALT-F11) im Abschnitt DieseArbeitsmappe eingefügt werden, sonst wird der Event-Handler nicht ausgeführt.

Grüße Uwe