Tipps und Tricks zu Microsoft Office


© Silvia Rothen, rothen ecotronics, Bern, Schweiz

Autorin: Dr. Silvia Rothen, rothen ecotronics, Bern, Schweiz
Letzte Überarbeitung: 01.01.22


In Kursen und bei Beratungen in Firmen stosse ich immer wieder auf ähnliche Fragen zum Einsatz von Microsoft Office. In dieser Kolumne habe ich deshalb Tipps und Tricks aus meiner praktischen Erfahrung zusammengestellt. Der Schwerpunkt liegt vor allem bei Excel und Access und bei der Zusammenarbeit zwischen den verschiedenen Programmen. Im Normalfall beziehen sich die Tipps auf Office XP und 2003, vieles davon lässt sich in leicht abgewandelter Form aber auch in Office 97 oder Office 2000 anwenden. 


Inhaltsverzeichnis

Access

Excel

Outlook

Zusammenarbeit zwischen Office-Programmen

Visual Basic for Applications (VBA)

Buchtipp


Access

Beschriftung mit Formularfeld verknüpfen

Access 97 / 2000 / XP

Eine Beschriftung zu einem Formulartextfeld, die gelöscht wurde, lässt sich zwar durch ein Bezeichnungsfeld ersetzen, doch diese neue Beschriftung ist nicht mehr mit dem Eingabefeld verknüpft und wird deshalb nicht mitverschoben, wenn man das Eingabefeld verschiebt. Diese Verknüpfung lässt wiederherstellen, indem man das neu erstellte Beschriftungsfeld mit Ctrl X ausschneidet, das Eingabefeld markiert und mit Ctrl C die Beschriftung einfügt. Von nun an sind Beschriftung und Eingabefeld wieder verknüpft.

Textdaten importieren

Access 97 / 2000 / XP

Access kann zwar diverse Fremdformate direkt importieren, und ab Version 97 ist es möglich, Tabellen gar nicht mehr zu importieren, sondern zu verknüpfen, aber dennoch ist es gelegentlich notwendig, für Datentransfers auf das Textformat zurückzugreifen. Scherereien bereitet immer dann, wenn die Daten nicht von einem Windows-Rechner stammen und damit nicht den windows-spezifischen ANSI-Zeichensatz aufweisen. Ebenfalls problematisch sind Daten aus anderen Ländern, z.B. Zahlen aus Deutschland mit Dezimalkommas statt Dezimalpunkt oder amerikanische Datumswerte mit dem Format MM/TT/YYYY.

Beim Import solcher Daten in Access lässt sich das alles einstellen, allerdings ist das Dialogfenster dazu etwas versteckt. Der Einstieg für den Datenimport erfolgt über Datei - Externe Daten - Importieren. Im nächsten Dialogfenster wechselt man unten im Kombinationsfeld DateiTyp auf Textdateien und sucht sich die entsprechende Textdatei. Damit startet der Textimport-Assistent. Einstellungen wie Wechsel des Datumsformates oder des Zeichensatzes verstecken sich nun hinter der Schaltfläche Weiter unten links.

Das nächste Dialogfenster ermöglicht nun diverse Einstellungen für den Import von Textdateien:

Schlüsselfeld in Formular sperren

Access 97

In den meisten Formularen möchte man den nicht veränderlichen Primärschlüssel einer Tabelle zwar anzeigen, aber das Eingabefeld sperren, so dass die Benutzer/innen nicht auf die Idee kommen, diesen Wert zu verändern.

Für die Anzeige eines solchen Schlüsselfeldes im Formular können Sie ein ganz normales Textfeld benutzen. Die Sperrung erreichen Sie, indem Sie in der Entwurfsansicht die Eigenschaft Aktiviert dieses Textfeldes auf Nein setzen. Damit lässt sich das Feld nicht mehr mit der Maus oder dem Tabulator anspringen und ist somit auch nicht bearbeitbar. Ausserdem wird das Feld grau angezeigt, um den Unterschied zu Eingabefeldern auch optisch hervorzuheben.

Allerdings ist dann auch die Bezeichnung grau. Das lässt sich beheben, indem man das Bezeichnisfeld ausschneidet, wieder einfügt und an die selbe Stelle verschiebt. Allerdings ist mit dieser Methode anschliessend das Bezeichnungsfeld nicht mehr mit dem Formularfeld verbunden.

Kombinationsfeld aus aktuellen Werten erstellen

Access 2000 (mit geringfügigen Änderungen auch Access 97)

Um die Eingabe in Formularen auf bestimmte Werte zu beschränken, greift man meistens zum Mittel des Kombinationsfeldes. Häufig möchte man dabei, dass sich die Liste automatisch aus den bereits verwendeten Werten ergibt. Dies ist möglich, bedingt aber, dass man zuerst eine Abfrage für die gewünschte Liste erstellt.

Wie man vorgeht, möchte ich am Beispiel einer Eingabemaske für Kundendaten erläutern. Das Land will man dabei mit einem Kombinationsfeld eingeben, wobei die Liste aus allen bereits getätigten Eingaben in diesem Feld bestehen soll. Als erstes erstellt man eine Abfrage mit den alphabetisch geordneten Ländern.

Wichtig ist bei dieser Abfrage, dass mit "Ist Nicht Null" in der Kriterienzeile leere Einträge ausgeschlossen sind und dass mit der Schaltfläche Funktionen die Gruppierung eingeschaltet wird, damit jedes Land nur einmal erscheint. Anschliessend speichert man diese Abfrage z.B. unter dem Namen qrylaenderliste.

Als nächstes tauscht man im Eingabeformular das normale Eingabefeld für Land durch ein Kombinationsfeld aus. Dabei muss unbedingt der Steuerelementassistent eingeschaltet sein. Das Feld mit der Maus aufziehen. Achtung: Fangen Sie nicht am linken Rand des Formulars an, sonst bleibt links vom Kombinationsfeld kein Platz für eine Beschriftung.

Damit startet der Kombinationsfeld-Assistent. Bei den nächsten Dialogfenstern gibt man folgende Optionen ein:

  1. Oberste Option ausgewählt lassen, das heisst "Das Kombinationsfeld soll die Werte einer Tabelle oder Abfrage entnehmen"
  2. Bei "Aus welcher Tabelle oder.." die gewünschte Abfrage wählen, d.h. qrylaenderliste.
  3. Mit der Schaltfläche > das Feld Land in die ausgewählten Felder auf der rechten Seite spedieren
  4. Im nächsten Dialogfenster könnte man die Breite des Feldes korrigieren. Dies ist vermutlich unnötig.
  5. Unbedingt die untere Option, d.h. "Wert speichern in Feld", auswählen und den richtigen Feldnamen, z.B. Land eingeben!
  6. Im Eingabefeld  "Welche Beschriftung.." eine sprechende Beschriftung, z.B. Land eingeben und mit der Schaltfläche Fertigstellen abschliessen

Wenn Sie nun in die Formularansicht wechseln, dann haben Sie bereits ein funktionierendes Kombinationsfeld.

