Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

MsgBox mit Werten aus Schleife befüllen

Forumthread: MsgBox mit Werten aus Schleife befüllen

MsgBox mit Werten aus Schleife befüllen
02.08.2018 11:36:50
Andrea
Hallo zusammen,
ich habe eine Datei mit 6 Tabellen und möchte vor dem Speichern prüfen, ob in einer der Tabellen noch ein Fehlerwert enthalten ist. Wenn ja, soll eine Msgbox ausgegeben werden, die mir sagt, in welcher Tabelle (Angabe des Tabellennamens) wie viele Fehlerwerte auftauchen. Dazu habe ich bereits folgenden Code geschrieben:
Sub Fehler_hervorheben()
Dim ws          As Worksheet    'Referenz auf ein Worksheet
Dim sheetNr     As Long         'Nummer des aktuellen Sheets
Dim c           As Range
Dim Zähler      As Integer
For sheetNr = 1 To Worksheets.Count
Set ws = Worksheets(sheetNr)
Zähler = 0
For Each c In Worksheets(sheetNr).UsedRange
If IsError(c) Then Zähler = Zähler + 1
Next c
Next sheetNr
MsgBox Worksheets(1).Name & ": " & Zähler & vbLf & _
Worksheets(2).Name & ": " & Zähler & vbLf & _
Worksheets(3).Name & ": " & Zähler & vbLf & _
Worksheets(4).Name & ": " & Zähler & vbLf & _
Worksheets(5).Name & ": " & Zähler & vbLf & _
Worksheets(6).Name & ": " & Zähler
End Sub
Probleme:
1

In der Msgbox werden zwar die Blattnamen alle richtig angegeben, aber natürlich immer derselbe Fehleranzahlwert; nämlich der von der letzten Tabelle, da ich einfach nicht weiß, wie ich es anstellen soll, dass er sich den Zählerwert von jeder einzelnen Tabelle merkt.
2
Dumm ist auch, dass ich in der MsgBox die Namen der Tabellenblätter hart mit 1-6 angebe. Wenn ein 7. Blatt hinzukommt, dürfte es nicht mehr funktionieren. Wie kann ich auch das variabel halten?
Vielen Dank und beste Grüße
Andrea
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: MsgBox mit Werten aus Schleife befüllen
02.08.2018 11:54:05
MatthiasG
Hallo Andrea,
Ungetestet: Definiere einen String für die Fehlermeldung und erweitere diesen innerhalb der Schleife:

Dim msg As String
If IsError(c) Then
Zähler = Zähler + 1
msg = msg & Worksheets(sheetNr).Name & ": " & Zähler & vbLf
End If
' unten dann:
If Len(msg)>0 then MsgBox msg

Gruß Matthias
Anzeige
AW: MsgBox mit Werten aus Schleife befüllen
02.08.2018 11:57:16
Matthias
Hallo
Option Explicit
Sub Fehler_hervorheben()
Dim ws          As Worksheet    'Referenz auf ein Worksheet
Dim sheetNr     As Long         'Nummer des aktuellen Sheets
Dim c           As Range
Dim Zähler      As Integer
Dim Strg As String
For sheetNr = 1 To Worksheets.Count
Set ws = Worksheets(sheetNr)
Zähler = 0
For Each c In Worksheets(sheetNr).UsedRange
If IsError(c) Then Zähler = Zähler + 1
Next c
Strg = Strg & vbLf & Worksheets(sheetNr).Name & ": " & Zähler
Next sheetNr
MsgBox Strg
End Sub
Gruß Matthias
Anzeige
AW: MsgBox mit Werten aus Schleife befüllen
02.08.2018 11:59:51
EtoPHG
Hallo,
so:
    Dim ws As Worksheet
Dim c As Range
Dim Zähler As Long
Dim msg As String
For Each ws In Worksheets
For Each c In ws.UsedRange
If IsError(c) Then Zähler = Zähler + 1
Next c
msg = msg & ws.Name & ":" & Zähler & vbCrLf
Zähler = 0
Next ws
If Len(msg) > 0 Then MsgBox msg
Gruess Hansueli
Anzeige
AW: MsgBox mit Werten aus Schleife befüllen
02.08.2018 12:24:51
Andrea
Vielen Dank an alle. Klappt prima.
Gruß Andrea
;
Anzeige
Anzeige

Infobox / Tutorial

MsgBox mit Werten aus Schleife befüllen


Schritt-für-Schritt-Anleitung

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu starten.
  2. Füge ein neues Modul hinzu: Rechtsklick im Projekt-Explorer auf dein Projekt und wähle Einfügen > Modul.
  3. Kopiere den folgenden Code in das Modul:
Option Explicit

Sub Fehler_hervorheben()
    Dim ws As Worksheet
    Dim c As Range
    Dim Zähler As Long
    Dim msg As String

    For Each ws In Worksheets
        For Each c In ws.UsedRange
            If IsError(c) Then Zähler = Zähler + 1
        Next c
        msg = msg & ws.Name & ": " & Zähler & vbCrLf
        Zähler = 0
    Next ws

    If Len(msg) > 0 Then MsgBox msg
End Sub
  1. Schließe den VBA-Editor und kehre zu Excel zurück.
  2. Führe das Makro aus: Drücke ALT + F8, wähle Fehler_hervorheben und klicke auf Ausführen.

Häufige Fehler und Lösungen

  • Fehler: MsgBox zeigt nur einen Wert an
    Lösung: Stelle sicher, dass du den Zähler für jede Tabelle korrekt zurücksetzt, wie im obigen Code gezeigt.

  • Fehler: Das Makro funktioniert nicht bei neuen Tabellen
    Lösung: Überprüfe, ob du For Each ws In Worksheets verwendest, um alle Blätter dynamisch zu durchlaufen.


Alternative Methoden

Eine alternative Methode zur Verwendung von MsgBox ist die Verwendung eines Array, um die Fehlerzahlen zu speichern. Dies kann nützlich sein, wenn du die Werte später in einer anderen Form verwenden möchtest.

Dim FehlerArray() As String
ReDim FehlerArray(1 To Worksheets.Count)

Dim i As Integer
i = 1

For Each ws In Worksheets
    ' Zähle Fehler und speichere im Array
    FehlerArray(i) = ws.Name & ": " & Zähler
    i = i + 1
Next ws

MsgBox Join(FehlerArray, vbCrLf)

Praktische Beispiele

  • Beispiel 1: Wenn du in deinem Arbeitsblatt Fehlerwerte in einer Spalte hast, kann das Makro leicht angepasst werden, um nur diese Spalte zu prüfen.
  • Beispiel 2: Du kannst das MsgBox-Array verwenden, um eine Zusammenfassung der Fehler anzuzeigen, die du später in einem Bericht verwenden möchtest.

Tipps für Profis

  • Verwende Application.ScreenUpdating = False zu Beginn des Makros, um die Aktualisierung des Bildschirms während der Ausführung zu deaktivieren. Dies kann die Ausführung beschleunigen.
  • Nutze bedingte Formatierungen in Excel, um Fehlerwerte visuell hervorzuheben, zusätzlich zur MsgBox-Ausgabe.

FAQ: Häufige Fragen

1. Frage
Was mache ich, wenn ich mehrere Fehler gleichzeitig in einer Tabelle habe?
Antwort: Das aktuelle Skript zählt alle Fehler in der Tabelle. Wenn du spezifische Fehlerarten zählen möchtest, musst du die Fehlerarten im Code differenzieren.

2. Frage
Kann ich das Makro auch für bestimmte Arbeitsblätter anpassen?
Antwort: Ja, du kannst die Schleife anpassen, um nur die gewünschten Tabellen zu durchlaufen, indem du den Namen oder die Indizes der Blätter angibst.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige