Von: access-weekly-html-request@smarttools.de im Auftrag von SmartTools Publishing [access-weekly-html-reply@smarttools.de]
Gesendet: Donnerstag, 24. November 2005 22:54
An: Access Weekly Abonnenten
Betreff: SmartTools Access Weekly vom 25.11.2005

Ausgabe vom 25. November 2005

 In dieser Ausgabe

Access-News & Downloads
Access-Tipp der Woche
Access-Helpline
Newsletter-Tipp
 Access-News & Downloads

Spotlight: Access-Datenbanken optimieren, analysieren und dokumentieren

Stellen Sie sicher, dass jede Datenbank fehlerfrei und mit optimaler Geschwindigkeit läuft!

Der Total Access Analyzer prüft jedes einzelne Objekt in Ihrer Datenbank und liefert Ihnen in übersichtlicher und komfortabler Form:

  • Versteckte Fehler
  • Optimierungstipps
  • Grafische Übersichten
  • Ungenutzte Objekte
  • Cross-Referenz
  • Übersichtliche Dokumentation aller Datenbankobjekte
Mit dem Total Access Analyzer steht Ihnen ein leistungsfähiges Tool zur Verfügung, um komplexe Datenbanken schnell in den Griff zu bekommen.

Mehr als 300 Berichte, Analysen und grafische Darstellungen helfen Ihnen, nicht nur die vorhandenen Objekte zu dokumentieren, sondern auch alle Zusammenhänge und Beziehungen sofort zu erfassen. Fast nebenbei kommen Sie Fehlern sowie ungenutzten Objekten auf die Spur und erhalten gezielte Tipps zur Optimierung Ihrer Anwendung.

Weitere Informationen finden Sie unter:

Total Access Analyzer für Access 2003

Total Access Analyzer für Access 2002/XP

Total Access Analyzer für Access 2000

Download-Tipp: Neue Version des Popup-Taschenrechners für Ihre Access-Formulare

In Ihren Formularen müssen Sie immer wieder kleine individuelle Berechnungen durchführen, für die keine festen Formeln eingesetzt werden können. Es bleibt also nur der Umweg über einen Taschenrechner, in den Sie die Berechnung eingeben, das Ergebnis ablesen und dann in das Formular übertragen. Unsere fertige Lösung hilft weiter: Nutzen Sie den fertigen Popup-Taschenrechner, um Ihre Formulare in Zukunft noch komfortabler zu machen.

Ein Mausklick genügt und der Taschenrechner steht Ihnen sofort zur Verfügung. Der aktuelle Feldinhalt wird automatisch übertragen, Sie nehmen die gewünschte Berechnung vor und übertragen das Ergebnis dann mit einem weiteren Mausklick wieder in das Formular. Die kostenlose Lösung samt Anleitung finden Sie jetzt in der neuesten Version 1.5 unter:

 Popup-Taschenrechner kostenlos herunterladen!

Techinfo: Einsatzbereitschaft des SQL Servers optimieren

Durch das so genannte "Failover Clustering" können Sie jederzeit die Verfügbarkeit Ihres SQL-Servers sicherstellen: Dabei kommen zwei SQL Server zum Einsatz, die ihre Datenbestände synchronisieren und sich gegenseitig auf Einsatzbereitschaft testen. Im Notfall übernimmt ein Server dann die Erledigung eingehender Anfragen und informiert den Administrator über das Problem. Wie ein solches "Failover Clustering" eingerichtet und genutzt wird, ist Inhalt eines umfangreichen White Papers der MSDN-Spezialisten, das Sie unter der folgenden Adresse finden:

Einsatzbereitschaft des SQL Servers optimieren

 Access-Tipp der Woche

Verknüpfte Excel-Tabellen in Access wieder aktualisieren, Teil 1
Versionen: Access 2003 und 2002/XP