Allerdings hat dieses Kombinationsfeld noch einen kleinen Schönheitsfehler: Ein neuer Ländereintrag wird erst in der Liste angezeigt, wenn man das Formular das nächste Mal öffnet. Wenn man die Liste bereits während der Dateneingabe aktualisieren möchte, dann gibt es drei mögliche Lösungen:

  1. Man aktualisiert die Liste nach jedem Neueintrag von Hand mit dem Menü Datensätze - Anzeige aktualisieren
  2. Man erstellt in der Entwurfsansicht des Formulars mit der Toolbox-Symbolleiste eine Befehlsschaltfläche. Wie beim Kombinationsfeld muss der Steuerelement-Assistent aktiviert sein. Nachdem man die Schaltfläche aufgezogen hat, kann man aus der Kategorie Formularoperationen die Aktion Formulardaten aktualisieren auswählen. Im nächsten Schritt kann man die Schaltfläche z.B. mit Länderliste aktualisieren benennen. Ein Klick auf diese Schaltfläche aktualisiert nach jedem Neueintrag die Liste.
  3. Noch eleganter ist allerdings, wenn man eine VBA-Prozedur verwendet, die beim Wechsel auf den nächsten Datensatz die Liste von selbst aktualisiert. Dazu hängt man z.B. an das Ereignis Nach Aktualisierung des Formulars eine Ereignisprozedur Form_AfterUpdate() mit einer einzigen Codezeile, was folgende Prozedur ergibt:
    Private Sub Form_AfterUpdate()
      DoCmd.DoMenuItem acFormBar, acRecordsMenu, _
         5, , acMenuVer70
    End Sub
Wenn man ein wenig VBA-Programmierung nicht scheut, dann erspart man damit den Benutzer/innen manchen zusätzlichen Klick.

Anfügeabfrage und Löschabfrage mit Makro kombinieren

Access 2000 (mit geringfügigen Änderungen auch Access 97)

Gelegentlich möchte man Daten aus einer Tabelle in eine andere verschieben und anschliessend die Daten in der alten Tabelle löschen. Manchmal kommt es vor, dass man dies immer wieder mit denselben Tabellen tun muss, z.B. wenn man alte Daten in eine Archivtabelle verschiebt. Nun gibt es zwar in Access für diesen Zweck Tabellenerstellungs-, Anfüge- und Löschabfragen, aber keine Aktionsabfrage, die das Anfügen und Löschen kombiniert. Damit schafft man eine potentielle Fehlerquelle, sei es dass die Reihenfolge dieser zwei Abfragen nicht eingehalten wird, sei es, dass nur eine der zwei Abfragen ausgeführt wird. Um dies zu verhindern, kann man die zwei Abfragen mit einem Makro zusammenhängen und anschliessend auf einem geeigneten Formular eine Schaltfläche zur Verfügung stellen, welche diesen Makro auslöst.

Dieser Makro enthält, wie man im Screenshot sieht, nur zweimal hintereinander die Aktion ÖffnenAbfrage. Im unteren Teil des Fensters werden neben Abfragename die zwei Abfragen ausgewählt, also z.B. zuerst qrykundenarchivieren und dann qryarchivkundenloeschen.

Runden auf 5 Rappen

Access 97 / 2000 

Wie in Excel benötigt man auch in Access gelegentlich eine Rundung auf 5 Rappen. Das Grundprinzip ist das gleiche wie bei Excel, nämlich Zahl verdoppeln, mit einer Funktion auf eine Dezimalstelle runden und ausserhalb der Funktion wieder durch 2 teilen. Allerdings gibt es in Access die äusserst praktische Funktion RUNDEN nicht, man muss die Funktion FORMAT verwenden. In Access 2000 sieht die Formel folgendermassen aus:

Format([nettoumsatz]*2;"0.0")/2

In Access 97 wird das ganze noch etwas komplizierter. Vermutlich infolge eines Bugs funktioniert unter der Schweizer Ländereinstellung der Formatcode "0.0" nicht, sondern nur "0,0". Unglücklicherweise ist das Ergebnis dann aber ein Text, nicht eine Zahl, so dass man noch die Funktion WERT benötigt, um das Resultat wieder in eine Zahl zurückzuverwandeln. Für Access 97 unter einer Schweizer Ländereinstellung sieht die Formel also folgendermassen aus:

Wert(Format([nettoumsatz]*2;"0,0")/2)

Schaltflächen in Taskleiste

Access 2000 / XP / 2003

In Access lässt sich entweder für die ganze Datenbank nur eine einzige Schaltfläche in der Taskleiste anzeigen oder pro geöffnetes Datenbankobjekt je eine. Umschalten lässt sich dies im Menü Extras - Optionen - Register Ansicht - Fenster in Taskleiste.

Makros in VBA-Code umwandeln

Access 97 / 2000 / XP / 2003

In Access gibt es zur Programmierung einfacher Abläufe Makros. Damit lässt sich Routinearbeit rasch automatisieren. Allerdings fehlt den Makros ausser Bedingungen eigentlich alles, was zu einer richtigen Programmiersprache gehört. Deshalb stösst man sehr schnell an die Grenzen dessen, was mit Makros in Access umsetzbar ist. Ihr Vorteil ist allerdings, dass man sich viel mühsame Tipparbeit sparen kann, weil man sich das gewünschte mit Kombinationsfeldern zusammenklickt.

Eine effiziente Arbeitsweise ist es deshalb, sich diese Routineschritte als Makro zusammenzuklicken, dann den Makro in VBA-Code umzuwandeln und anschliessend in VBA weiterzuprogrammieren.

Vorgehen für die Umwandlung von Makros in VBA:

Zurück zum Inhaltsverzeichnis


Excel

Runden auf 5 Rappen

Excel 97 / 2000 / XP / 2003

Eine schweizerische Besonderheit ist das Runden auf 5 Rappen. Normalerweise benutzt man für die Rundung die Excelfunktion RUNDEN(). Mit dieser lässt sich zwar mit =RUNDEN(A1; 0) auf ganze Franken oder mit dem zweiten Argument der Funktion auf beliebig viele Dezimalstellen runden, nicht aber auf 5 Rappen. Auf folgende Art und Weise kann man es trotzdem realisieren. Weil 10 Rappen das Doppelte von 5 Rappen sind, wird die Zahl innerhalb der Funktion RUNDEN verdoppelt und auf eine Dezimalstelle (eben Zehner) gerundet. Weil die Zahl nun doppelt so gross ist wie sie sollte, muss man sie wieder durch Zwei teilen und zwar ausserhalb der Funktion. Wenn wir annehmen, dass sich die zu rundende Zahl in Zelle A1 befindet, dann ergibt sich folgende Formel:

=RUNDEN(A1*2;1)/2

Ganze Spalte ausfüllen mit Doppelklick 

Excel 97 / 2000 / XP

Die meisten Leute wissen, dass man mit dem Ausfüllkästchen einen Zellinhalt oder eine Formel in andere Zellen kopieren kann, indem man das Ausfüllkästchen mit der Maus in die gewünschte Richtung zieht. Bei grossen Tabellen ist dieses Verfahren allerdings umständlich. Muss eine Spalte ergänzt werden, lässt sich das gleiche auch mit einem Doppelklick auf das Ausfüllkästchen erledigen, sofern die Spalte links davon lückenlos ausgefüllt ist. Dieser Doppelklick kopiert den Inhalt der markierten Zeile bis zur nächsten Leerzeile in alle Zellen unterhalb der Markierung.

