VBA – Verschiedene Grundlagen

Datumsfunktionen

Man kommt um die Verwendung eines Datums in der Programmierung nicht drumrum – da ich normalerweise Java programmiere, muss ich in VBA oft die einfachsten Syntaxfragen recherchieren. Diese möchte ich unter anderem in diesem Beitrag dokumentieren, um sie beim „nächsten Mal“ einfach nachschlagen zu könen 🙂

Datum deklarieren

Die Deklaration eines Datums ist denkbar einfach – man deklariert es so wie man es in Excel in eine Zelle eingeben würde:

dim myDate as Date
myDate = „17.01.2019“

RANGE & Co

Von einer Range auf die Spaltennummer konvertieren

dim spaltennr as integer
spaltennr = Columns(„AB“).Column

Zulässige Werte einer Zelle einschränken (Datenschutz)

Um mit VBA zulässige Werte einzuschränken, bedient man sich idealerweise der nachfolgenden Einstellungen:

'Festlegen, dass nur E und T zulässige Eingabewerte sind.
    Range(Cells(x, EMAIL_TELEFON_SPALTE).Address(RowAbsolute:=False, ColumnAbsolute:=False)).Select
    With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="E,T"
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With

VBA – Ein Dictionary aus einem Range kriegen – HashMap-Ersatz

In meinen Tabellen muss ich regelmäßig „Einstellungen“ und valide Werte auslesen.
Anfänglich geschah das mit Einlesen der Werte manuell in ein Array – besser geht es jedoch indem ich mit „Dictionarys“ arbeite.

' Für 2 Dimensionen wird aus angegebenen Startpunkt für die Anzahl der Zeilen ein Range festgelegt
Public Function getDictionaryFromRange(Worksheet As String, rangeValue As String, numberOfLines As Integer) As Scripting.Dictionary
    Dim dict As Scripting.Dictionary
    Set dict = New Scripting.Dictionary
    Dim settingsArray As Variant
    Dim i As Integer
    settingsArray = ThisWorkbook.Sheets(Worksheet).Range(rangeValue).value
    
    For i = 1 To numberOfLines
    Dim key As String
    Dim value As Variant
    
    key = settingsArray(i, 1)
    value = settingsArray(i, 2)
    
    If (isEmpty(key) = False And isEmpty(value) = False) Then
        dict.Add key, value
    End If
    
    Set getDictionaryFromRange = dict
    
    Next
End Function

Für das Funktionieren der Dictionarys ist bei den Verweisen die Microsoft Scripting Runtime erforderlich:

Erforderlicher Verweis zum Verwenden von Dictionarys

Im nachfolgenden Link findet ihr eine gute Anleitung zum Thema Dictionary:

Office 2013 bis 2016 – Produktkey teilweise auslesen

Manche von Euch kennen das – es wurden zu einem Zeitpunkt X viele Office-Lizenzen gekauft und der Kunde hat jedoch keine eindeutige Zuordnung der Produktkeys zu dem Clients dokumentiert.

Das naheliegendste wäre gewesen, mit dem Magical Jelly Bean Keyfinder den Key einfach auszulesen – leider funktioniert dieses altbewährte Tool jedoch nicht mehr mit Office 2016 – aus diesem Grund musste ich mich weiter im Netz umsehen nach einer charmanten Möglichkeit, meine Produktschlüssel zu identifizieren.

Windows brint mit CScript und dem VBS-Skritp OSPP.VBS ein leistungsfähiges Werkzeug mit:

cscript "C:\Program Files\Microsoft Office\Office16\OSPP.VBS" /dstatus
Screenshot der Ausführung des VBS-Skripts zum Auslesen der letzten Produktkey-Stellen.

Hier könnt ihr die letzten vier Stellen des Produktkeys auslesen und damit die Clientinstallation nachträglich zum Produktkey und damit zur Rechnung der Lizenz zuordnen.
Ihr müsst ggf. noch den Pfad Eurer Office-Installation anpassen, damit das Skript aus dem richtigen Pfad heraus ausgeführt wird.

Sophos UTM Firewall und Let’s Encrypt Zertifikate

Die Einrichtung von Let’s Encrypt Zertifikaten auf der Sophos UTM ist inzwischen kein Hexenwerk mehr.

Ich möchte an dieser Stelle das Rad nicht neu erfinden sondern verweise auf die Super Anleitung von Frankys Web:

/https://www.frankysweb.de/sophos-utm-9-6-kostenlose-lets-encrypt-zertifikate/

Als Einrichtungstipps möchte ich noch ergänzend anmerken:

  • nach ca. fünf Fehlgeschlagenen Requests wird die Domain oder abfragende IP für einige 24h Stunden gesperrt – oft ist das beim Trial and Error eine Ursache für das Fehlschlagen des Requests
  • Aktiviertes DNAT auf der Sophos kann den Request fehlschlagen lassen, wenn Port 80 und 443 umgeleitet werden
  • Der Country-Filter kann ebenfalls für Probleme sorgen – ggf. muss eine Ausnahme eingerichtet werden
  • Manche schrieben in ihrem Forum, dass die Advanced Thread Protection für Probleme gesorgt hat – das kann ich aus eigener Erfahrung nicht bestätigen
  • Bei bereits aktiver Web Server Protection muss die betreffende Domain / die Weiterleitung für die Aktivierung / erstmalige Einrichtung ggf. abgeschaltet werden

Linux Ubuntu- Festplatten und Partitionen anzeigen

Bei der Administration eines Ubuntu-Servers benötigte ich Informationen über verfügbare Festplatten und Partitionen. Ein sehr nützlicher Befehl dafür ist der Befehl lsblk:

sudo lsblk -o NAME,FSTYPE,SIZE,MOUNTPOINT,LABEL
Ausgabe des Befehls „sudo lsblk -o NAME,FSTYPE,SIZE,MOUNTPOINT,LABEL“

Auf dieser Grundlage konnte ich anschließend die Partitionen löschen, neu anlegen und an benötigter Stelle mit mount einbinden.