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

user-places.xbel nicht beschreibbar

Beim Starten des Systems erscheint regelmäßig folgende Meldung:

Speichern der Lesezeichen in /home/[USER]/.local/share/user-places.xbel nicht möglich. Der Fehler lautet: Die existierende Datei /home/[USER]/.local/share/user-places.xbel ist nicht schreibbar. Die Meldung wird nur einmal angezeigt. Die Ursache sollte so rasch wie möglich beseitigt werden. Möglicherweise ist die Festplattenkapazität erschöpft.

Nun, in dem Fall ist es nicht die Festplattenkapazität, sondern die Schreib- und Besitzrechte dieser Datei, die aus irgendwelchen Gründen dem „root“ zugeordnet gewesen sind. Mit folgendem Befehl lässt sich dieses für den angemeldeten Benutzer ändern:

sudo chown $USER:$USER /home/$USER/.local/share/user-places.xbel

Signaltöne in Thunderbird deaktiveren

Die Signaltöne im Mailprogramm „Thunderbird“ nerven mitunter sehr. Dieser Beitrag beschreibt, wie die Töne beim Mailversand deaktiviert werden können. Eine radikale Lösung ist mir aufgefallen, die optischen und akustischen Meldungen beim Löschen von Mails auszuschalten. Dies birgt allerdings einige Gefahren. Dazu mehr beim Tipp.

Weiterlesen

Ersetzen per VBA

Über folgenden Befehl lassen sich Zeichen(ketten) in Excel per VBA ersetzen:

Ganzes Tabellenblatt:
Worksheets("[Tabellenblatt]").Cells.Replace What:="[vorher]", Replacement:="[nachher]", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False

Ausgewählte Bereiche:
Selection.Replace What:="[vorher]", Replacement:="[nachher]", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False

Wird oft zusammen gekauft [1]

Da schaue ich doch mal nach ein paar Linux-Referenzen und entdecke folgende Buchempfehlung:

Buchempfehlung - fehlgeschlagen
Buchempfehlung als Ergebnis von Linux-Fachliteratur

Auch wenn mir mancher Shellbefehl oder Code kryptisch vorkommt; mit Magie hat das so gar nichts zu tun.