Nach der Installation des Service Pack 2 für Office 2003 oder des Hotfixes KB904018 vom 18.10.2005 für Access 2002/XP lassen sich verknüpfte Excel-Tabellen nicht mehr aktualisiert werden. Beim Versuch, einen Feldinhalt zu ändern, ist lediglich ein akustischer Hinweis zu hören, eine Fehler- oder Statusmeldung wird nicht ausgegeben.

Viele Access-Anwender stehen damit vor ernsthaften Problemen, da unzählige Lösungen, die auf dieser Technologie basieren, von heute auf morgen nicht mehr funktionieren. In unserem zweiteiligen Tipp der Woche stellen wir Ihnen eine Technik vor, mit der sich das Problem zwar nicht komplett lösen, aber zumindest etwas kompensieren lässt.

Microsoft schlägt in einem Knowledge Base-Artikel zu diesem Thema vor, die betreffende Excel-Tabelle in Access zu importieren, die gewünschten Änderungen vorzunehmen und die Access-Tabelle dann wieder in eine Excel-Arbeitsmappe zu exportieren. Das mag in einigen wenigen Fällen praktikabel sein, aber wenn Sie Änderungen zum Beispiel täglich vornehmen müssen, ist dieser Weg zu umständlich. Wichtig wäre eine automatische Technik, um die Excel-Tabelle beim Öffnen der Datenbank zu importieren und die geänderten Daten beim Verlassen der Anwendung wieder in die Tabelle zu exportieren:

  1. Löschen Sie zunächst die Verknüpfung mit der Excel-Tabelle im Bereich "Tabellen" des Datenbankfensters.
  2. Legen Sie ein Modul "modExcelImpExp" an und geben Sie die folgenden Funktionen ein:
Function ImportExcelTab(strWorkbook As String, _
                        strExcelTabName As String, _
                        strAccTabName As String)

  On Error Resume Next
  ImportExcelTab = False 'Vorgabe: Problem
  DoCmd.SetWarnings False
  DoCmd.RunSQL "DROP TABLE " & strAccTabName
  DoCmd.SetWarnings True
  Err = 0
  DoCmd.TransferSpreadsheet acImport, _
        acSpreadsheetTypeExcel8, _
        strAccTabName, strWorkbook, True, _
        strExcelTabName & "!"
  If Err <> 0 Then
    Beep
    MsgBox "Fehler beim Importieren von '" & _
           strWorkbook & _
           "' (Tabelle: " & strExcelTabName & ")" & _
           vbCrLf & vbCrLf & Err.Description, _
           vbOKOnly + vbExclamation, "!!! Problem !!!"
  Else
    ImportExcelTab = True
  End If

End Function

Function AddSlash(aPath As String) As String

  AddSlash = aPath
  If Trim$(aPath) = "" Then Exit Function
  If Right$(aPath, 1) = "\" Then Exit Function
  AddSlash = aPath + "\"

End Function

Function GetDataBasePath() As String
  Dim db As DAO.Database, L As Integer, aPath As String

  Set db = CurrentDb()
  aPath = db.Name
  L = Len(aPath)
  While Mid$(aPath, L, 1) <> "\" And L > 0
      L = L - 1
  Wend
  If L > 1 Then
      aPath = Left$(aPath, L)
  Else
      aPath = ""
  End If
  GetDataBasePath = aPath

End Function

