Verlassen in Ihrem Unternehmen oder Ihrer Behörde auch Office-Dokumente das Haus, die persönliche Daten über den Autor oder den zuletzt Ändernden enthalten? Besser wäre es, wenn diese Daten nicht nach außen bekannt werden, oder? Office liefert dazu eine Funktion (Auf Probleme prüfen-Dokumenteigenschaften und personenbezogene Informationen), die aber etwas versteckt ist.
Mit den folgenden VBA-Befehlen können sie das Anonymisieren realisieren.
Formulare in Word mit Inhaltssteuerelementen sind schnell erstellt und hoch funktional. Allerdings liegt auch hier, wie immer, die Tücke im Detail.
Eine Lösung für diese drei Fragen möchte ich hier anhand eines kleinen Beispiels vorstellen
(Siehe Bild 1).
Wer regelmäßig Outlook-Kontaktgruppen (Verteiler) erstellt und pflegt, der hat sich vielleicht schon einmal Gedanken darüber gemacht, wie sich diese Arbeit vereinfachen lässt.
Vor einiger Zeit habe ich dazu eine kleine Excel-Anwendung geschrieben
(Siehe Screenshot oben).
Die Aufgabenstellung lautete,
Wie das realisiert werden kann, möchte ich hier gern vorstellen.
Will man in einem Excel-VBA-Projekt per Programm auf bestimmte Tabellenblätter zugreifen, so eignet sich dazu hervorragend die Eigenschaft CodeName eines Blattes
(siehe Bild 1).
Diese Eigenschaft
Benutzt der Entwickler den CodeName für den Zugriff auf ein Tabellenblatt, so kann der Anwender also den Namen des Blattes nach Belieben ändern, ohne die VBA-Anwendung dadurch in Schwierigkeiten zu bringen. Die Excel-Mappe muss nicht gesperrt werden.
Für den Entwicker wäre es allerdings wünschenswert, dass der CodeName erkennen lässt, welche Funktion das Tabellenblatt in der Anwendung hat (siehe Bild 2).
Im Folgenden zeige ich,
Als ich letztens in einem recht komplexen Bericht etwas anpassen wollte, war ich erstaunt. Plötzlich hatte sich die Schrift geändert. Viele Labels und Textboxen waren nun zu klein für den vorgesehenen Inhalt. Mit der folgenden kleine Prozedur habe ich schnell den gesamten Bericht inklusive aller Unterberichte auf die gewünschte Schrift geändert.
Die Prozeudur Schriftart_aendern (siehe unten) geht durch alle Textboxen, Labels und Unter-Berichte und stellt die Schrift auf Arial 9 um. Für Unterberichte wird Schriftart_aendern rekursiv aufgerufen.
Es wird vorausgesetzt, dass der Bericht in der Entwurfsansicht geöffntet ist.
Starten kannst Du die Prozedur zum Beispiel im Direktbereich des VBA-Editors mit
call Schriftart_aendern
Die MZ-Tools von Carlos Quintero haben meine Entwicklungsarbeit mit VBA revolutioniert. Hier gibt es sehr hilfreiche Funktionen, die mir schon lange im VBA-Editor gefehlt habe. MZ-Tools kann das Leben eines Entwicklers sehr erleichtern. Wie würde Carlos Quintero sagen?
"MZ-Tools has a single goal: To make your everyday programming life easier. "
Die Software wird liebevoll gepflegt. Es gibt regelmäßig neue kostenlose Updates und Fixes. Im Moment liegen die Kosten bei einmalig 80$.
Nachfolgend möchte ich Euch meine Lieblingsfunktionen aus den MZ-Tools vorstellen.
Für die Teilnehmer von Veranstaltungen und Seminaren stelle ich Namensschilder her. Da fühlt man sich als Teilnehmer doch gleich ein wenig erwartet. Ganz abgesehen davon ist es für mich sehr hilfreich.
Mit dem hier vorgestellten Tool könnt Ihr auf normalem Druckerpapier doppelseitig bedruckte Schilder herstellen. Die A4-Seite wird zweimal gefaltet, was dem Namensschild gleich etwas Stabilität verschafft. Es muss also kein wertvolles, schweres Papier benutzt werden, für etwas, was nachher in der Regel in den Papierkorb wandert.
In der hier vorgestellten Lösung wird das Hauptdokument die Datenquelle immer finden, wenn sie im gleichen Verzeichnis abgelegt wird und den Namen behält. Dafür sorgt ein kleines Makro, das beim Öffnen des Hauptdokumentes aufgerufen wird.
Die Lösung besteht aus zwei Dateien:
Vor ein paar Tagen habe ich diesesTastenkürzel vorgestellt, mit dem man in MS Office Absätze und Tabellenzeilen nach oben und unten verschieben kann.
Siehe: https://www.konschak.de/office-zeilen-verschieben
In Excel funktioniert dieses Tastenkürzel leider nicht. Mit ein paar Makros in der PERSONAL.XLSB kann man das Verschieben per Tastenkürzel allerdings auch in Excel ermöglichen.
Das komplette Modul stelle ich unten zum Download bereit.
Wer eigene Benutzeroberflächen erstellt, steht immer wieder vor der Aufgabe, aussagekräftige Symbole für Schaltflächen oder Office-Ribbons zu erstellen. Professionell sieht es aus, wenn die Objekte in der Grafik freigestellt sind. Dazu muss eine transparente Farbe in einem PNG oder GIF festgelegt werden.
Mit PowerPoint lässt sich diese Aufgabe wundervoll erledigen, und es macht so viel Spaß, dass man glatt die dazugehörige Programmierung vergessen könnte.
Übrigens: Wer diese Arbeit lieber abgeben möchte, kann sich gern mit einer entsprechenden Anfrage an mich wenden.
Seit der DSGVO wünschen sich viele Kunden, dass ihre Daten verschlüsselt werden. Also wurde das Access-Backend eines Kunden mit einem Passwort verschlüsselt. Es gibt in dieser Firma aber auch Anwendungen in Word und Excel, die auf diese Datenbank zugreifen und sich Informationen beispielweise für Kundenbriefe oder Kalkulationen ziehen. Während die Word-Anwendung auch mit der verschlüsselten Datenbank super funktioniert hat, meldete die Excel-Anwendung: "Kein zulässiges Kennwort."
In beiden Fällen wurde die Connection via VBA auf die komplett gleiche Art und Weise hergestellt:
con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=[Backend-Dateiname mit Pfad]; Jet OLEDB:Database Password=[Passwort]"
Kürzlich hatte ich die Aufgabe, in der Kopfzeile eines Standardbriefbogens Logos für Zertifizierungen dynamisch auszutauschen. Na, das kann ja nicht so schwer sein, dachte ich mir. Wie sich herausstellte, ist doch einiges dabei zu beachten, so dass mir das Thema einen Blog-Beitrag wert erscheint. Hier also eine kleine Anleitung. Die Beispiellösung liegt zum Download bereit (Siehe weiter unten).
Problem:
COM-Add-Ins sind eigenständige Anwendungen. Sie können standardmäßig keine Shortcuts von Office-Anwendungen verarbeiten. Das ist misslich, denn wahrscheinlich hätte man ganz gern für die selbst
gebauten Funktionalitäten Tastenkombinationen, wie etwa Strg+Alt+A, vergeben.
Lösungsansatz:
Im Gegensatz zu COM-Add-Ins können in Word-Add-Ins Tastenkombinationen für Makros und Vorlagen vergeben werden.
Die Lösung, die hier vorgestellt wird, besteht nun darin, ein solches Word-Add-In zu erstellen und dort über Makros Methoden des COM-Add-Ins aufzurufen. Den Makros werden im Word-Add-In
Tastenkombinationen zugewiesen. Damit der Aufruf der COM-Add-In-Methoden funktioniert, müssen dies für andere Lösungen verfügbar gemacht werden.
Das Word Add-In kopiert man dann in das Start-Verzeichnis von MS Word. Damit wird es zu einer globalen Dokumentvorlage.
Der folgende Trick hilft enorm, wenn man in einem VBA-Programm die Codezeile finden möchte, die einen Laufzeitfehler verursacht hat. Dazu baut man ein extra Resume in den Errorhandler der Prozedur ein. Im Normalfall wird dieses extra Resume vom Programmablauf nie erreicht, weil direkt davor der Aussprung aus der Fehlerbehandlung steht. Für das Debugging ist die Zeile aber sehr hilfreich. Sieh selbst!
Benutzerdefinierte VBA-Tabellenfunktionen (User Defined Functions) sind ein mächtiges Instrument, um Excel spezifische Geschäftslogik beizubringen. Zudem verbessern sie entscheidend die Lesbarkeit von Excel-Formeln. Wer hat nicht schon über ein mehrfach verschachteltes Funktionsungetüm gegrübelt, um herauszubekommen, was da eigentlich gerechnet wird?
Manchmal braucht man benutzerdefinierte Funktionen, die immer neu berechnet werden, wenn sich irgendetwas in der Excel-Mappe ändert. Solche Funktionen nennt man volatil. Ein Beispiel für eine volatile Funktion ist übrigens die integrierte Funktion JETZT().
Es ist sehr einfach, eine benutzerdefinierte Funktion volatil zu machen.
Überarbeitete Version:
Im Oktober 2017 habe ich Euch das Prozessmeldungsfenster schon einmal vorgestellt. Inzwischen hat die Lösung ein paar kleine Verbesserungen erfahren. So ist es nun möglich, nachdem der Anwender auf das Abbrechen-Symbol geklickt hat, im Meldungsfenster anzuzeigen, was als nächstes passieren wird. Im Bild 1 seht Ihr ein Beispiel für das Aussehen des Meldungsfensters, nachdem auf das Abbrechen-Symbol geklickt wurde.
Access: Prozessmeldungsfenster schaffen Vertrauen:
Datenverarbeitungsaktionen können manchmal länger dauern. Gut, wenn der Anwender des Programms dann Prozessmeldungen erhält, die den Fortschritt sichtbar machen. Das beruhigt, schafft Vertrauen und lässt die Zeit gefühlt schneller vergehen. Im Gegensatz zur VBA-Funktion MsgBox(), ist hier keinerlei Interaktion durch den Anwender nötig. Das Fenster meldet nur laufend den Prozessfortschritt und verschwindet von selbst, wenn der Vorgang abgeschlossen ist. Ich verwende diese oder eine ähnliche Lösung in allen meinen Projekten, nicht nur in Access-Anwendungen sondern auch in Excel-, Word- und VB.net-Projekten.
Für den Fall, dass der Anwender den Vorgang vorzeitig abbrechen möchte, bietet das Meldungsfenster eine Abbrechen-Schaltfäche (Bild 2). Mit dieser Schaltfläche gibt der Anwender dem Programm zu verstehen, dass der Vorgang zum nächst möglichen Zeitpunkt abgebrochen werden soll. Wann das passiert entscheidet der Programmierer.
Vielleicht hattet Ihr auch schon einmal den Wunsch, mehrere Worddokumente, die zu einem Vorgang gehören, in einem Dokument zusammenzufassen. Word macht das möglich durch das Anlegen mehrerer Abschnitte. Allerdings ist die Handhabung von Abschnitten etwas tricky. Erleichterung schafft da dieses Add-In.
Dim aH() As String = (From f In
Directory.GetFiles(SuchOrdner, "*", SearchOption.AllDirectories)
Where
(
f.EndsWith(".dotx") Or
f.EndsWith(".dotm") Or
f.EndsWith(".docx") Or
f.EndsWith(".docm") Or
f.EndsWith(".dot") Or
f.EndsWith(".doc")
) And (Not f.Contains("~"))
Select f ).ToArray()
Als ich so eine Anweisung zum ersten Mal gesehen habe, musste ich mir glatt die Augen reiben! Häh?Was ist das denn?
Mit einer einzigen Anweisung werden hier alle Word-Dateien in einem Suchordner und desse Unterordner gefunden. Die kompletten Dateinamen werden im Array aH() abgelegt. Cool, oder!?
Ein Treeview ist wunderbar für die übersichtliche und leicht verständliche Darstellung von Zusammenhängen und Hirarchien.
ABER:
Systemer sind not amused, wenn zusätzliche Steuerelemente für die Anwendung installiert werden müssen.
UND: Der Programmierer steht vor der bangen Frage: "Läuft mein Programm mit diesem externen Steuerelement auch noch nach dem nächsten Windows- oder Office-Update?". Ich erinnere hier an das Kalendersteuerelement, dass Microsoft vor Jahren nach einem Update knallhart und kaltherzig deaktiviert hat.
Der Ausweg aus dem Delemma: Der Treeview von picoware.
Dieser Lösung braucht kein ActiveX, kein OCX, keine DLL nicht einmal einen API-Call.
Ich habe das Tool erworben, und werde demnächst von meinen praktischen Erfahrungen damit berichten.
Mehr Infos hier: https://www.picoware.de/info/treeview.htm