PDA

Vollständige Version anzeigen : Verbindung Access-Word


Maximilian
28.04.2001, 11:18
Hallo Leute,

seit Stunden versuche ich bereits Access97 von Word97 aus über einen Button fehlerfrei zu starten. Mit dem nachfolgenden Code gelingt zwar das Starten von Access bzw. der gewünschten Datenbank, aber ich kann Access nicht mehr schließen - es sei denn, ich schließe Word. Als VBA-Anfänger sehe ich vor lauter Bäume keinen Wald mehr. Auch in der Access-Hilfe habe ich nicht das Richtige gefunden. Hat jemand eine Idee, wie ich Access normal schließen kann?

Sub Access()
On Error GoTo ErrAccess

Dim appAcc As Access.Application
Dim strDB As String

If Not IstAccGestartet Then
DoCmd.Hourglass True
Set appAcc = CreateObject("Access.Application") ' Access starten
DoCmd.Hourglass False
Else
Set appAcc = GetObject(, "Access.Application") ' Access war schon gestartet
End If

appAcc.Visible = True

' bestehende Datenbank öffnen
appAcc.OpenCurrentDatabase ("c:\Eigene Dateien\xyz.mdb")

' Verweise auf Access-Objekt freigeben.

Set appAccess = Nothing

ExitAccess:
Exit Sub

ErrAccess:
Select Case Err.Number
Case 429
MsgBox "Das OLE-Objekt für Access konnte nicht erstellt werden.", vbCritical
Case 5137, 5151
MsgBox "Die Datenbank " & strDB & " wurde nicht gefunden.", vbCritical
Case Else
MsgBox Err.Description, vbCritical
End Select
Resume ExitAccess

End Sub

Public Function IstAccGestartet() As Boolean
' Stellt fest, ob Access gerade geladen ist

Dim obj As Object

On Error Resume Next
Set obj = GetObject(, "Access.Application") ' nach Access suchen
IstAccGestartet = (Err.Number = 0)
Set obj = Nothing

End Function

Vielen Dank
Max

Stefan Kulpa
28.04.2001, 12:26
Hallo Max,

leider geht aus Deinem Code-Ausschnitt nicht hervor, wie Du Word startest.
Aber ich nehme mal mal, ähnlich wie Access via CreateObject().
Das Problem daran ist, dass sich Word und Access als sog. OLE-Server verhalten, und das kann eben zu diesem Problem führen. Falls Du also Word und/oder Access nicht "fernsteuern" möchtest, und es "reicht" diese Programme zu starten, hilft Dir folgendes Beispiel:

Die Methode OfficeStart() erwartet lediglich den Pfad zu einer gültigen Datei, sei es ein Word-Dokument (.doc) oder eine Access-Datenbank (.mdb). Das ganze funktioniert eigentlich für jede registrierte Datei im System.

Allerdings läßt sich dann nicht mehr (oder nicht mehr so einfach) auf diese
gestarteten Programme zugreifen, um irgendwelche Aktionen durchzuführen, sprich sie fernzusteuern.

Aber vielleicht ist es ja das was Du möchtest ..

Gruß,

<FONT SIZE=1 FACE=Courier New><FONT COLOR=#000080>Option</FONT> Compare Database

<FONT COLOR=#000080>Private</FONT> <FONT COLOR=#000080>Declare</FONT> <FONT COLOR=#000080>Function</FONT> GetDesktopWindow <FONT COLOR=#000080>Lib</FONT> "user32" () <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>Long</FONT>
<FONT COLOR=#000080>Private</FONT> <FONT COLOR=#000080>Declare</FONT> <FONT COLOR=#000080>Function</FONT> ShellExecute <FONT COLOR=#000080>Lib</FONT> "shell32.dll" <FONT COLOR=#000080>Alias</FONT> _
"ShellExecuteA" (<FONT COLOR=#000080>ByVal</FONT> hwnd <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>Long</FONT>, _
<FONT COLOR=#000080>ByVal</FONT> lpOperation <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>String</FONT>, _
<FONT COLOR=#000080>ByVal</FONT> lpFile <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>String</FONT>, _
<FONT COLOR=#000080>ByVal</FONT> lpParameters <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>String</FONT>, _
<FONT COLOR=#000080>ByVal</FONT> lpDirectory <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>String</FONT>, _
<FONT COLOR=#000080>ByVal</FONT> nShowCmd <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>Long</FONT>) <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>Long</FONT>
<FONT COLOR=#808080><HR></FONT>

<FONT COLOR=#000080>Public</FONT> <FONT COLOR=#000080>Sub</FONT> OfficeStart(sFilePath <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>String</FONT>)

<FONT COLOR=#008000>' vbNormalFocus = 1</FONT>
<FONT COLOR=#000080>Call</FONT> ShellExecute(GetDesktopWindow(), "Open", sFilePath, 0&, 0&, vbNormalFocus)

<FONT COLOR=#000080>End</FONT> <FONT COLOR=#000080>Sub</FONT>
<FONT COLOR=#808080><HR></FONT></FONT>

Maximilian
28.04.2001, 16:58
Hallo Stefan,

vielen Dank für Deine Hilfe - funktioniert 1a

Max