Monate und Tage ausrechnen mit der Funktion DATEDIF

Excel 97 - 2003

Eine Firma verrechnet ihren Kunde für die Nutzung einer Dienstleistung eine Grundgebühr pro Monat. Überzählige Tage werden dabei prozentual verrechnet. Um die effektiven Gebühren zwischen 2 Datumswerten berechnen zu können, muss man die Anzahl Monate sowie die überzähligen Tage berechnen. Dafür gibt es die Funktion DATEDIF. Diese Funktion ist leider in der Hilfe (zumindest in jener von Excel 2003) nicht dokumentiert und nicht über den Funktionsassistenten zugänglich. Ungewöhnlich ist ausserdem, dass sie nicht lokalisiert ist, d.h. der Funktionsname und die Argumente in allen Sprachversionen identisch.

Die Funktion hat 3 Argumente
 1) Anfangsdatum
 2) Enddatum
 3) Formatcode, der angibt, ob man die Differenz als Jahr, Monat, etc ausgeben möchte

Gängige Werte für die Formatcodes:
"Y" -> als Jahre
"YM" -> als restliche Monate, die über die Jahre hinausgehen
"M" -> als Monate
"MD" -> als restliche Tage, die über die Monate hinausgehen
"D" -> als Tage

Filter speichern mit Ansichten

Excel 97 / 2000

Bei grösseren Listen und komplizierteren Filtern möchte man im Autofilter nicht jedes Mal die gewünschten Filterkriterien einzeln setzen. Gesetzte Filter lassen sich mit dem Ansichten-Werkzeug lassen sich gemeinsam mit anderen Fenstereinstellungen speichern. Dieses Werkzeug findet man unter Ansicht - Ansicht anpassen...

Mit der Schaltfläche Hinzufügen speichert man in diesem Dialogfenster die aktuellen Einstellungen. Die Schaltfläche Anzeigen setzt falls nötig den Autofilter und die einzelnen Filtereinstellungen.

Fehlerindikator bei Zahlen als Text nicht anzeigen

Excel XP

Ab Office XP zeigt Excel bei potentiellen Fehlern einen grünen Fehlerindikator und ein Smarttag an. Leider schiesst die Fehlerüberprüfung etwas übers Ziel hinaus und markiert z.B. auch Zahlen, die absichtlich mit Apostroph als Text eingegeben wurden, z.B. Telefonnummern oder Jahrzahlen als Spaltenbeschriftung. Glücklicherweise lässt sich dies in den Optionen abstellen: Extras - Optionen - Register Fehlerüberprüfung - Als Text gespeicherte Zahlen abwählen.

Mehrfacheingabe mit Ctrl + Return 

Excel 97/2000/XP

Mit folgendem Trick kann man einen Wert oder eine Formel in mehrere Zellen gleichzeitig eingeben:

  1. Alle Zellen markieren (nicht zusammenhängende Bereiche mit Ctrl)
  2. Die Formel oder den Wert eingeben, ohne die Eingabe mit Return abzuschliesen
  3. Statt Return die Tastenkombination Ctrl und Return gleichzeitig drücken.

Buchhaltungs- und Währungsformat 

Excel 97/2000/XP

Viele Benutzer/innen greifen für Zahlen mit einer Währungsanzeige sofort zum Währungsformat, weil sie nichts anderes kennen. Das Buchhaltungsformat liefert aber in vielen Fällen ein ästhetisch befriedigenderes Resultat, weil die Tabellen weniger unruhig werden. Man findet das Buchhaltungsformat unter Format - Zellen - Register Zahlen - Buchhaltung.

Vorteile des Buchhaltungsformats

Nachteile des Buchhaltungsformats

Symbolleiste für Berechnungen erstellen

Excel 97/2000/XP

Formeln gibt man am Besten direkt mit der Maus ein, weil man so weniger Fehler macht als wenn man die Bezüge von Hand eintippt. Für Berechnungen ergibt sich so allerdings ein ständiges Hin und Her zwischen Tastatur und Maus, weil Operationszeichen wie * oder / nicht mit der Maus eingegeben werden können. Abhilfe schafft eine benutzerdefinierte Symbolleiste, auf der alle Operationszeichen vorhanden sind.

Vorgehen: Menü Ansicht - Symbolleisten - Anpassen - Register Symbolleisten - Schaltfläche Neu - einen Namen für die Symbolleiste vergeben, z.B. Rechnen - ins Register Befehle wechseln - in der Kategorie Einfügen die Schaltflächen ab Gleichheitszeichen suchen - mit gehaltener linker Maustaste auf die neu erstellte Symbolleiste ziehen. Den letzten Schritt solange wiederholen, bis alle Operationszeichen auf der neuen Symbolleiste sind (siehe Abbildung).
 

Sobald man auf die Schaltfläche Schliessen klickt, wird das Dialogfenster geschlossen und die Symbolleiste lässt sich benutzen. Damit kann man fast alle Formeln nur mit der Maus eingeben.

Wo sind Symbolleisten gespeichert?

Excel 97 / 2000 / XP / 2003

Wenn Änderungen an bestehenden Symbolleisten gemacht oder benutzerdefinierte Symbolleisten erstellt werden, dann werden diese in einer Datei mit der Endung .xlb gespeichert. Der Dateiname beginnt mit "Excel", gefolgt von der Versionsnummer und der Endung. Für Excel 2003 heisst das z.B. Excel11.xlb.

Diese Datei befindet sich im Benutzerprofil, d.h. im Ordner "Dokumente und Einstellungen" im Unterordner der Benutzerin unter Anwendungsdaten\Microsoft\Excel. Das bedeutet, dass die Symbolleisten pro Benutzer für alle Arbeitsmappen gelten.

Wenn diese Datei defekt ist, lässt sich Excel nicht mehr richtig starten. Beim Öffnen erscheint bereits die Meldung "Die Anwendung wird geschlossen". Dann kann man die Datei suchen und umbenennen. Beim nächsten Start von Excel wird wieder eine xlb-Datei erstellt. Allerdings sind dann die Änderungen an Symbolleisten verloren.

Wo sind benutzerdefinierte Diagrammtypen gespeichert?

Excel 97 / 2000 / XP / 2003

Wenn in Excel benutzerdefinierte Diagrammtypen erstellt werden, so werden diese in der Datei  Xlusrgal.xls im Verzeichnis \Dokumente und Einstellungen\Username\Anwendungsdaten\Excel gespeichert.

Makros entfernen

Excel 97 / 2000 / XP

Bei mittlerer Makrosicherheit muss man bei jedem Öffnen von Arbeitsmappen mit Makros die Aktivierung von Makros bestätigen. Manchmal sind diese Makros unnötig, weil sie durch das Kopieren einer Vorlage mit Makros unbeabsichtigt in die Arbeitsmappe gelangt sind.

Achtung: Wenden Sie die folgende Technik nur an, wenn Sie sicher sind, dass alle Makros in einer Arbeitsmappe überflüssig sind.

