VBA: Der Unterschied zwischen cells und range

Im Excel lassen sich über VBA einzelne Zellen oder Bereiche direkt ansprechen und mit Werten befüllen bzw. auslesen. Dazu gibt es die Befehle cells und range. Der Aufbau der Syntax ist allerdings unterschiedlich. Im folgenden Beispiel wird die Zelle B3 des Tabellenblatt „Sheet1“ mit dem Wert „Test“ beschrieben

    ThisWorkbook.Sheets("Sheet1").Range("B3").Value = "Test"
    ThisWorkbook.Sheets("Sheet1").Cells(3, 2).Value = "Test"

Im Befehl range erfordert zuerst die Angabe der Spalte und dann der Zeile, während es bei cells genau umgekehrt ist, also erst die Reihe, dann die Spalte.

Nun stellt sich noch die Frage, wozu die Unterschiede:
In einem Script, was Zellen nach einem definierten Schema befüllt, kann, auch der besseren Lesbarkeit wegen, die Zelle oder der Bereich über range angesprochen werden. Sobald allerdings eine Dynamik ins Spiel kommt, z.B. füllen eines Bereichs über das Script, muss cells verwendet werden.

Der nachfolgende Befehl füllt die Zellen C4 bis H7 des Tabellenblatt „Sheet1“ mit dem Wort „Test“

ThisWorkbook.Sheets("Sheet1").Range(Cells(4, 3), Cells(7, 8)) = "Test"

VBA: Access-Statuszeile beschreiben

Die Access-Statuszeile kann über folgenden Befehl als Informationsleiste verwendet werden.

Sub Statusnachricht(Nachricht)
    Dim Statusnachricht As Variant
    
    Select Case Nachricht
    Case Is = "0"
        Statusnachricht = SysCmd(acSysCmdClearStatus)
    Case Else
        Statusnachricht = SysCmd(acSysCmdSetStatus, Nachricht)
    End Select
End Sub

Erklärungen zum Script

  • Zeile 2: Deklaration der Variablen „Statusnachricht“ als Variant
  • Zeile 4: Filtere die übergebenen Parameter
  • Zeile 5 + 6: Wenn der Wert „0“ ist, dann lösche die Anzeige
  • Zeile 7 + 8: ansonsten zeige die Nachricht an
  • Zeile 9: Schließen die Schleife der Selektion

Der Aufruf der Sub erfolgt nach folgendem Schema:

call Statusnachricht("Zeige diesen Text in der Statuszeile von Access an.")
call Statusnachricht("0")   ' Lösche den in der Statuszeile angezeigten Text.

VBA: Löschen eines Excel-Tabellenblattes aus Access heraus

Der nachfolgende VBA-Code löscht ein Excel-Tabellenblatt aus einer Access-Instanz heraus:

Sub deleteTabelle(Tabellenname, xl_book)

For Each Sheet In xl_book.WorkSheets
    If Sheet.Name = Tabellenname Then
        xl_book.Application.DisplayAlerts = False
        xl_book.WorkSheets(Tabellenname).Delete
        xl_book.Application.DisplayAlerts = True
    End If
Next
End Sub

Erläuterungen zum Code:

  • Zeile 3: Frage in einer Schleife sämtliche Tabellenblätter ab, ob das übergebene Tabellenblatt vorhanden ist.
  • Zeile 4: Schalte die Warnmeldungen aus
  • Zeile 5: Lösche das gewünschte Tabellenblatt
  • Zeile 6: Schalte die Warnmeldungen ein
  • Zeile 7: Beende die If-Schleife aus Zeile 3
  • Zeile 8: Beende die For-Schleife

VBA: Erstellen einer Mail mit Anhang

Der  nachfolgende Code ermöglicht es, eine Mail über VBA-Code aus Access zu erstellen:

Sub Mailversand(str_empfaenger, str_betreff, str_Dateiname, str_Vorname, str_Nachname, str_Telefon, str_Mail)
' Diese SUB erstellt eine Mail mit Anhang
Dim OL_App As Object
Set OL_App = CreateObject("Outlook.Application")

With OL_App.CreateItem(0)
   .BodyFormat = 3
   .GetInspector.Display
   .To = str_empfaenger
   .Subject = str_betreff
   .htmlBody = "Hallo,<br><br>im Anhang findest Du die im Betreff genannte Datei.<br><br>Mit freundlichen Grüßen<br><br>" & str_Vorname & " " & str_Nachname & "<br>" & str_Telefon & "<br>" & str_Mail
   .Attachments.Add str_Dateiname
End With

End Sub

Die Routine erstellt eine Mail mit Anhang, die aus einem übergeordneten Modul aufgerufen wird. Nach Erstellung wird die Mail in Outlook aufgerufen, bevor diese versendet wird.

Weiterlesen