VBA

Workbook gleichzeit mit und ohne VBA speichern

Unter Umständen muss man von einer Excel-Datei zwei Versionen vorhalten. Eine xlsm-Datei mit VBA-Quellcode und eine xlsx-Datei ohne VBA-Quellcode (zum Beispiel für den Versand). Folgender VBA-Code erstellt bei jedem Speichervorgang einer xlsm-Datei parallel eine xlsx-Datei. Der Code ist in "Dieser Arbeitsmappe" einzufügen.

Option Explicit

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
SaveAlsoAsXlsx
End Sub

Private Sub SaveAlsoAsXlsx()

Word 2013 vs. Word 2010 - Nicht bearbeitbare Dateien im Lesemodus öffnen

Bei der Umstellung von Word 2010 auf Word 2013 ist mir neulich ein Problem aufgefallen. Offensichtlich hat sich ein Standardwert geändert. Nicht bearbeitbare Dateien werden seit Word 2013 standardmäßig im Lesemodus geöffnet. Bei Automatisierungen mit VBA kann das zu Problemen führen.

Der Menüpunkt lautet: "E-Mail-Anlagen und andere nicht bearbeitbare Dateien im Lesemodus öffnen"
Die notwendige Einstellung kann auch über VBA erfolgen: Application.Options.AllowReadingMode=FALSE

Anzahl Zeichen in einem Text

Eine kleine Funktion um die Häufigkeit eines bestimmten Zeichens in einem Text zu bestimmen:

Private Function AnzahlZeichen(ByVal Text As String, ByVal SuchText As String) As Integer
    AnzahlZeichen = Len(Text) - Len(Replace(Text, SuchText, ""))
End Function

Sub Test()
    Debug.Print AnzahlZeichen("Visual Basic", "a")
End Sub

Tabellenblatt mit VBA neu berechnen

Die Berechnung der Arbeitsmappe/Tabellenblatt erfolgt über VBA mittels:

Application.Calculate

Allerdings wartet VBA nicht bis die Arbeitsmappe vollständig neu berechnet wurde. Dies kann bei umfangreichen Arbeitsmappen zu Problemen und falschen Werten führen. Besser ist es dann die Neuberechnung so zu starten:

Application.CalculateFull

Nun wartet VBA bis die Arbeitsmappe vollständig neu berechnet wurde.

VBA und der Arbeitsspeicher

Große Datenarrays können den Arbeitsspeicher vollstopfen. Um den Arbeitsspeicher möglichst zu schonen ist es wichtig nicht benötigten Arbeitsspeicher wieder freizugeben.

Das folgende Beispiel sollte am besten mit geöffneten Task-Manager und einem Blick auf die Auslagerungsdatei ausgeführt werden.

Überlauf trotz Long?

Der Datentyp Integer kann nur ganzzahlige Werte von -32.768 bis +32.767 speichern. Darum verwende ich sehr häufig den Datentyp Long. Aber auch hier kann es zu interessanten Problemen kommen.

Die zwei Operatoren / und \

Teilen kann ja jeder. Der passende Operator in VBA ist hierfür /. Was passiert aber wenn man diesen Operator verwendet \?

Statische Variablen - Was ist das?

Ein kleines Beispiel mit statischen Variablen.

Größenvergleich bei Strings => Alphabetische Sortierung!

Manche Probleme sind ja so einfach zu lösen. Lange (zu lange) habe ich mir überlegt, wie man Texte (Strings) alphabetisch sortiert kann. Bis ich auf die simple Idee kam, ein Ungleichzeichen zu verwenden. Und es funktioniert!

Quicksort für zweidimensionale Datenfelder / Matrizen

Mit dieser Funktion kann in VBA ein mehrdimensionales Datenfelder oder eine Matrix nach einer bestimmten Spalte sortiert werden. Als Beispiel wird in einer Test-Funktion ein Datenfeld und ein Zellbereich mit der neuen Quicksort-Funktion sortiert. Die Option "aufsteigend/absteigend" (Parameter Descending) ist noch nicht verfügbar, lässt sich aber einfach hinzufügen.

Download der gesamten Excel-Datei

Und hier geht's zum Quellcode...

Inhalt abgleichen