Zum Löschen von überflüssigen Modulen mit Makros gehen Sie folgendermassen vor:

  1. Extras - Makro - Visual Basic-Editor
  2. Im Projekt-Explorer oben links die aktuelle Datei unter VBA-Projekt (Dateiname) suchen (siehe Abbildung)
  3. Wenn Makros vorhanden sind, gibt es Unterordner Module mit mindestens einem Modul 
  4. Rechtsklick auf dieses Modul - in Kontextmenü Entfernen von .. wählen - die Frage nach Export mit Nein beantworten

Mit XML arbeiten

Excel 2003

XML (eXtended Markup Language) ist eine Metasprache zum Verwalten von hierarchischen Daten. Informationen und ihre Struktur werden dabei im gleichen Dokument gespeichert, indem die Strukturinformationen (entspricht Feldnamen und ihren Datentypen in Datenbanken) in spitzen Klammern, sogenannten Tags, rund um die Daten platziert werden. Das könnte etwas so aussehen:

<?xml version="1.0" encoding="UTF-8"?>
<dataroot xmlns:od="urn:schemas-microsoft-com:officedata" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="User.xsd" generated="2005-01-20T10:15:56">
  <tblU_User>
    <UserNr>1</UserNr>
    <UserName>Silvia Rothen</UserName>
  </tblU_User>
  <tblU_User>
    <UserNr>2</UserNr>
    <UserName>Testuser</UserName>
  </tblU_User>
</dataroot>

XML kann in der Version 2003 nicht nur zum Speichern ganzer Dokumente verwendet werden, sondern um eine Datenstruktur über ein Dokument zu legen, so dass man anschliessend die Möglichkeit hat, fast wie bei einer Datenbank gezielt auf bestimmte Daten zuzugreifen. XML-Dateien werden immer wichtiger als Import- und Exportformat für Datenbanken und für den Datentransport via Internet. Da XML-Dateien im Gegensatz zu den binären Dateien von Word- oder Excel-Dokumenten im Textformat vorliegen, eignen sie sich für die langfristige Archivierung.

Es lassen sich in Office 2003 sowohl direkt XML-Daten einlesen oder Schemas.

Begriffe in Englisch und Deutsch

Da die Beispiele von Microsoft meist in Englisch daherkommen, hier die wichtigsten Übersetzungen:

Englisch Deutsch
Schema Schema
XML-Maps XML-Verknüpfungen, XML-Zuordnungen
XML-Source XML-Quelle

 Direkt XML-Daten importieren

  1. Den Aufgabenbereich XML-Quelle öffnen mit Daten - XML - XML-Quelle
  2. Schaltfläche XML-Verknüpfungen unten rechts im Aufgabenbereich anklicken
  3. Im Dialogfenster XML-Zuordnungen auf Hinzufügen klicken und eine XML-Datei anklicken. Falls die Meldung erscheint, dass ein Schema erstellt werden soll, klicken Sie auf OK.
  4. Sie sehen nun im Aufgabenbereich die Baumstruktur der importierten XML-Daten. Eine Erklärung zu den verschiedenen Symbolen (z.B. Attribut, wiederholt, erforderlich) erhalten Sie mit dem Link Tipps für XML-Verknüpfung.
  5. Ziehen Sie nun die gewünschten Felder mit der Maus aus dem Arbeitsbereich in das Arbeitsblatt. Wenn Sie oberhalb oder links eine Zeile oder Spalte frei lassen, können Sie mit dem SmartTag XML-Kopfzeile links anordnen automatisch eine Beschriftung erzeugen.
  6. Mit dem Kontextmenü XML - XML-Daten aktualisieren lassen sich nun die verbundenen Daten anzeigen

Schema und anschliessend XML-Daten importieren

Das Vorgehen ist dasselbe wie beim direkten Import, aber beim Schritt 3 klickt man eine Schema-Datei an (Endung .xsd) und nach dem 5. Schritt importiert man die zugehörigen Daten mit Daten - XML - importieren.

Bestehende Daten in Arbeitsmappen mit XML-Schema verbinden

Interessant ist XML vor allem, um wichtige Unternehmensdaten aus unstrukturierten Dokumenten wie Word-Texten oder Excel-Arbeitsmappen zu extrahieren und damit auch für den späteren Zugriff zu retten.
Vorbedingung ist, dass es für die Daten, die aus einer Arbeitsmappe extrahiert werden sollen, bereits ein Schema gibt.
Dazu verbinden Sie ein Schema mit einer bestehenden Arbeitsmappe wie weiter oben beschrieben.

Via Daten - XML - Exportieren lassen sich anschliessend die relevanten Daten als XML exportieren.

Sind die XML-Elemente einmal mit den Excel-Daten verbunden, dann lässt sich mit dem Aufgabenbereich gezielt auf die Daten zugreifen, indem man auf das gewünschte Element im Aufgabenbereich klickt.

Blattnamen in Zelle übernehmen

97/2000/XP/2003

Mit folgender Formel lässt sich der Blattname in eine beliebige Zelle übernehmen:

=RECHTS(ZELLE("Dateiname";A1);LÄNGE(ZELLE("Dateiname";A1))
-SUCHEN("]";ZELLE("Dateiname";A1)))

=ZELLE("Dateiname";A1) liefert den Pfad, Dateinamen und Blattnamen in einem String, z.B. C:\Dateien\[test.xls]Tabelle1. Mit den Funktionen SUCHEN, RECHTS und LÄNGE wird das Trennzeichen ] zwischen Dateiname und Blatt gesucht und der rechte Teil des Strings abgetrennt.

Achtung: Die Formel bleibt leer, solange die Arbeitsmappe nicht gespeichert wurde!

Letzte Zelle für Ctrl + End anpassen

97/2000/XP/2003

Mit Ctrl + End kann man normalerweise auf die letzte ausgefüllte Zelle springen (bzw. den Kreuzungspunkt zwischen letzter Spalte und letzter Zeile mit Einträgen). Wenn man die letzten Spalten oder Zeilen weglöscht, funktioniert dies allerdings nicht mehr, der Cursor springt immer noch an die alte Stelle. Sobald man einmal gespeichert hat, funktioniert es allerdings wieder.

Aus bestehendem Diagramm eine Vorlage machen

97/2000/XP/2003

Gelegentlich möchte man ein Diagramm, das man liebevoll erstellt hat, als Vorlage für weitere Diagramme nutzen. Das geht folgendermassen:

Excel-Diagramme als Diagrammvorlagen speichern

Trendlinie in Diagramm einfügen

97/2000/XP/2003

Eine lineare, logarithmische oder sogar polynomische Trendlinie fügt man in ein Exceldiagramm ein, indem man auf der gewünschten Datenreihe einen Rechtsklick macht und im Kontextmenü Trendlinie hinzufügen auswählt.

Achtung: Diese Möglichkeit steht nur für die Diagrammtypen Linien-, Balken-, Säulen- und Punktdiagramm zur Verfügung, nicht aber im Flächendiagramm.

Zweite Y-Achse in Diagramm einfügen

97/2000/XP/2003

