Hallo,
aus access2003/2007 will ich zu einem Programm wechseln, das bereits geöffnet ist. Mit AppActivate "MeinProgramm" funktioniert dieser Wechsel.
Wie kann ich beim Wechsel zu "MeinProgramm" diesem Programm einen Parameter übergeben?
Ziel ist, aus Outlook zu einer bereits geöffneten access-Anwendung zu wechseln, dabei eine ID zu übergeben und mit dieser den dazu passenden Datensatz anzuzeigen.
Harald
Hallo,
"Wechsel" heißt ja nur , den Fokus auf die Applikation zu setzen. Was die Applikation gerade macht und tut und ob zu diesem Zeitpunkt auch gerade eine Eingabe wo auch immer möglich ist, ist so nicht herauszufinden.
Ich befürchte, dass ein Vorgang genau entspr. Deines Zieles gar nicht (stabil) möglich ist.
Eine mögliche Alternative wäre evtl. die Fernsteuerung von Access aus Outlook heraus.
Hallo Franz,
danke für Deinen Kommentar.
Zitat von: DF6GL am Juli 11, 2012, 09:19:24
"Wechsel" heißt ja nur , den Fokus auf die Applikation zu setzen. Was die Applikation gerade macht und tut und ob zu diesem Zeitpunkt auch gerade eine Eingabe wo auch immer möglich ist, ist so nicht herauszufinden.
Ich befürchte, dass ein Vorgang genau entspr. Deines Zieles gar nicht (stabil) möglich ist.
Ja, dieses "Sicherstellen" ist noch zu klären.
Zitat von: DF6GL am Juli 11, 2012, 09:19:24
Eine mögliche Alternative wäre evtl. die Fernsteuerung von Access aus Outlook heraus.
Das werde ich nicht machen können, da ich aufgrund der Berechtigungssituation keinen Zugriff auf Outlook-VBA habe. Meine Idee war, dass ich aus Outlook eine Datei (.bat oder .exe oder .mdb) aufrufe, in der dann die weiteren Schritte definiert sind.
Daher wandle ich die Frage ab:
Wie kann ich aus access ein Formular einer
bereits geöffneten anderen access-Datenbank aufrufen?
Harald
Hallo,
M. E. geht das nur über API-Geschichten (Findwindow, Sendmessage, etc....) und dürfte leicht in Konflikt mit der akt. Bedienung der "anderen DB" führen.
Wenn Du den eigentlichen Hintergrund erläutern würdest, könnte sich vielleicht eine gangbarer Lösungsweg auftun...
Hallo
mein erster gedanke war das du dein offenes outlook aus Access herraus fernsteuern tust. Aber wenns nicht gestattet ist die Outlook-objekte zu verwenden ist diese idee hinfällig
Laufende Objekte(access, excel outlook) holst du dir mit Getobject herran
Hallo,
und wie "erwischt" er damit die bestimmte laufende Instanz der anderen DB?
Hallo Franz
das geht dur die Angabe des Pfades und Dateinamen.
in die erste Db schreibst du irgendwos sowas wie
dim a as Access.application
set a = GetObject("LW:\Path\DieAndere.MDB")
Hierbei ist aber zu erwähnen das DieAndere.MDB laufen muss, sonst gibt es einen Fehler.
Hallo,
damit wird aber eine weitere Instanz der DB erzeugt....Eine vorhandene Instanz muss dafür nicht existieren...d. h. es wird immer eine eigene Instanz durch diesen Code erzeugt.
Test-Code:
Private Sub Befehl6_Click()
Dim db2 As Object
Set db2 = GetObject("c:\db111.mdb")
If db2.CurrentDb.Name = "c:\db111.mdb" Then
db2.Visible = True
db2.DoCmd.OpenForm ("frmTabelle1")
db2.Forms!frmTabelle1!Feld1 = 1111
End If
'Set db2 = Nothing
End Sub
Mit
Set db2 = GetObject(,"Access.Application")
Msgbox db2.Currentdb.Name
wird db2 nur auf die DB referenziert , in der der Code abläuft.
Hallo Franz,
Mein letzter Satz ist blödsinn.
Einen Fehler gibt es wenn auf eine nicht laufende Class verwiesen wird.
Wenn die Andere.MDB nicht läuft wird sie mit GetObject gestartet(eine neue Instanz von MSAccess wird gestartet), wenn die Andere.MDB aber läuft wird diese Instanz herangegeholt.
Hallo,
habe nochmal getestet...
Bei den ersten Tests wurde nicht die geöffnete DB referenziert und jeweils eine neue weitere Instanz erzeugt...
Beim letzten erneuten Test wird die geöffnete DB referenziert und keine neue Instanz erzeugt... Dafür geht
db2.Visible=true
auf Fehler (unzulässiger Verweis auf Eigenschaft Visible)
Finde keinen Unterschied in der Testsituation (auch nicht bei der Überprüfung der laufenden Instanzen im Taskmanger).
Wie auch immer, wenn der Zugriff auf eine laufende Instanz so reibungslos und stabil funktioniert, dann kann Harald dieses Prinzip ja verwenden.
Zitat von: DF6GL am Juli 11, 2012, 16:13:58
Hallo,
"wenn die Andere.MDB aber läuft wird diese Instanz herangegeholt."
das kann ich nicht bestätigen....
Was heist das jetzt? bei dir wird trotz laufender c:\db111.mdb immer wieder eine neue instanz gestartet?
[edit]
So jetz verstehe ich es, oder auch nicht. Ich hab wohl anders referenziert.
as Object oder as Access.Aplication führt zu unterscheidlichen Ergebnissen.
[/edit]
Herrjeh, die Beiträge waren wohl jetzt etwas unsynchronisiert. :D
PS: noch mal getestet:
Dim db2 As Object
Set db2 = GetObject("c:\db111.mdb") ' referenziert auf die geöffnete Instanz
Set db2 = GetObject("c:\db111.mdb","Access.Application") 'erzeugt erneute Instanz und referenziert darauf.
Hallo Franz
ZitatHerrjeh, die Beiträge waren wohl jetzt etwas unsynchronisiert. Lächelnd
lol das stimmt
Zitat
Beim letzten erneuten Test wird die geöffnete DB referenziert und keine neue Instanz erzeugt... Dafür geht
db2.Visible=true
auf Fehler (unzulässiger Verweis auf Eigenschaft Visible)
Das konnte ich replizieren.
ZitatFinde keinen Unterschied in der Testsituation (auch nicht bei der Überprüfung der laufenden Instanzen im Taskmanger).
Doch es gibt einen wie ich gerade sehe
Wenn eine nicht vorhandene Instanz mit Getobject aufgerufen wird, wird die neuentstehende AccessInstanz (MsAccess.exe) mit dem Commandlineparameter "-Embeding" aufgerufen.
ist lt dbwiki (http://dbwiki.net/wiki/Access_Bedienungsanleitung:_Startparameter_f%C3%BCr_Access) ein undokumentierter Parameter.
Zitat
PS: noch mal getestet:
Dim db2 As Object
Set db2 = GetObject("c:\db111.mdb") ' referenziert auf die geöffnete Instanz
Set db2 = GetObject("c:\db111.mdb","Access.Application") 'erzeugt erneute Instanz und referenziert darauf.
Jup so läuft das bei mir auch.
Gruss Daniel
Dank an Euch beide,
werde Eure Hinweise gerne anwenden.
Harald