Registrierkasse in Excel: So erstellst du eine Übersicht mit VBA
Schritt-für-Schritt-Anleitung
- 
Öffne Excel und erstelle ein neues Arbeitsblatt oder öffne dein bestehendes Projekt.
 
- 
Öffne den VBA-Editor: Drücke ALT + F11.
 
- 
Füge ein neues Modul hinzu: Klicke mit der rechten Maustaste auf "VBAProject (deine Datei)", wähle Einfügen und dann Modul.
 
- 
Kopiere den VBA-Code von Klaus, um eine Übersicht aller Gäste zu erstellen:
Sub AlleGaeste()
   Dim ws As Worksheet
   Dim z As Long
   z = 2
   Sheets.Add
   Cells.ClearContents
   For Each ws In Worksheets
       Select Case ws.Name
           Case "Gesamt", "Vorlage", ActiveSheet.Name
           Case Else
               Cells(z, 1).Value = ws.Name
               z = z + 1
               ActiveSheet.Hyperlinks.Add Anchor:=Cells(z, 1), Address:="", SubAddress:=ws.Name & "!A1", TextToDisplay:=ws.Name
       End Select
   Next ws
   Range(Cells(2, 2), Cells(z, 2)).FormulaR1C1 = "=INDIRECT(RC[-1]&""!F31"")"
   Range(Cells(2, 3), Cells(z, 3)).FormulaR1C1 = "=INDIRECT(RC[-2]&""!H2"")"
   Range("A1").Value = "Name"
   Range("B1").Value = "Betrag"
   Range("C1").Value = "bezahlt?"
End Sub
 
- 
Führe das Makro aus: Schließe den VBA-Editor und kehre zu Excel zurück. Drücke ALT + F8, wähle AlleGaeste und klicke auf Ausführen.
 
Häufige Fehler und Lösungen
- 
Fehler beim Kompilieren: Syntaxfehler: Achte darauf, dass die Zeile, die den Hyperlink hinzufügt, nicht umgebrochen ist. Der korrekte Code lautet:
ActiveSheet.Hyperlinks.Add Anchor:=Cells(z, 1), Address:="", SubAddress:=ws.Name & "!A1", TextToDisplay:=ws.Name
 
- 
Laufzeitfehler: Index außerhalb des gültigen Bereichs: Dieser Fehler tritt auf, wenn das Tabellenblatt nicht existiert. Überprüfe, ob die Tabelle "Gast-Übersicht" vorhanden ist und richtig benannt wurde.
 
Alternative Methoden
Wenn du keine VBA-Makros verwenden möchtest, kannst du auch mit Excel-Formeln arbeiten. Eine Möglichkeit ist die Verwendung von INDIREKT in Kombination mit dynamischen Bereichen, um Daten aus verschiedenen Tabellenblättern zu aggregieren. Diese Methode ist jedoch weniger flexibel und erfordert mehr manuelle Arbeit.
Praktische Beispiele
Hier ist ein Beispiel für das Erstellen eines neuen Arbeitsblatts für einen Gast, einschließlich der Aktualisierung der Übersicht:
Public Sub Blatt_erstellen()
    Dim ws As Worksheet, strBlattname As String, intGastZeile As Integer
    strBlattname = InputBox("Bitte Gast anlegen erfassen.", "Neues Tabellenblatt")
    If strBlattname = vbNullString Then Exit Sub
    Worksheets("Vorlage").Copy after:=Worksheets(Sheets.Count)
    Set ws = Worksheets(Sheets.Count)
    ws.Name = strBlattname
    ' Weitere Schritte zur Aktualisierung der Übersicht hier hinzufügen
End Sub
Tipps für Profis
- Verwende 
Application.ScreenUpdating = False am Anfang deines Codes, um die Bildschirmaktualisierung während der Ausführung zu deaktivieren. Dies kann die Geschwindigkeit des Makros erhöhen. 
- Schütze deine Blätter, um versehentliche Änderungen zu vermeiden. Du kannst dies mit 
ws.Protect "Passwort" erreichen. 
FAQ: Häufige Fragen
1. Wo füge ich den VBA-Code ein?
Du musst den Code in ein Modul im VBA-Editor einfügen. Öffne den VBA-Editor mit ALT + F11, füge ein neues Modul hinzu und kopiere den Code dort hinein.
2. Warum funktioniert der Hyperlink nicht?
Stelle sicher, dass der Hyperlink richtig formatiert ist. Die Zeile sollte keine Zeilenumbrüche enthalten und die richtige Syntax verwenden.
3. Wie kann ich die Daten in Echtzeit aktualisieren?
Du kannst den Code so anpassen, dass er bei jeder Erstellung eines neuen Gastblatts auch die Übersicht aktualisiert. Das kann durch das Aufrufen der Übersicht-Subroutine direkt nach dem Erstellen des Blattes geschehen.