Wenn die Daten in 2 Datenreihen ungleich gross sind, dann empfiehlt es sich, die kleinere der Datenreihen auf eine anders skalierte Y-Achse zu nehmen.

Vorgehen: Rechtsklick auf die kleinere Datenreihe - Datenreihen formatieren - Register Achsen - Datenreihe zeichnen auf: Sekundärachse

Duplikate in Listen finden

97/2000/XP/2003

In grossen Listen werden immer wieder aus Versehen Datensätze doppelt eingetragen, wobei sie sich oft in gewissen Spalten unterscheiden. Beispielsweise wird bei einer Adressänderung ein Mitglied neu eingetragen, statt dass die alte Zeile mutiert wird oder bei einem Import von Artikeldaten werden gewisse Artikel zweimal erfasst.

Eine Möglichkeit ist es, mit dem Spezialfilter solche Duplikate farbig zu kennzeichnen. Eine sehr schöne Beschreibung, wie man das macht, findet sich im PCtipp. Die vorgeschlagene Methode hat allerdings zwei Nachteile: Farbig wird immer nur der zweite der doppelten Datensätze und man kann keinen Autofilter anwenden.

Die folgende Methode verwendet eine Hilfsspalte und die Funktion ZÄHLENWENN, so dass anschliessend mit dem Autofilter alle Datensätze mit Differenzen angezeigt werden können.

Voraussetzungen

Vorgehen

Mit ZÄHLENWENN, Autofilter und bedingter Formatierung in Excel Duplikate aufspüren

Klicken Sie hier, um eine Arbeitsmappe mit einer Musterlösung herunterzuladen.

Duplikate in verschiedenen Tabellen finden

97/2000/XP/2003

Im wesentlichen geht es um das gleiche Problem wie oben, aber dieses Mal kommen die Duplikate nicht in derselben Liste vor, sondern es sollen zwei (oder mehrere) Listen in verschiedenen Tabellenblättern (oder sogar Dateien) darauf geprüft werden sollen, ob Duplikate vorkommen. Wenn es nicht möglich ist, die Daten in eine gemeinsame Liste zu kopieren, dann empfiehlt sich eine Problemlösung mit der Funktion VERWEIS. VERWEIS ist insofern flexibler als SVERWEIS, weil die Spalte mit dem Schlüsselfeld, z.B. der Mitgliedernummer, nicht in der 1. Spalte stehen muss

Vorgehen

Klicken Sie hier, um eine Arbeitsmappe mit einer Musterlösung herunterzuladen.

PS: Ein Nachteil dieser Lösung ist es, dass die Formel schnell beliebig kompliziert wird, wenn mehr als zwei Tabellen verglichen oder aufgrund von mehr als einer Spalte verglichen werden sollen. Bei mehreren Tabellen ist auch noch eine Lösung denkbar, die auf den folgenden Tools beruht:

Diese Lösung wird nicht speziell vorgestellt, sie ist aber in der herunterladbaren Datei skizziert. Für diese Lösung ist es übrigens zwingend, dass die Mitgliedernummer in der ersten Spalte steht.

Mit Formel 16-stellige hexadezimale Zufallsnummer erzeugen 

97/2000/XP/2003

Um eine 16-stellige Nummer mit einer Excelformel zufällig zu erzeugen, benötigt man eine Formel, um eine Hexstelle zufällig erzeugen, die man dann so oft wie benötigt verkettet.

Formel für eine zufällige einstellige hexadezimale Nummer:

=DEZINHEX(GANZZAHL(ZUFALLSZAHL()*16))

Diese Formel wird nun 16 Mal verkettet:

=DEZINHEX(GANZZAHL(ZUFALLSZAHL()*16))&DEZINHEX(GANZZAHL(ZUFALLSZAHL()*16))
&DEZINHEX(GANZZAHL(ZUFALLSZAHL()*16))&DEZINHEX(GANZZAHL(ZUFALLSZAHL()*16))
&DEZINHEX(GANZZAHL(ZUFALLSZAHL()*16))&DEZINHEX(GANZZAHL(ZUFALLSZAHL()*16))
&DEZINHEX(GANZZAHL(ZUFALLSZAHL()*16))&DEZINHEX(GANZZAHL(ZUFALLSZAHL()*16))
&DEZINHEX(GANZZAHL(ZUFALLSZAHL()*16))&DEZINHEX(GANZZAHL(ZUFALLSZAHL()*16))
&DEZINHEX(GANZZAHL(ZUFALLSZAHL()*16))&DEZINHEX(GANZZAHL(ZUFALLSZAHL()*16))
&DEZINHEX(GANZZAHL(ZUFALLSZAHL()*16))&DEZINHEX(GANZZAHL(ZUFALLSZAHL()*16))
&DEZINHEX(GANZZAHL(ZUFALLSZAHL()*16))&DEZINHEX(GANZZAHL(ZUFALLSZAHL()*16))

Mit der Formelüberwachung externe Bezüge nachvollziehen

Um komplizierte Berechnungen nachzuvollziehen, kann man die Symbolleiste Formelüberwachung einblenden und die Spur zu den Vorgängern durch mehrmaliges Anklicken der Schaltfläche "Spur zum Vorgänger" mit farbigen Pfeilen anzeigen lassen.

Dabei lässt sich, wie man im folgenden Screenshot sieht, sogar ein Bezug auf einer anderen Tabelle anspringen, indem man den gestrichelten Pfeil doppelklickt.

 

Zurück zum Inhaltsverzeichnis

Genauigkeit von Zahlen

Excel 97/2000/XP/2003

Wer schon einmal versucht hat, in Excel mit sehr grossen oder sehr kleinen Zahlen zu rechnen, wird feststellen, dass diese Zahlen gerundet werden. Das liegt daran, dass Excel zwar mit Zahlen bis zu 10^307 umgehen kann, aber die Rechengenauigkeit beträgt nur 15 Stellen.

Eine gute Quelle zu dieser und weiteren Beschränkungen von Excel ist http://www.xlam.ch/xlimits/excel-new.htm.

Version des Betriebssystem auslesen mit INFO

Excel 97 bis 2010

Mit der Formel =INFO("Sysversion") kann man die aktuelle Windows-Version auslesen. Allerdings ist mir im Selbstversuch auf meinem Notebook mit 64-Bit Windows 7 die folgende Diskrepanz aufgefallen:

Excel behauptet hartnäckig, es handle sich um eine 32-Bit Version, während Windows auf 64-Bit beharrt! Wer lügt? Ich kann mir das eigentlich nur damit erklären, dass ich zwar ein 64-Bit-Windows habe, aber eine 32-Bit-Office-Version. Ich nehme deshalb an, dass Excel nicht die aktuell vorhanden OS-Version anzeigt, sondern den Betriebssystemmodus, unter dem es läuft, d.h. den 32-Bit-Modus. Testen kann ich das allerdings nicht, da mir keine 64-Bit-Office-Version zur Verfügung steht.

Zurück zum Inhaltsverzeichnis

Unabhängige Pivots erstellen

Ab Excel 2007

Vor der Version 2007 wurde man von der zweiten PivotTable an, die auf den gleichen Daten erstellt wurde, gefragt, ob diese voneinander unabhängig sein sollten. In den neueren Excel-Versionen ist diese Option beim Erstellen eines weiteren Pivots verschwunden.
 

