Access-News & Downloads
Access-Helpline
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:
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:
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
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:
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
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.
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.
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:
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.
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.
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:
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.
|