PDA

Vollständige Version anzeigen : markiertes Objekt im Navigationsbereich ermitteln


kuechenberg
04.06.2012, 14:28
Hallo Zusammen,

ich habe eine Prozedur geschrieben, die mir ein leeres Abfragefenster öffnet:


Function NewQueryObject()
On Error GoTo AutoKeys___F5_1_Err

Dim WSHShell As Object

Set WSHShell = CreateObject("WScript.Shell")



' New Object Query
WSHShell.Run """P:\SendESC_ForAcc.vbs"""
Set WSHShell = Nothing

DoCmd.RunCommand acCmdNewObjectDesignQuery


AutoKeys___F5_1_Exit:
Exit Function

AutoKeys___F5_1_Err:
If Err = 2046 Or Err = 2501 Then
Resume Next
Else

MsgBox Error$
Resume AutoKeys___F5_1_Exit
End If


End Function

Das vb-script dient dazu die ESC-Taste zu simulieren, obwohl Access die Ausführung des Codes wegen eines offenen Dialogs blockiert:

set WshShell = CreateObject("WScript.Shell")

WScript.sleep 500
WshShell.SendKeys ("{ESC}")

Das Ganze wird dann über Strg+F5 gestartet und erleichtert mir die Arbeit enorm!

Das Funktioniert so weit schon gut.

Als nächstes soll die vorher markierte Tabelle bereits im Abfragefenster erscheinen.
Dafür muss ich das Objekt auslesen, welches im Navigationsbereich markiert ist.

Da bin ich leider am Ende mit meinem Latein

Weiß hier jemand bescheid?

JPA
04.06.2012, 14:40
application.CurrentObjectName

kuechenberg
04.06.2012, 15:20
Danke für die Antwort, JPA

Jedoch gibt mir application.CurrentObjectName lediglich das gerade geöffnete Objekt zurück, auch wenn ich zuvor auf der Navigationsleiste ein Objekt markiere.

Es funzt nur wenn kein Objekt geöffnet ist...

Vielleicht gibt es hier noch eine bessere Lösung

EU-Parts.com
04.06.2012, 15:23
Als nächstes soll die vorher markierte Tabelle...
<strike>Im Datenbankfenster ("Navigationsbereich") ?</strike>
(Hab gerade gesehen Acc2010)
Ich befürchte "application.CurrentObjectName" liefert zur Laufzeit die Prozedur oder das gerade aktive Formular.

Soll das ein Entwicklungstool (Abfrageditor) werden?
(Da würde es imo schon was "fertiges" geben ;-))
Wenn ja, warum wählst Du die Tabelle nicht zur Laufzeit aus der "MSysObjects"?
Wieso diese "Verrenkungen" per WScript?
Erklär doch mal Dein Ziel ein wenig, vielleicht findet sich ein "besserer" Weg

JPA
04.06.2012, 15:37
ok, sorry habe nicht gesehen, du fragst unter acc2010.

Probiere es mal mit
docmd.SelectObject acTable,,true 'Vorher das DB-Fenster als aktives Fenster deklarieren
application.CurrentObjectName

Unter acc2003 geht es so :-)

kuechenberg
04.06.2012, 15:38
Es soll ein Abfrageeditor werden.
(Wobei ich hier das Abfragefenster von Access nutze und es lediglich vorbelege)

Durch den in Access eingebauten Dialog werden mir ja schon alle Objekte angezeigt;

jedoch hat sich in der täglichen arbeit gezeigt das man sowieso schon genau dieses Objekt bereits entweder makiert hat , oder es geöffnet ist (hier wäre dann ""application.CurrentObjectName" doch nicht so schlecht)

Idealerweise sollte das Objekt, dass ich gerade im Navigationsbereich markiert habe, ODER momentan den Fenster-Focus hat, im Abfragefenster erscheinen.
(das ich dann noch prüfen muss, ob es sich dabei um eine Tabelle/Abfrage handelt ist dann ein leichtes)

kuechenberg
04.06.2012, 15:41
Hallo JPA,

das funzt leider nicht...

JPA
04.06.2012, 21:32
ich check das morgen mit meinem acc2010...

BTW: es würde sich anbieten dein vorhaben mit der rechten maustaste zu starten.
Den shortcutmenu kannst du mit meinem Shortcutmenucreator erstellen :-)
http://abiss.de/content/produkte/ms-access/access-shortcut-menu-creator/access-shortcut-menu-creator_100144_0.html

Gruß
JPA

JPA
05.06.2012, 10:35
Funz unter acc2010 einwandfrei.
Natürlich musste du mit mit 'application.CurrentObjectName' irgendwas machen.
Also dies müsste sauber laufen:
docmd.SelectObject acTable,,true 'Vorher das DB-Fenster als aktives Fenster deklarieren
MsgBox application.CurrentObjectName

Gruß
JPA