In einer neueren Excel-Version sind alle Pivots miteinander abhängig. Dies merkt man spätestens dann, wenn man zwei nach derselben Datumsspalte gruppierte Pivots benötigt, wobei der eine nach Monaten und der zweite nach Jahren gruppiert werden soll. Sobald man den einen Pivot entsprechend gruppiert, ändert sich auch die Gruppierung des andern.

Nur mit einem Trick lassen sich unabhängige Pivots wie in den alten Excel-Versionen erstellen: Mit der Tastenkombination Alt N P kann man den alten PivotTable-Assistenten hervorzaubern. Sobald man den zweiten Pivot auf diese Art erstellt, erhält man auch die alte Option wieder und kann voneinander unabhängige PivotTables erzeugen, indem man die Frage im zusätzlichen Dialogfenster (siehe Screenshot) mit Nein beantwortet.

Zurück zum Inhaltsverzeichnis

Benutzerdefiniertes Zahlenformat für sehr kleine Zahlen

Alle Excel-Versionen

Bei der Verwendung der Regressionsfunktion bin ich darüber gestolpert, dass gewisse statistische Werte recht klein werden können. Excel wechselt dann automatisch ins Wissenschaftsformat.

Im vorliegenden Fall ist das aber je nach Ausgangsdaten gar nicht notwendig, da die Zahl noch als Dezimalzahl mit drei Nachkommastellen dargestellt werden kann. Mit dem folgenden Code kann man benutzerdefinierte Zahlenformate erstellen, die automatisch zum Wissenschaftsformat wechseln, wenn die Zahl < 0.001 ist:

[<0.001]0.000E+00;[>=0.001]0.000

Vorgehen: Zellen mit Zahlen markieren - Rechtsklick - Zellen formatieren - Register Zahlen - Benutzerdefiniert - unter "Typ" das Format von oben eingeben (mit eckigen Klammern).

Zurück zum Inhaltsverzeichnis

Benutzerdefinierte Ansicht lässt sich nicht aktivieren

Sobald auf irgeneinem Blatt einer Arbeitsmappe mit "Einfügen - Tabelle" ein Tabellenbereich erstellt wurde, lassen sich keine benutzerdefinierten Ansichten mehr erstellen. Man muss sich also in einer Mappe entscheiden, ob man alle Tabellenbereiche entfernt oder auf die benutzerdefinierten Ansichten verzichtet.

Zurück zum Inhaltsverzeichnis

Mit negativen Stunden- und Datumswerten rechnen

Vermutlich alle Excel-Versionen

Normalerweise erhält man eine Anzeige wie ##########, wenn man in Excel versucht einen späteren Zeitwert von einem früheren zu subtrahieren (d.h. kleinerer Wert - grösserer Wert), z.B.
="7:45"-"8:00"

Der Grund ist, dass Excel in der Normalkonfiguration keine negativen Zeitwerte berechnet und anzeigt.

xx

Dies lässt sich jedoch ändern, wenn man in den Optionen auf 1904-Datumswerte umstellt. Die Konfiguration in Excel 2016/19 erfolgt unter Datei - Optionen - Erweitert - Gruppe "Beim Berechnen dieser Arbeitsmappe" - Häkchen setzen bei "1904-Datumswerte verwenden". Diese Einstellung bezieht sich normalerweise nur auf die aktuell bearbeitete Arbeitsmappe.

Diese Konfigurationsmöglichkeit gibt es schon sehr lange, in Excel 2003 fand man sie unter Extras - Optionen - Register "Berechnung" - Arbeitsmappenoptionen - 1904-Datumswerte. Die 1904-Datumswerte waren ursprünglich auf dem Mac das Standardformat in Excel für alle Versionen bis und mit Excel 2008. Seit der Excel-2011-Mac-Version sind aber aus Kompatibilitätsgründen wie unter Windows 1900-Datumswerte voreingestellt.
Quelle: https://support.office.com/en-us/article/date-systems-in-excel-e7fe7167-48a9-4b96-bb53-5612a800b487

Achtung: Diese Einstellung führt dazu, dass die Datumswerte im Gegensatz zur Normalkonfiguration erst am 1.1.1904 beginnen, statt am 1.1.1900. Deshalb darf man diese Einstellung nur vornehmen, bevor man mit der Eingabe von Datumswerten beginnt (bei Zeitwerten spielt es keine Rolle), denn bei der Konfigurationsänderung werden alle Datumswerte um grob 4 Jahre nach hinten verschoben (vergleichen Sie die Datumswerte im Screenshot vor und nach der Änderung).

Excel in Optionen auf 1904-Datumswerte umstellen

Nach der Konfigurationsänderung werden die Berechnungen folgendermassen angezeigt:

Negative Datums- und Zeitwerte mit 1904-Datumskonfiguration

Alles in allem erscheint mir diese Konfigurationsänderung wegen der Datumsverschiebung als ziemlich problematisch. Stattdessen würde ich empfehlen, dass man mit Dezimalstunden statt mit mit Werten im Stundenformat rechnet. Die Dezimalstunden erhält man, wenn man einen Wert im Stundenformat mit 24 multipliziert, also z.B.
="8:25"*24
Dies ergibt den Wert 8.416.

Dezimalstunden haben ausserdem den Vorteil, dass man sie direkt mit anderen Werten wie z.B. Stundenansätzen verrechnen kann und dass man kein Spezialformat wie [hh]:mm benötigt, um Werte über 24:00 anzuzeigen.

Zurück zum Inhaltsverzeichnis


Outlook

Outlook-Daten sichern

Outlook 97 / 2000

Outlook ist ein toller Alleskönner, der dazu verlockt, immer mehr in Outlook abzulegen. Bald einmal stellt sich die Frage, wo denn die Outlook-Daten eigentlich abgelegt sind und wie man sicherstellen kann, dass sie gesichert werden.

Alle Outlook-Daten befinden sich in den folgenden zwei Dateien:

Je nach Betriebssystem und Outlook-Version befindet sich diese Datei in verschiedenen Verzeichnissen, so dass Sie sie am besten mit der Suchfunktion des Windows-Explorers lokalisieren.

Am besten ist es, diese zwei Outlook-Dateien in Verzeichnisse zu verschieben, für die standardmässig ein Backup erstellt wird. In den Menüs und Optionen von Outlook sucht man allerdings vergeblich nach einer Möglichkeit, diese zwei Dateien in ein anderes Verzeichnis zu verschieben. Es geht nur mit brachialer Gewalt: Outlook schliessen, Dateien im Windows-Explorer lokalisieren, in gewünschtes Verzeichnis verschieben. Beim nächsten Öffnen fragt Outlook, wo die Datei outlook.pst geblieben ist, und ermöglicht Ihnen, den Pfad zur verschobenen Datei anzugeben.

Weiteres Postfach öffnen

(XP mit Exchange)

Wenn man mit Outlook an einen Exchange-Server angeschlossen ist, dann lassen sich auch Postfächer von anderen Personen öffnen und damit deren Terminkalender, Mails etc. einsehen. Dazu muss diese andere Person ihr Postfach und alle weiteren Ordner erst freigeben, indem sie einen Rechtsklick auf den Ordner macht, Eigenschaften auswählt, und im Register Berechtigungen die entsprechende Berechtigung hinzufügt (Das Register existiert nur, wenn Exchange vorhanden ist).

Das freigegebene Postfach lässt sich nun einbinden, indem man ins Menü Extras - E-Mail-Konten geht, im ersten Schritt die Standardauswahl Vorhandene E-Mail-Konten anzeigen oder bearbeiten belässt, mit Weiter zum nächsten Schritt wechselt, die Schaltfläche Ändern und im nächsten Fenster Weitere Einstellungen anklickt. Im Register Erweitert lässt sich mit Hinzufügen dann das weitere Postfach einfügen.

Automatische Lesebestätigung zurücksetzen

Outlook XP (2002)

Outlook-Mails lassen sich mit der Option "Lesebestätigung" verschicken. Wer das erste Mal ein solches Mail erhält, wird in einem Dialogfenster gefragt, ob eine Bestätigung verschickt werden soll und ob in Zukunft diese Bestätigungen ohne Rückfrage automatisch erfolgen sollen. Wer diese Option ankreuzt, ohne gross nachzudenken, kann sie später folgendermassen zurücksetzen:

Menü Extras - Optionen - Register Einstellungen - Schaltfläche E-Mail-Optionen - Schaltfläche Verlaufoptionen - Optionsschaltflächen im unteren Teil des Fensters auf Nie eine Antwort senden oder Das Senden einer Antwort vorher bestätigen zurücksetzen.

Zurück zum Inhaltsverzeichnis


Zusammenarbeit zwischen Office-Programmen

Excel-PivotTables aus Access-Daten erstellen

Access 2000 / Excel 2000

Access kennt zwar für Auswertungen nach mehreren Kriterien (z.B. Umsatz nach Ländern und Produkten) die sogenannten Kreuztabellenabfragen. Diese entsprechen in Excel den Pivottabellen (Pivottabellen hiessen früher auch Kreuztabellen). Pivottabellen in Excel sind allerdings sehr viel flexibler und bieten mehr inhaltliche und gestalterische Möglichkeiten als Kreuztabellenabfragen in Access. Deshalb macht es Sinn, die Daten in Access zu halten, für kompliziertere Auswertungen aber Excel zu verwenden. Dies wird in Microsoft Office schon seit einigen Versionen unterstützt. Das Zusammenspiel beruht nicht auf einem Datenimport, sondern auf einer Verknüpfung mit den Access-Originaldaten.

Vorgehen:

  1. Öffnen Sie Microsoft Excel
  2. Wählen Sie das Menü Daten - PivotTable- und PivotChart-Bericht
  3. Im 1. Schritt des Assistenten wechseln Sie auf Externe Datenquelle
  4. Im 2. Schritt klicken Sie auf die Schaltfläche Daten abrufen
  5. Im Register Datenbanken des Dialogfensters Datenquelle auswählen klicken Sie Microsoft-Access-Datenbank an und dann OK
  6. Im nächsten Dialogfenster wechseln Sie in das Verzeichnis, wo die Access-Datenbank liegt, wählen die gewünschte Datei an (Endung .mdb) und klicken OK an
  7. Im Query-Assistenten wählen Sie die Tabelle oder Abfrage mit den der Auswertung zugrunde liegenden Daten aus und übernehmen mit der Schaltfläche > alle Felder in Spalten in ihrer Abfrage.

  8. Die nächsten drei Dialogfenster können Sie auf den Standardeinstellungen belassen. Wenn Sie auf dem letzten Dialogfenster die Schaltfläche Fertigstellen anklicken, landen Sie wieder auf dem PivotTable-Assistenten im Schritt 2, mit dem Unterschied, dass nun Daten gefunden wurden.
  9. Im Schritt 3 klicken Sie ebenfalls auf Fertigstellen  
  10. Nun können Sie eine normale Pivottabelle erstellen, indem Sie die Felder aus der Symbolleiste PivotTable in die richtigen Bereiche ziehen. In einer Kundentabelle eignet sich das Feld Land z.B. als Zeilenfeld, das Feld Geschlecht als Spaltenfeld und Umsatz als Datenfeld.

     
  11. Sie können die resultierende PivotTable nun mit besseren Zahlenformaten versehen, Zeilen- und Spalten tauschen, Kategorien ein- und ausblenden, d.h. Sie haben alle Gestaltungsmöglichkeiten zur Verfügung, die eine PivotTable mit Exceldaten auch bietet.
  12. Solange nun die Access-Datei nicht auf in ein anderes Verzeichnis verschoben oder umbenannt wird, lassen sich mit der Schaltfläche Daten aktualisieren jederzeit die neuesten Daten aus Access in die fertige Excel-PivotTable holen.

     

Datumsformat in Serienbriefen mit Datenquelle Excel (XP)

In Word XP klappt in der deutschen Version bei Serienbriefen mit einer Excel-Datenquelle die Übernahme von Daten im Datumsformat nicht mehr. Sie werden trotz anderer Ländereinstellung im amerikanischen Format angezeigt.

Es gibt zwei Lösungen für dieses Problem:

  1. Man formatiert das Feld mit dem Datumswert nachträglich mit dem richtigen Format. Dazu muss man die Feldfunktionen anzeigen mit Extras - Optionen - Register Ansicht - Anzeigen - Feldfunktionen. Anschliessend ergänzt man das Feld mit dem Format, z.B. {MERGEFIELD "Eintrittsdatum" \@ "d.MM.yyyy"}
    Vorteil dieser Methode ist, dass man das Datum beliebig umformatieren kann, z.B. den Wochentag anzeigen etc. In der Hilfe findet man Genaueres mit dem Stichwort "Feldschalter". Nachteilig ist, dass man die Formatierung für jede Datumsspalte einzeln eingeben muss.
     
  2. Man wechselt beim Import auf den Importfilter DDE. Damit man den Importfilter überhaupt auswählen kann, muss man auf Bestätigung der Konvertierung umschalten mit Extras - Optionen - Register Allgemein - Konvertierung beim Öffnen bestätigen.
    Beim Verbinden mit der Datenquelle erhält man nun ein zusätzliches Dialogfenster, wo man MS Excel-Arbeitsblätter über DDE auswählt.

    Damit werden die Datumswerte im richtigen Format übernommen. Allerdings funktioniert diese Methode nur, wenn die Daten auf dem ersten Tabellenblatt liegen. Eine Auswahl der Blätter ist nicht möglich.

Zurück zum Inhaltsverzeichnis


Visual Basic for Applications (VBA)

Option Explicit in Excel-Funktionen (97)

Excel 97

Mit dem Befehl Option Explicit am Anfang eines VBA-Programms erzwingt man, dass Variablen deklariert werden müssen. Dies gehört zu guter Programmierpraxis und sollte immer von Anfang an berücksichtigt werden.

Über einen bösartigen Bug in diesem Zusammenhang bin ich gestolpert, als ich bei einem VBA-Projekt in Excel 97 Option Explicit nachträglich eingeführt habe. In VBA-Prozeduren ist dies kein Problem: Wenn die Deklaration einer Variablen vergessen wurde, bricht der Interpreter beim Testen des Makros mit einem Hinweis auf die fehlende Deklaration ab. 

Nun lassen sich in Excel mit VBA nicht nur Makro-Prozeduren erstellen, sondern auch benutzerdefinierte Tabellenfunktionen. Diese Funktionen lassen sich anschliessend in den Excel-Tabellen genauso verwenden wie die eingebauten Funktionen, z.B. SUMME(..) oder RUNDEN(..). Das fiese ist nun, dass bei nachträglicher Einführung von Option Explicit der Interpreter bei fehlenden Variablendeklarationen in Funktionen keine Fehlermeldung liefert. Der Makro bricht einfach irgendwann ohne Meldung ab. Die Codezeile, an der der Interpreter stehen bleibt, gab keinen direkten Hinweis auf die fehlerhafte Funktion. Zum Teil war es das Neuberechnen eines Blattes oder Bereiches mit Calculate, zum Teil aber auch die Auswahl einer bestimmten Zelle mit Select, wobei in der ausgewählten Zelle die fehlerhafte Funktion nicht vorkam. Es brauchte Dutzende von Schritt-für-Schritt-Debugging-Versuchen und einiges an Detektivarbeit, bis ich den rätselhaften Abbrüchen auf die Spur kam. Hätte ich von Anfang an mit Option Explicit  gearbeitet, dann wäre mir das nicht passiert!

SPAN-Tag einfügen in Frontpage (2000)

Frontpage 2000

Ab Version 2000 hat Microsoft Frontpage ein VBA-Modul spendiert. Allerdings sieht es so aus, wie wenn die Frontpage-Entwickler/innen auf halben Weg stecken geblieben wären: Es gibt keine Möglichkeit, Makros aufzuzeichnen. Das Objektmodell hat keinerlei Ähnlichkeit mit Word, was für einen Editor eigentlich naheliegend wäre, sondern scheint eine schnelle Portierung des clientseitigen DOMs zu sein. Die Dokumentation in Frontpage 2000 weist schliesslich kaum Codebeispiele auf und scheint aus zwei verschiedenen Dokumentationen zusammengeschustert zu sein (in Frontpage XP ist die Hilfe etwas besser). Das ist nicht allein meine Meinung, dasselbe kann man in Newsgroups in Dutzenden von Beiträgen nachlesen.

Als ich mich hinter das VBA-Modul von Frontpage setzte, hatte ich ein ganz konkretes, wie ich damals dachte simples Ziel: Ich wollte einen Makro, der um selektierten Text ein SPAN-Tag mit einer CSS-Klasse einfügt, da ich dies in Artikeln wie dem vorliegenden sonst Dutzende von Malen von Hand in der HTML-Ansicht einfügen muss.

Irgendwann stiess ich dann in der Dokumentation auch auf das richtige Objekt, nämlich IHTMLTxtRange. Allerdings lief der Makro einfach nicht so wie er sollte. Statt etwas einzufügen, löschte er die Selektion. Erst ein Code-Beispiel aus einer Newsgroup half mir dann weiter. Und nachdem ich noch gemerkt hatte, dass man mit der Methode pasteHTML nur paarweise HTML-Tags einfügen kann, lief es dann endlich. Hier nun das Resultat von mehreren Stunden Arbeit:

'Fügt um eine Selektion ein SPAN-Tag mit einer CSS-Klasse ein
Sub insertSpan()
  Dim objTxtRange As IHTMLTxtRange

  'Aus Selection ein TxtRange-Objekt machen
  Set objTxtRange = ActiveDocument.selection.createRange()

  'Achtung: pasteHTML funktioniert nur mit paarweisen Tags
  objTxtRange.pasteHTML ("<span class=""code"">" & _
    objTxtRange.htmlText & "</span>" & vbCrLf)
End Sub

Access-Ereignisprozeduren in Module auslagern

Access 2000

Ein Grundprinzip von Access widerspricht jeder strukturierten Programmierung, nämlich die Tatsache, dass Ereignisprozeduren von Formularen immer in einem zum Formular gehörenden Modul abgelegt werden. Bei grösseren Projekten mit vielen Formularen führt dies rasch dazu, dass der Code auf Dutzende von Formularmodulen verteilt ist. Zudem gibt viele Ereignisprozeduren, die sich für verschiedene Steuerelemente wiederholen.

Um eine Duplizierung des Codes zu vermeiden und den Code einer Access-Applikation allgemein übersichtlicher zu machen, ist es deshalb sinnvoll, statt den standardmässig erstellten Ereignisprozeduren eigene öffentliche Funktionen zu erstellen, die in einem öffentlichen Modul abgelegt sind. Ich möchte dies an einem praktischen Beispiel zeigen: In meiner Applikation lösen diverse Felder und Schaltflächen nach unterschiedlichen Ereignissen auf verschiedenen Formularen ein Aktualisieren der Daten in anderen Feldern oder Unterformularen aus.

Falls nicht bereits vorhanden, erzeugen Sie im Visual Basic-Editor ein neues Modul (Extras - Makro - Visual Basic-Editor - Einfügen - Modul). In diesem Modul erstellen Sie die folgende Funktion. Wenn Sie den Code direkt anstelle der Ereignisprozedur aufrufen wollen, muss es eine Funktion sein, mit einer Prozedur funktioniert es nicht. In diesem Modul erstellen Sie die folgende Funktion:

Public Function funrequery(ByRef objctr)
  objctr.Requery
  funrequery = True
End Function

Wichtig ist dabei, dass Sie das zu aktualisierende Objekt als Parameter in die Funktion übergeben, und zwar ByRef, denn das Objekt soll ja verändert werden. Da es sich um eine Funktion handelt, wird in der letzten Zeile noch der Wert true zurückgegeben.

Nun bleibt noch die Frage offen, wie diese Funktion mit den Steuerelementen verbunden wird. Dazu gehen Sie zurück in die Entwurfsansicht eines Formulars, doppelklicken auf ein Steuerelement, das mit der Prozedur verbunden werden soll, suchen im Eigenschaftsfenster im Register Ereignis das gewünschte Ereignis und ersetzen der Prozuraufruf durch folgenden Code:

=funrequery([sfr_codelist])

In eckigen Klammern befindet sich der Name des zu aktualisierenden Elementes. Im aktuellen Fall handelt es sich, wie man aus dem Namen ersieht, um ein Unterformular. Auf dieselbe Art können nun diverse Ereignisprozeduren ersetzt werden, wobei sich nur der Name in den eckigen Klammern ändert.

Zurück zum Inhaltsverzeichnis


Buchtipp

Und übrigens gibt's nun "Excel 2000 Direkt", das Excel-Buch der Autorin, als Antiquariatsartikel bei Data Becker für schlappe Euro 2,53. Bestellen Sie mit dem Stichwort "excel 2000 direkt" unter Data Becker.



Diese Webseite wurde am 20.01.22 um 15:50 von rothen ecotronics erstellt oder überarbeitet.

Impressum

Zurück zu rothen ecotronics

Printed on 100% recycled electrons!