Function PathOnly(strPath As String) As String
  Dim L As Integer

  PathOnly = ""
  If InStr(strPath, "\") = 0 Then Exit Function
  L = Len(strPath)
  While Mid$(strPath, L, 1) <> "\" And L > 0
      L = L - 1
  Wend
  If L > 1 Then PathOnly = Left$(strPath, L)

End Function

  • Setzen Sie über Extras-Verweise eine Referenz auf "Microsoft DAO Object Library 3.6" und auf "Microsoft Excel x.0 Object Library" (x.0= 11.0 für Excel 2003, 10.0 für Excel 2002/XP).
  • Legen Sie ein "AutoExec"-Makro an oder ergänzen Sie ein vorhandenes "AutoExec"-Makro um die folgende Aktion:
Aktion: AusführenCode
Funktionsname: ImportExcelTab("<Arbeitsmappe>",
"<ExcelTabelle>", "<AccessTabelle>")

Für "Arbeitsmappe" geben Sie Pfad und Dateiname der Excel-Arbeitsmappe an, aus der eine Tabelle importiert werden soll. "ExcelTabelle" spezifiziert das zu importierende Tabellenblatt und "AccessTabelle" ist der Name der Tabelle, in die die Daten importiert werden. Diese Tabelle muss nicht vorhanden sein, vielmehr wird sie von der Funktion "ImportExcelTab()" bei Vorhandensein gelöscht.

  • Speichern Sie das Makro und verlassen Sie den Makroentwurf.
Damit ist zunächst der Mechanismus aufgebaut, der eine Excel-Tabelle beim Öffnen der Datenbank importiert. Das geschieht künftig mit Hilfe der Funktion "ImportExcelTab()" wie folgt: Im ersten Schritt wird die Tabelle gelöscht, in die die Daten aus der Excel-Tabelle importiert werden sollen. Andernfalls würde die folgende Ausführung von "DoCmd.TransferSpreadsheet" scheitern, da es keine vorhandenen Tabellen ersetzen oder überschreiben kann. Das Löschen der Tabelle übernimmt eine SQL-Anweisung, die per "DoCmd.RunSQL" nicht nur schneller ausgeführt wird, sondern wesentlich einfacher ist, als das übliche Löschen über die "TableDefs"-Auflistung. Per "DoCmd.SetWarnings" schalten wir zuvor Sicherheitsabfragen von Access aus und anschließend wieder ein. Der zweite Schritt besteht dann darin, per "DoCmd.TransferSpreadsheet" aus der jeweiligen Arbeitsmappe (Parameter "strWorkbook" die gewünschte Excel-Tabelle (Parameter "strExcelTabName") in die Access-Tabelle (Parameter "strAccTabName") zu übertragen. Wichtig ist dabei, dass der Name der Excel-Tabelle um ein Ausrufezeichen ergänzt wird, damit Excel erkennt, dass ein komplettes Tabellenblatt adressiert wird. Kommt es beim Import zu einem Fehler, wird dieser entsprechend angezeigt.

Testen können Sie den Import bei Bedarf mit folgender Prozedur:

Sub TestImport()
  Dim strPath As String
  Dim strFName As String
  Dim strTabRange As String
  Dim fOK As Boolean

  strPath = GetDataBasePath()
  strFName = AddSlash(strPath) & "Testmappe.xls"
  strTabRange = "Tabelle1"
  fOK = ImportExcelTab(strFName, _
                       strTabRange, _
                       "ExcelImport")

End Sub


Im zweiten Teil dieses Tipps in der nächsten Ausgabe geht es dann um den automatischen Export der Excel-Tabelle beim Schließen der Datenbank.

ANZEIGE 
Einzeladressen aus Access und Outlook komfortabel nach Word übernehmen

Vergessen Sie das lästige Nachschlagen von Adressen!

Erledigen Sie Ihre Korrespondenz in Zukunft schnell und komfortabel:

  • Direkte Übernahme von Einzeladressen aus Outlook, Exchange Server sowie beliebigen Access-Datenbanken
  • Komfortabler Abruf der Adressen per Mausklick direkt aus Word 2003, 2002/XP und 2000
  • Flexible Übernahme in beliebige Vorlagen für Briefe, Faxe, Rechnungen, Mahnungen, Lieferscheine usw.
  • Musterbrief-Verwaltung mit über 100 fertigen Briefen - beliebig erweiterbar um Ihre persönlichen Mustertexte
  • Nutzen Sie den Aktionspreis: Zurzeit erhalten Sie 25% Rabatt!
Ausführliche Informationen zum SmartTools Brief- und Fax-Manager 2003 finden Sie unter:

SmartTools Brief- und Fax-Manager 2003


 Access-Helpline

Haben Sie Fragen zu Access 2003, 2002/XP, 2000 oder 97? Dann wenden Sie sich mit einer genauen Problembeschreibung (bitte keine Datenbanken schicken!) an:

access-helpline@smarttools.de

Unser Redaktionsteam wählt in jeder Ausgabe eine oder mehrere Fragen aus und beantwortet Sie an dieser Stelle im Newsletter.

Einfügen von Datensätzen verhindern
Versionen: Access 2003, 2002/XP, 2000 und 97

 FRAGE:  Bei der Ausführung von Bearbeiten-Am Ende Anfügen fügt Access einen zuvor kopierten Datensatz zur Datenbasis des Formulars hinzu, ohne dabei jedoch irgendwelche Ereignisprozeduren aufzurufen, die wir für die Felder angelegt haben. Aber gerade die Möglichkeit, über Ereignisprozeduren Feldinhalte auf Basis anderer Felder vorzugeben oder zu berechnen (Bei Fokuserhalt, Beim Eintritt) oder Feldinhalte nach Abschluss einer Eingabe oder einer Änderung zu verifizieren (Vor Aktualisierung, Nach Aktualisierung), sind elementarer Bestandteil unserer Formulare. Wir suchen deshalb nach einer Möglichkeit, das Anfügen kompletter Datensätze zu unterbinden. Ist das überhaupt möglich?
E. Yaldiz

 ANTWORT:  Jeder Menüeintrag in einem Menü oder jedes Symbol in einer Symbolleiste kann per VBA deaktiviert werden. Der Zugriff erfolgt über die Auflistung "[Application.]CommandBars". Auf diesem Weg sind die Menüleiste, alle Symbolleisten und alle Kontextmenüs erreichbar. Die einzelnen Einträge oder Symbole werden dabei über eine ID-Nummer identifiziert. Eine Methode "FindControl", mit der gewünschten ID als Parameter aufgerufen, liefert eine Referenz auf einen Menüeintrag wie zum Beispiel Am Ende Anfügen, über die sich der Menüeintrag dann deaktivieren lässt. Das könnte zum Beispiel in der Ereignisprozedur "Beim Laden" (Form_Load) eines Formulars erfolgen:

Private Sub Form_Load()
  Dim CmdBar As Office.CommandBar
  Dim Ctrl As Office.CommandBarControl

  Set CmdBar = CommandBars("Menu Bar")
  Set Ctrl = CmdBar.FindControl(ID:=2075, Recursive:=True)
  Ctrl.Enabled = False
  Set Ctrl = CmdBar.FindControl(ID:=755, Recursive:=True)
  Ctrl.Enabled = False

End Sub

Hier wird zunächst eine Referenz auf die Menüleiste (CommandBars("Menu Bar")) ermittelt und der Objektvariablen "CmdBar" zugewiesen. Deren Methode "FindControl" liefert dann im ersten Schritt eine Referenz auf den Eintrag mit der ID "2075", die dem Menüpunkt Am Ende Anfügen entspricht. "Recursive:=True" sorgt dafür, dass nicht nur die oberste Ebene der Menüleiste, sondern sämtliche Untermenüs sowie deren eventuell vorhandene "Unteruntermenüs" durchsucht werden. Das Ergebnis wird in der Objektvariablen "Ctrl" festgehalten. Die Zuweisung "Ctrl.Enabled = False" deaktiviert dann schließlich den Menüpunkt. Der Anwender kann in beiden Fällen nach wie vor beispielsweise über den Datensatzmarkierer oder Umschalt+Leertaste einen Datensatz markieren, kopieren und zum Beispiel in Excel oder Word wieder einfügen, aber es ist nicht möglich, den Datensatz zur aktuellen Datenbasis hinzuzufügen und damit Ereignisprozeduren zu umgehen.

Außerdem aktivieren wir im oben gezeigten Beispiel den Menüpunkt Inhalte Einfügen (ID= 755), um zu verhindern, dass ein Datensatz auf diesem Weg am Ende der Datenbasis des Formulars eingefügt wird. Alternativ zu "Ctrl.Enabled = False" können Sie den Menüeintrag auch per "Ctrl.Visible = False" verstecken und so unerwünschten Fragen vorbeugen.

Wichtig ist, dass Sie beim Schließen des Formulars die Menüeinträge wieder zurücksetzen, da sie sonst auch in Bereichen nicht mehr verfügbar sind! Das erfolgt dann analog zu "Beim Laden" in der Ereignisprozedur "Beim Entladen" (Form_Unload) des Formulars:

Private Sub Form_Unload(Cancel As Integer)
  Dim CmdBar As Office.CommandBar
  Dim Ctrl As Office.CommandBarControl

  Set CmdBar = CommandBars("Menu Bar")
  Set Ctrl = CmdBar.FindControl(ID:=2075, Recursive:=True)
  Ctrl.Enabled = True 'oder Visible = True
  Set Ctrl = CmdBar.FindControl(ID:=755, Recursive:=True)
  Ctrl.Enabled = True 'oder Visible = True

End Sub

COM-Add-Ins weitergeben und einbinden
Versionen: Access 2003, 2002/XP und 2000

 FRAGE:  Ich habe mit Visual Basic testweise ein kleines COM-Add-In entwickelt, das auf meinem System problemlos läuft. Wie aber übertrage ich es auf einen anderen Rechner? Alle Versuche, es über den Add-In-Manager einzubinden, sind gescheitert.
B. Meyer

 ANTWORT:  Der Add-In-Manager ist nur für Add-ins zuständig, die in den Access-Formaten MDA, MDE etc. vorliegen. COM-Add-Ins bedürfen einer besonderen Einbindung: Wenn Sie ein COM-Add-In unter Visual Basic kompiliert haben, ist es automatisch beim System registriert und wird beim nächsten Start von Access eingebunden. Möchten Sie Ihre COM-Add-Ins weiterzugeben, wird die DLL-Datei zunächst auf den Ziel-Rechner kopiert. Dann muss Access über das COM-Add-In unterrichtet werden. Dazu stehen zwei Wege zur Verfügung: Die manuelle Einbindung in Access erfolgt über den Dialog "COM-Add-Ins", der allerdings nicht direkt erreichbar ist:

  1. Klicken Sie mit der rechten Maustaste auf eine Symbolleiste und wählen Sie Anpassen im Kontextmenü an.
  2. Wechseln Sie auf die Registerkarte "Befehle", markieren Sie in der Liste Kategorie den Eintrag "Extras" und ziehen Sie dann aus der Liste Befehle den Eintrag "COM-Add-Ins..." (letzter Eintrag in der Liste) in die Symbolleiste.
  3. Klicken Sie im Dialog "Anpassen" auf die Schaltfläche Schließen.
Über den Dialog können Sie nun per Schaltfläche Hinzufügen das jeweilige COM-Add-In einbinden.

Der zweite Weg mit automatischer Einbindung in Access führt über das Kommandozeilen-Tool "regsvr32.exe", das Sie im Windows-Systemverzeichnis finden. Wenn Sie die DLL Ihres COM-Add-Ins "comaddin.dll" beispielsweise in ein Verzeichnis "C:\Programme\Mein COM-Add-In" kopiert haben, geben Sie über das Menü Start-Ausführen oder in einer DOS-Box folgendes ein:

Regsvr32 C:\Programme\Mein COM-Add-In\comaddin.dll

Damit wird das COM-Add-In beim System registriert und beim nächsten Start von Access geladen.

ANZEIGE 
Excel-Tabellen automatisch vergleichen und zusammenführen

Der Synkronizer 8.0 Premium liefert genau die Funktionen, die Microsoft in Excel vergessen hat: Er kann Ihre Kalkulationsmodelle, Tabellen, Listen und Datenbanken in Excel voll automatisch vergleichen, Unterschiede markieren und auf Wunsch zu einer einzigen aktuellen Version zusammenführen.

Sparen Sie künftig viele Stunden mühseliger Kleinarbeit, denn der Synkronizer 8.0 Premium wird Ihnen bei der täglichen Arbeit mit Excel immer wieder eine unentbehrliche Hilfe sein. Zum Beispiel:

  • Führen Sie mehrere Versionen der gleichen Tabelle in einer einzigen Datei zusammen, die alle Änderungen der anderen Versionen enthält.
  • Markieren Sie mit wenigen Mausklicks die Unterschiede zwischen zwei Versionen eines Kalkulationsmodells.
  • Arbeiten Sie Änderungen voll automatisch in eine Liste (Preise, Artikel, Aufträge etc.) ein.
  • Erstellen Sie aus mehreren Adresslisten eine einzige Adressliste ohne Duplikate.
  • Kombinieren Sie zwei Listen mit unterschiedlichen Informationen zu einer aussagekräftigen Gesamtliste.
Weitere Informationen zu diesem unentbehrlichen Excel-Tool finden Sie unter:

Synkronizer 8.0 Premium


Daten aus Access in Word-Dokumente einfügen
Versionen: Access 2003, 2002/XP, 2000 und 97

 FRAGE:  Ich möchte aus einem Formular heraus Word starten, Daten an Textmarken einfügen und das Dokument dann zur weiteren Bearbeitung anzeigen lassen. Das funktioniert grundsätzlich schon, aber ich erhalte auf einigen Systemen in unserer Firma einen Laufzeitfehler "Objektvariable oder With-Block nicht gesetzt". Was könnte die Ursache sein?
J. Bries

 ANTWORT:  Vermutlich initialisieren Sie zunächst per "CreateObject()" eine Variable "objWord" und versuchen dann, über die Auflistung "objWord.ActiveDokument.Bookmarks" auf die Textmarken zuzugreifen. Das scheitert allerdings in Einzelfällen, wenn Word "leer" ohne aktives Dokument gestartet wird. Sie sollten deshalb zunächst prüfen, ob ein aktives Dokument vorhanden ist und wenn nicht, ein leeres Dokument anlegen:

.....
Set objWord = CreateObject("Word.Application")
If objWord.Documents.Count = 0 Then
  objWord.Documents.Add
End If
.....

"Documents.Count" gibt Auskunft darüber, wie viele Dokumente in Word geöffnet sind. Wird hier "0" gemeldet, ist kein Dokument geöffnet. "Documents.Add" legt dann ein neues, leeres Dokument an, das dann automatisch "ActiveDocument" ist.

 Newsletter-Tipp

Excel-Tipps kostenlos per E-Mail

SmartTools Excel Weekly ist ein kostenloser E-Mail-Newsletter, der Ihnen jede Woche interessante Tipps rund um Excel 2003, 2002/XP, 2000 und 97 liefert:

  • Neue Rechenfunktionen für Ihre Tabellen
  • Nützliche VBA-Prozeduren
  • Undokumentierte Parameter und Funktionen
  • Infos zu Bugs und Patches
  • Wichtige Download-Links
  • Helpline für Ihre Fragen zu Excel
Klicken Sie hier für Ihr kostenloses Abo!

 Abonnementverwaltung

Um SmartTools Access Weekly abzubestellen, senden Sie einfach das Kommando "unsubscribe" an die Adresse

access-weekly-html-request@smarttools.de

Bitte beachten Sie, daß das Kommando im Nachrichtentext stehen muß (nicht im Betreff) und Sie keine Mail im HTML-Format senden dürfen. Weitere Informationen zur Verwaltung der Liste erhalten Sie mit dem Kommando "help" an dieselbe Adresse.

Copyright © 2005 SmartTools Publishing Thomas Tai
Luisenstrasse 52, 49565 Bramsche
Telefon: 05461/91052, Fax: 05461/2609
E-Mail: access-weekly@smarttools.de
Internet: http://www.smarttools.de/