Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

Überprüfung von Zellinhalten | Herbers Excel-Forum


Betrifft: Überprüfung von Zellinhalten von: Jay Tosh
Geschrieben am: 18.01.2010 10:56:28

Hallo zusammen,

sitz hier grad vor einem kleinem Problem, bei dem ich euch gerne um Hilfen bitten würde.

Ich habe eine Liste in der Reklamationen festgehalten werden sollen. Die Eingabe soll durch verschiedene Personen erfolgen, weshalb gewährleistet sein muss dass alle verlangten Eintragungen auch hinterlegt werden.
Eintragungen sollen in den Spalten A:H erfolgen.
Folgendes habe ich mit einem gewissen Erfolg bereits ausprobiert:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Dim Pflichtbereich As Range, Anzahl
    Set Pflichtbereich = Worksheets("Tabelle1").Range("A2:H15")
    Anzahl = Pflichtbereich.Cells.Count
    If Application.WorksheetFunction.CountA(Pflichtbereich) <> Anzahl Then
        MsgBox "Bitte füllen Sie zuerst alle Pflichtfelder aus !", vbOKOnly + vbInformation, _
            "Datei wurde NICHT gespeichert !"
        Cancel = True
    End If
End Sub

Funktioniert soweit auch, nur müsste dann ja immer der gesamt Bereich bis Zeile 15 gefüllt sein.

Ich bräuchte also einen Code, der z.B. erst anspringt wenn ein Eintrag in Spalte A vorhanden ist (dabei würde es sich un den Kunden handeln, der eigentlich immer verfügbar sein sollte).
Sobald also ein Eintrag in A vorhanden ist, soll abgeprüft werden, wie es in den Spalten B:H aussieht.

Schön fände ich es wenn neben der MsgBox auch die fehlenden Zellen eingefärbt werden (ohne Glitzer :-))

Hat jemand spontan eine Idee?

Besten Dank im Voraus!

Gruß
Jay

  

Betrifft: AW: Überprüfung von Zellinhalten von: Rudi Maintaire
Geschrieben am: 18.01.2010 11:10:16

Hallo,
ohne Einfärbung:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Dim Pflichtbereich As Range, Anzahl
    With Worksheets("Tabelle1")
    Set Pflichtbereich = _
      .Range(.Cells(2, 1), .Cells(Rows.Count, 1).End(xlUp)).Resize(, 8)
    End With
    Anzahl = Pflichtbereich.Cells.Count
    If Application.WorksheetFunction.CountA(Pflichtbereich) <> Anzahl Then
        MsgBox "Bitte füllen Sie zuerst alle Pflichtfelder aus !", vbOKOnly + vbInformation, _
            "Datei wurde NICHT gespeichert !"
        Cancel = True
    End If
End Sub

Gruß
Rudi


  

Betrifft: AW: Überprüfung von Zellinhalten von: Jay Tosh
Geschrieben am: 18.01.2010 11:26:33

Hallo Rudi,

vielen Dank für Deine rasche Antwort. Funktioniert einwandfrei!

Kannst Du mir die Zeile vielleicht kurz erklären, was genau passiert da jetzt? Wäre schön es auch richtig zu verstehen...

Set Pflichtbereich = _
.Range(.Cells(2, 1), .Cells(Rows.Count, 1).End(xlUp)).Resize(, 8)


Dankeschön schonmal!

Für das Einfärben hast Du keine Idee? Wäre noch so ein Sahnehäubchen. Alternativ vielleicht eine Angabe in der MsgBox wo der/die Eintrag/Einträge fehlen.

Vielen Dank.

Gruß
Jay


  

Betrifft: AW: Überprüfung von Zellinhalten von: Luschi
Geschrieben am: 18.01.2010 11:57:42

Hallo Jay,

.Range(.Cells(2, 1), .Cells(Rows.Count, 1).End(xlUp)) ergibt in der Tabelle1 den Zellbereich von A2:A?,
wobei das Fragezeichen die Zeilennummer der letzen belegten Zelle in der Spalte A entspricht:
z.B: A2:A201
.Resize(, 8) verbreitert nun diesen Zellbereich auf 8 Spalten, so das jetzt der Plichtbereich folgenden Zellbereich umfaßt:
A2:H201

Gruß von Luschi
aus klein-Paris


  

Betrifft: AW: Überprüfung von Zellinhalten von: Jay Tosh
Geschrieben am: 18.01.2010 15:42:16

Hallo Luschi,

super, dankeschön. Das Verständnis hilft hoffentlich bei der nächsten Aufgabe :-)

Gruß
Jay


  

Betrifft: AW: Überprüfung von Zellinhalten von: Tino
Geschrieben am: 18.01.2010 11:42:35

Hallo,
geht es hiermit.
Für die Farbliche darstellung verwende ich die Bedingte Formatierung.

Private Function CheckInhalt(rngBereich As Range) As Range
If Application.WorksheetFunction.CountIf(rngBereich, "") = 0 Then Exit Function
For Each rngBereich In rngBereich
 If rngBereich = "" Then
    If CheckInhalt Is Nothing Then
        Set CheckInhalt = rngBereich
    Else
        Set CheckInhalt = Union(CheckInhalt, rngBereich)
    End If
 End If
Next rngBereich
End Function

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim Bereich As Range, rngZelle As Range, rngLeer As Range
Dim strInfo As String

'Tabewlle anpassen 
With Sheets("Tabelle1")
    .Range("A:H").FormatConditions.Delete
    
    Set rngZelle = .Range("A2", .Cells(.Rows.Count, 1).End(xlUp))
    If Not Intersect(rngZelle, .Rows(1)) Is Nothing Then Exit Sub
    
    For Each rngZelle In rngZelle
     If rngZelle <> "" Then
        
        Set rngLeer = CheckInhalt(.Range(.Cells(rngZelle.Row, 1), .Cells(rngZelle.Row, 8)))
       
        If Not rngLeer Is Nothing Then
         strInfo = strInfo & rngLeer.Address(0, 0) & vbCr
         rngLeer.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, Formula1:="="""""
         rngLeer.FormatConditions(1).Interior.ColorIndex = 3
         Set rngLeer = Nothing
        End If
     
     End If
    Next rngZelle
End With


If strInfo <> "" Then
    strInfo = Left$(strInfo, Len(strInfo) - 1)
    MsgBox "Bitte füllen Sie zuerst alle Pflichtfelder aus !" & vbCr & vbCr & strInfo, vbCritical, _
            "Datei wurde nicht gespeichert!"
    Cancel = True
End If

End Sub
Gruß Tino


  

Betrifft: AW: Überprüfung von Zellinhalten von: Jay Tosh
Geschrieben am: 18.01.2010 11:55:43

Hallo Tino,

Perfekt! Vielen Dank!

Gruß
Jay


Beiträge aus den Excel-Beispielen zum Thema "Überprüfung von Zellinhalten"