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

Variablen in Array speichern und in MsgBox ausgebe

Forumthread: Variablen in Array speichern und in MsgBox ausgebe

Variablen in Array speichern und in MsgBox ausgebe
17.01.2007 19:09:44
Timo
Hallo!
Mit dem folgenden Makro durchsuche ich eine Arbeitsmappe nach bestimmten Tabellenblättern und drucke diese aus. Am Ende wird die Anzahl der gedruckten Blätter angezeigt.
Nun mein Problem: Ich möchte alle die Nummern, die nicht gefunden wurden, mit in der MsgBox ausgeben. Ich habe es schon mit einem Array versucht, doch wie kann ich diese Werte dann in der MsgBox ausgeben?
Hat jemand eine bessere Idee?

Private Sub FindSheets()
Dim ArtNr
Dim MySheet
Dim Max As Integer, Gedruckt As Integer
Gedruckt = 0
Sheets("0000-START").Select
For Max = 1 To 100
If Cells(Max, 1).Value = "" Then Exit For
Next
For x = 2 To Max - 1
ArtNr = Worksheets("0000-START").Cells(x, 1)
If ArtNr = "" Then Exit Sub
For Each MySheet In ActiveWorkbook.Worksheets
If InStr(MySheet.Name, ArtNr) Then
Sheets(MySheet.Name).Select
Worksheets(MySheet.Name).PrintOut Copies:=1, Collate:=True
Gedruckt = Gedruckt + 1
Exit For
Else
'nichts
End If
Next
' Hier die werte ins Array eintragen!?!
Next
MsgTmp = MsgBox("  Artikel insgesamt: " & Max - 2 & Chr(13) _
& "  davon gedruckt: " & Gedruckt & Chr(13) _
& "  Unbekannte Artikel: " & (Max - 2) - Gedruckt, vbInformation + vbOKOnly, "Info")
' hier sollen außerdem die fehlenden Nummern angezeigt werden
End Sub

Meine Zweite Frage:
Ist es möglich, ein UserForm an eine Tabelle zubinden, sodass beim kopieren der Tabelle in eine andere Arbeitsmappe auch das Formular mit kopiert wird?
danke im voraus
Timo
Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Variablen in Array speichern und in MsgBox ausgebe
17.01.2007 21:11:49
Josef
Hallo Timo,
vielleicht so.
Private Sub FindSheets()
    Dim ArtNr As Variant
    Dim MySheet As Worksheet
    Dim lngRow As Long, lngC As Long
    Dim Gedruckt As Integer
    Dim strMissing As String
    
    lngRow = Sheets("0000-START").Cells(Rows.Count, 1).End(xlUp).Row
    
    For lngC = 2 To lngRow
        ArtNr = Worksheets("0000-START").Cells(lngC, 1)
        If ArtNr = "" Then Exit Sub
        For Each MySheet In ActiveWorkbook.Worksheets
            If InStr(1, MySheet.Name, ArtNr) > 0 Then
                MySheet.PrintOut
                Gedruckt = Gedruckt + 1
                Exit For
            Else
                strMissing = strMissing & ArtNr & vbLf
            End If
        Next
    Next
    
    MsgTmp = MsgBox(" Artikel insgesamt: " & lngRow - 2 & vbLf _
        & " davon gedruckt: " & Gedruckt & vbLf _
        & " Unbekannte Artikel: " & (lngRow - 2) - Gedruckt & vbLf _
        & " Unbekannte Artikelnummern:" & vbLf & vbLf & strMissing, _
        vbInformation + vbOKOnly, "Info")
    
End Sub

Gruß Sepp
Anzeige
AW: Variablen in Array speichern und in MsgBox ausgebe
18.01.2007 17:53:15
Timo
Erstmal danke - jedoch wird bei jedem Aufruf von "if InStr" die fehlende Nummer eingetragen, wenn ein falsches Blatt ausgewählt ist - ich habe etwa 20x jeden Artikel als fehlend in strMissing stehen - läßt sich das auf einmal beschränken?
Gruß aus dem stürmischen Norden
Timo
AW: Variablen in Array speichern und in MsgBox ausgebe
18.01.2007 20:00:12
Josef
Hallo Timo,
ungetestet.
Private Sub FindSheets()
    Dim ArtNr As Variant
    Dim MySheet As Worksheet
    Dim lngRow As Long, lngC As Long
    Dim Gedruckt As Integer, intIndex As Integer
    Dim strMissing As String
    
    lngRow = Sheets("0000-START").Cells(Rows.Count, 1).End(xlUp).Row
    
    For lngC = 2 To lngRow
        ArtNr = Worksheets("0000-START").Cells(lngC, 1)
        If ArtNr = "" Then Exit Sub
        For Each MySheet In ActiveWorkbook.Worksheets
            If InStr(1, MySheet.Name, ArtNr) > 0 Then
                MySheet.PrintOut
                Gedruckt = Gedruckt + 1
                Exit For
            Else
                If intIndex = 0 Then
                    Redim vTmp(0) As Variant
                    vTmp(0) = ArtNr
                    intIndex = intIndex + 1
                Else
                    If IsError(Application.Match(ArtNr, vTmp, 0)) Then
                        Redim Preserve vTmp(intIndex)
                        vTmp(intIndex) = ArtNr
                        intIndex = intIndex + 1
                    End If
                End If
            End If
        Next
    Next
    
    If intIndex > 0 Then strMissing = Join(vTmp, vbLf)
    
    MsgTmp = MsgBox(" Artikel insgesamt: " & lngRow - 2 & vbLf _
        & " davon gedruckt: " & Gedruckt & vbLf _
        & " Unbekannte Artikel: " & (lngRow - 2) - Gedruckt & vbLf _
        & " Unbekannte Artikelnummern:" & vbLf & vbLf & strMissing, _
        vbInformation + vbOKOnly, "Info")
    
End Sub

Gruß Sepp
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Variablen in einem Array speichern und in MsgBox ausgeben


Schritt-für-Schritt-Anleitung

Um Variablen in einem Array zu speichern und diese in einer MsgBox auszugeben, kannst Du folgenden VBA-Code verwenden. Hier wird eine Liste von Artikelnummern erstellt und in einer MsgBox angezeigt, auch wenn einige Nummern nicht gefunden wurden.

Private Sub FindSheets()
    Dim ArtNr As Variant
    Dim MySheet As Worksheet
    Dim lngRow As Long, lngC As Long
    Dim Gedruckt As Integer
    Dim strMissing As String
    Dim intIndex As Integer
    Dim vTmp() As Variant

    lngRow = Sheets("0000-START").Cells(Rows.Count, 1).End(xlUp).Row

    For lngC = 2 To lngRow
        ArtNr = Worksheets("0000-START").Cells(lngC, 1)
        If ArtNr = "" Then Exit Sub
        For Each MySheet In ActiveWorkbook.Worksheets
            If InStr(1, MySheet.Name, ArtNr) > 0 Then
                MySheet.PrintOut
                Gedruckt = Gedruckt + 1
                Exit For
            Else
                If intIndex = 0 Then
                    ReDim vTmp(0) As Variant
                    vTmp(0) = ArtNr
                    intIndex = intIndex + 1
                Else
                    If IsError(Application.Match(ArtNr, vTmp, 0)) Then
                        ReDim Preserve vTmp(intIndex)
                        vTmp(intIndex) = ArtNr
                        intIndex = intIndex + 1
                    End If
                End If
            End If
        Next
    Next

    If intIndex > 0 Then strMissing = Join(vTmp, vbLf)

    MsgBox "Artikel insgesamt: " & lngRow - 2 & vbLf & _
           "davon gedruckt: " & Gedruckt & vbLf & _
           "Unbekannte Artikel: " & (lngRow - 2) - Gedruckt & vbLf & _
           "Unbekannte Artikelnummern:" & vbLf & vbLf & strMissing, _
           vbInformation + vbOKOnly, "Info"
End Sub

Häufige Fehler und Lösungen

  1. Falsche MsgBox-Anzeige: Wenn die MsgBox nicht die erwarteten Werte anzeigt, überprüfe, ob die Artikelnummern korrekt in das Array eingefügt werden. Achte darauf, dass ReDim Preserve verwendet wird, um das Array zu vergrößern, ohne die bestehenden Werte zu verlieren.

  2. Array bleibt leer: Wenn das Array leer bleibt, stelle sicher, dass die Schleife, die die Worksheets durchläuft, tatsächlich die richtigen Bedingungen erfüllt. Teste die InStr-Bedingung.


Alternative Methoden

Eine alternative Methode zur Ausgabe von Array-Werten in einer MsgBox könnte die Verwendung von Debug.Print sein, um die Werte in das Immediate-Fenster von VBA zu drucken, anstatt sie in einer MsgBox anzuzeigen. Dies kann hilfreich sein, um sicherzustellen, dass alle Werte korrekt erfasst werden, bevor Du sie in eine MsgBox ausgibst.


Praktische Beispiele

Angenommen, Du hast eine Excel-Tabelle mit Artikelnummern in der Spalte A. Der oben angegebene VBA-Code sucht nach diesen Nummern in den Arbeitsblättern der Arbeitsmappe und gibt die fehlenden Artikelnummern in einer MsgBox aus. Dies ist besonders nützlich, wenn Du sicherstellen möchtest, dass alle Artikel gedruckt werden und Du eine Übersicht der nicht gefundenen Artikel benötigst.


Tipps für Profis

  • Optimierung der Suche: Verwende anstelle von InStr die Methode WorksheetFunction.CountIf, um die Suche nach den Arbeitsblättern zu optimieren, wenn Du weißt, dass die Namen in einer bestimmten Form vorliegen.

  • Fehlerbehandlung: Füge eine Fehlerbehandlung hinzu, um sicherzustellen, dass der Code nicht abstürzt, wenn ein Arbeitsblatt nicht gefunden wird oder andere unerwartete Fehler auftreten.


FAQ: Häufige Fragen

1. Wie kann ich die MsgBox anpassen, um mehr Informationen anzuzeigen?
Du kannst den Text in der MsgBox anpassen, indem Du weitere Variablen und Informationen hinzufügst. Nutze die Verkettung von Strings, um den gewünschten Text zu formatieren.

2. Funktioniert dieser Code in allen Excel-Versionen?
Ja, der Code ist für Excel VBA ausgelegt und sollte in den meisten Versionen von Excel funktionieren, solange die VBA-Umgebung unterstützt wird.

3. Was tun, wenn die MsgBox zu viele Informationen anzeigt?
Wenn die MsgBox zu viele Informationen anzeigt, kannst Du die Anzahl der angezeigten Artikelnummern begrenzen, indem Du nur die ersten n fehlenden Artikel anzeigst oder die Ausgabe in mehrere MsgBoxen aufteilst.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige