Discussion:
bekomme das FileDialog-Object nicht zum laufen
(zu alt für eine Antwort)
Frank Strohmeyer
2007-09-05 17:42:30 UTC
Permalink
Hallo Ihr,

leider muss ich mich hilfesuchend an Euch wenden ^^

Ich möchte ein "Datei öffnen"-Fenster in Access 2003 verwenden um eine
Datei auszuwählen. Laut Hilfe sollte mir das "FileDialog"-Object weiter
helfen können. Wenn ich nun das in der Hilfe angeführte Beispiel eins zu
eins in meinen VisualBasic-Editor kopiere und laufen lasse, erhalte ich
diese Fehlermeldung (bei der Zeile "Dim fd As FileDialog"):
Fehler beim Kompilieren: Benutzerdefinierter Typ nicht definiert

Warum? Ich versteh es nicht... "FileDialog" ist doch von Access und warum
sollte in der Hilfe ein Beispiel stehen, was gar nicht funktioniert? (das
gleiche Beispiel steht auch in Access 2007-Hilfe und funktioniert dort
genauso wenig)

Beispiel aus der Hilfe (etwas zusammengeschrumpft):
Sub Main()
Dim fd As FileDialog
Set fd = Application.FileDialog(msoFileDialogFilePicker)
Dim vrtSelectedItem As Variant
With fd
If .Show = -1 Then
For Each vrtSelectedItem In .SelectedItems
MsgBox "The path is: " & vrtSelectedItem
Next vrtSelectedItem
Else
End If
End With
Set fd = Nothing
End Sub

Vielen Dank im Vorraus & Grüße
Frank :-)
Thomas Möller
2007-09-05 17:50:19 UTC
Permalink
Hallo Frank,
Post by Frank Strohmeyer
Ich möchte ein "Datei öffnen"-Fenster in Access 2003 verwenden um eine
Datei auszuwählen.
dann verwendest Du am besten das Klassen-Modul "FileDialog" von Karsten
Pries. Den Download findest Du hier:

http://www.dbdev.org/down15.htm

Da ist auch eine Beispiel dabei. Damit kommt man gut klar.

HTH
--
Thomas

Homepage: www.Team-Moeller.de
Frank Strohmeyer
2007-09-05 18:29:14 UTC
Permalink
Am Wed, 5 Sep 2007 19:50:19 +0200 schrieb Thomas Möller:

Hallo HTH,

vielen Dank für Deine superschnelle Antwort. Über diese Möglichkeit von
Terry Kreft bin ich bei meiner Lösungssuche auch schon gestolpert. Fand sie
nur etwas kompliziert mit dem Import des KlassenModuls.
Habs jetzt mal ausprobiert und es hat funktioniert. Danke :-) Ich werde es
der Einfachheithalber jetzt auch verwenden.

Trotzdem verstehe ich nicht, warum das "FileDialog"-Objekt aus Access
keiner verwendet??? Für das was ich machen wollte, wäre es völlig
ausreichend gewesen.

In den englischen Threads wird immer diese Lösung vorgeschlagen:
http://www.mvps.org/access/api/api0001.htm
Die habe ich aber nicht zum laufen bekommen.

Grüße
Frank :-)
Post by Thomas Möller
Hallo Frank,
Post by Frank Strohmeyer
Ich möchte ein "Datei öffnen"-Fenster in Access 2003 verwenden um eine
Datei auszuwählen.
dann verwendest Du am besten das Klassen-Modul "FileDialog" von Karsten
http://www.dbdev.org/down15.htm
Da ist auch eine Beispiel dabei. Damit kommt man gut klar.
HTH
Thomas Möller
2007-09-05 18:40:59 UTC
Permalink
Hallo Frank,
Post by Frank Strohmeyer
Hallo HTH,
HTH ist ein Akronym, sozusagen Internet-Slang. Ausgeschrieben bedeutet
es "Hope That Helps". ;-)
Post by Frank Strohmeyer
vielen Dank für Deine superschnelle Antwort. Über diese Möglichkeit
von Terry Kreft bin ich bei meiner Lösungssuche auch schon
gestolpert. Fand sie nur etwas kompliziert mit dem Import des
KlassenModuls.
Habs jetzt mal ausprobiert und es hat funktioniert. Danke :-) Ich
werde es der Einfachheithalber jetzt auch verwenden.
Schön, dass Dir das Modul von Karsten Pries weitergeholfen hat. ;-)
Post by Frank Strohmeyer
Trotzdem verstehe ich nicht, warum das "FileDialog"-Objekt aus Access
keiner verwendet??? Für das was ich machen wollte, wäre es völlig
ausreichend gewesen.
Bis Access 2000 gab es das nicht direkt unter Access. Ab Access 2002 war
es dann vorhanden. Der Speicherndialog tat erst ab Access 2003. Und
jetzt kommt der Knaller: In Access 2007 ist es nicht mehr drin.
Das Klassenmodul von Karsten funktioniert die ganze Zeit.

Außerdem wird ein Verweis benötigt. Jeder Verweis stellt IMHO eine
potentielle Gefahr für Deine Anwendung dar. Jeder Verweis, den Du nicht
benötigst, ist ein guter Verweis.


Einen schönen Abend wünscht...
--
Thomas

Homepage: www.Team-Moeller.de
André Minhorst
2007-09-05 19:12:04 UTC
Permalink
Hi Thomas,
[...]
Post by Thomas Möller
Post by Frank Strohmeyer
Trotzdem verstehe ich nicht, warum das "FileDialog"-Objekt aus Access
keiner verwendet??? Für das was ich machen wollte, wäre es völlig
ausreichend gewesen.
Bis Access 2000 gab es das nicht direkt unter Access. Ab Access 2002 war
es dann vorhanden. Der Speicherndialog tat erst ab Access 2003. Und
jetzt kommt der Knaller: In Access 2007 ist es nicht mehr drin.
es ist in der Office-Bibliothek. Die sollte überall dort sein, wo auch
Access 2007 ist. Sonst wäre es wohl auch mit IRibbonUI & Co. Essig. ;-)

Nicht, dass ich das benutze ...

Ciao
André
--
http://www.access-entwicklerbuch.de
http://www.access-im-unternehmen.de
Thomas Möller
2007-09-05 19:23:31 UTC
Permalink
Hallo André,
Post by André Minhorst
Post by Thomas Möller
Post by Frank Strohmeyer
Trotzdem verstehe ich nicht, warum das "FileDialog"-Objekt aus
Access keiner verwendet??? Für das was ich machen wollte, wäre es
völlig ausreichend gewesen.
Bis Access 2000 gab es das nicht direkt unter Access. Ab Access 2002
war es dann vorhanden. Der Speicherndialog tat erst ab Access 2003.
Und jetzt kommt der Knaller: In Access 2007 ist es nicht mehr drin.
es ist in der Office-Bibliothek. Die sollte überall dort sein, wo auch
Access 2007 ist. Sonst wäre es wohl auch mit IRibbonUI & Co. Essig. ;-)
Danke für die Klarstellung.

Ich frage mich die ganze Zeit, wie ich darauf komme/ wo ich das gelesen
habe.
Wahrscheinlich habe ich da was verwechselt. :-(

Nur: Welche Funktion gibt es dann in 2003, die es in 2007 nicht mehr
gibt?
Die hier mal ausgenommen: http://allenbrowne.com/Access2007.html#Gone

CU
--
Thomas

Homepage: www.Team-Moeller.de
Mark Doerbandt
2007-09-05 19:27:15 UTC
Permalink
Hallo, Thomas,
Post by Thomas Möller
Ich frage mich die ganze Zeit, wie ich darauf komme/ wo ich das gelesen
habe.
ich hatte das vorhin auch auf der Tastatur. Ein Regular hier hat das
des Oefteren geposted.

Gruss - Mark
Mark Doerbandt
2007-09-05 19:28:36 UTC
Permalink
Hallo, André,
Post by André Minhorst
es ist in der Office-Bibliothek. Die sollte überall dort sein, wo auch
Access 2007 ist. Sonst wäre es wohl auch mit IRibbonUI & Co. Essig. ;-)
Nicht, dass ich das benutze ...
was spricht dagegen? Ich finde es erstaunlich, dass man fuer eine
solche Basisfunktionalitaet irgendeinen Verweis oder auch eine Klasse
braucht. Das sollte doch so gehen. Ich benutze das.

Gruss - Mark
André Minhorst
2007-09-05 19:46:36 UTC
Permalink
Hi Mark,
Post by Mark Doerbandt
Post by André Minhorst
es ist in der Office-Bibliothek. Die sollte überall dort sein, wo auch
Access 2007 ist. Sonst wäre es wohl auch mit IRibbonUI & Co. Essig. ;-)
Nicht, dass ich das benutze ...
was spricht dagegen? Ich finde es erstaunlich, dass man fuer eine
solche Basisfunktionalitaet irgendeinen Verweis oder auch eine Klasse
braucht. Das sollte doch so gehen. Ich benutze das.
Ich konnte mich nie richtig daran gewöhnen. Außerdem brauche ich
gelegentlich auch mal eine der Varianten, die für Access-Entwickler wohl
nicht vorgesehen sind (oder waren).

Die Wizhook-Variante finde ich am einfachsten - zum Beispiel zum
Ermitteln einer einzelnen Datei. Braucht keinen Verweis, keine
Api-Klasse - einfach schön (hat Thomas glaube ich auch irgendwo auf
seiner Seite):

Function OpenFileName(Optional StartDir As String, _
Optional sTitle As String = "Datei auswählen:", _
Optional sFilter As String = "Access-DB (*.mdb)|Alle Dateien
(*.*)") As String
Static sDir As String
WizHook.Key = 51488399
If Len(StartDir) = 0 Then
If Len(sDir) = 0 Then
StartDir = CurrentProject.Path
Else
StartDir = sDir
End If
End If
Call WizHook.GetFileName(Application.hWndAccessApp, _
"Microsoft Access", sTitle, _
"Öffnen", OpenFileName, _
StartDir, sFilter, _
0&, 0&, &H40, False)
If Len(OpenFileName) > 0 Then
sDir = Left(OpenFileName, InStrRev(OpenFileName, "\", ,
vbTextCompare))
End If
End Function

Ist zwar nicht dokumentiert, aber funktioniert schon ziemlich lange.

Ciao
André
--
http://www.access-entwicklerbuch.de
http://www.access-im-unternehmen.de
Mark Doerbandt
2007-09-05 19:55:05 UTC
Permalink
Hallo, André,
Post by André Minhorst
Ich konnte mich nie richtig daran gewöhnen.
ok, ist ein Argument. Geschmaecker sind wichtig, insbesondere
Entwicklergeschmaecker. (Kein Smiley, Ernst!)
Post by André Minhorst
Die Wizhook-Variante ...
Ist zwar nicht dokumentiert,
aber funktioniert schon ziemlich lange.
;-) ja, schoen. Aber wie Du schon schreibst: nicht dokumentiert. Ich
versuche so etwas zu vermeiden. Allerdings sieht man ja von Version zu
Version, dass auch dokumentierte Sachen sich mal aendern koennen.
Naja!

Gruss - Mark
unknown
2007-09-05 19:57:25 UTC
Permalink
Hallo Mark,
Post by Mark Doerbandt
Post by André Minhorst
es ist in der Office-Bibliothek. Die sollte überall dort sein, wo auch
Access 2007 ist. Sonst wäre es wohl auch mit IRibbonUI & Co. Essig. ;-)
Nicht, dass ich das benutze ...
was spricht dagegen? Ich finde es erstaunlich, dass man fuer eine
solche Basisfunktionalitaet irgendeinen Verweis oder auch eine Klasse
braucht. Das sollte doch so gehen. Ich benutze das.
Sprichst Du jetzt vom FileDialog? Braucht man ja nicht, kann man aber.
Die Access/office-Variant kapselt mit Sicherheit auch nicht mehr
Funktionalitäten als die Klasse, geschweige denn besser. Warum sollte man
sich also der zusätzlichen Einsatz- und Kontroll-Möglichkeiten berauben,
die die Arbeit mit dem Quellcode dieser Klassen-Kapselung bietet? Doch wohl
nicht, weil ein Copy and Paste zwei bis drei Mausklicks mehr Arbeit macht?
--
Grüßle vom Bodensee
Jörg Ostendorp

Access-FAQ: www.donkarl.com
Mark Doerbandt
2007-09-05 20:07:30 UTC
Permalink
Hallo, Jörg,
Post by unknown
Sprichst Du jetzt vom FileDialog?
ja.
Post by unknown
Braucht man ja nicht, kann man aber.
Danke! ;-)
Post by unknown
Die Access/office-Variant kapselt mit Sicherheit auch nicht mehr
Funktionalitäten als die Klasse, geschweige denn besser.
Sicher.
Post by unknown
Warum sollte man sich also der zusätzlichen Einsatz- und
Kontroll-Möglichkeiten berauben, die die Arbeit mit
dem Quellcode dieser Klassen-Kapselung bietet? Doch wohl
nicht, weil ein Copy and Paste zwei bis drei Mausklicks
mehr Arbeit macht?
Weil ich einfachen, wartbaren Code moechte. Das ist dann eher eine
Philosophiefrage. Wenn es eine eingebaute, vom System gekapselte
Funktionalitaet gibt (und diese meinen Anforderungen genuegt), dann
sollte man sie gurndsaetzlich nutzen. Wenn Du natuerlich - wie ich es
jetzt nicht anders von Dir ;-) erwarte - Win32 als "System"
betrachtest, hast Du natuerlich Recht. Mein Systembegriff bezieht sich
hier auf Access.

Gruss - Mark
unknown
2007-09-05 20:41:41 UTC
Permalink
Hallo Mark,
Post by Mark Doerbandt
Weil ich einfachen, wartbaren Code moechte.
Naja, der Code ist in Deinem Fall ja in (für VBler) sogar noch
komplizierterem C++-Code geschrieben. Du siehst ihn halt nur nicht,
und warten kannst Du ihn erst recht nicht ;-)
--
Grüßle vom Bodensee
Jörg Ostendorp

Access-FAQ: www.donkarl.com
Mark Doerbandt
2007-09-05 20:47:41 UTC
Permalink
Hallo, Jörg,
Post by unknown
Naja, der Code ist in Deinem Fall ja in (für VBler) sogar noch
komplizierterem C++-Code geschrieben. Du siehst ihn halt nur nicht,
und warten kannst Du ihn erst recht nicht ;-)
;-) die Sicht auf die gleichen Dinge kann ganz unterschiedlich sein!

Gruss - Mark

Gunter Avenius
2007-09-05 17:54:17 UTC
Permalink
Hallo Frank,
Post by Frank Strohmeyer
Ich möchte ein "Datei öffnen"-Fenster in Access 2003 verwenden um
eine Datei auszuwählen. Laut Hilfe sollte mir das
"FileDialog"-Object weiter helfen können. Wenn ich nun das in der
Hilfe angeführte Beispiel eins zu eins in meinen VisualBasic-Editor
kopiere und laufen lasse, erhalte ich diese Fehlermeldung (bei der
Benutzerdefinierter Typ nicht definiert
Du brauchst einen Verweis auf die Office Object Library.

Lese auch mal : www.donkarl.com?FAQ8.1

Gruß
Gunter
--
__________________________________________________________
Access FAQ: http://www.donkarl.com
home: http://www.avenius.com - http://www.AccessRibbon.de

10. Access-Entwickler-Konferenz (AEK)
Nürnberg 6./7.10.2007 und 20./21.10.2007
http://www.donkarl.com/?AEK
Frank Strohmeyer
2007-09-05 18:40:39 UTC
Permalink
Post by Thomas Möller
Hallo Frank,
Post by Frank Strohmeyer
Ich möchte ein "Datei öffnen"-Fenster in Access 2003 verwenden um
eine Datei auszuwählen. Laut Hilfe sollte mir das
"FileDialog"-Object weiter helfen können. Wenn ich nun das in der
Hilfe angeführte Beispiel eins zu eins in meinen VisualBasic-Editor
kopiere und laufen lasse, erhalte ich diese Fehlermeldung (bei der
Benutzerdefinierter Typ nicht definiert
Du brauchst einen Verweis auf die Office Object Library.
Lese auch mal : www.donkarl.com?FAQ8.1
Gruß
Gunter
Hallo Gunter,

das ist die Information, die mir gefehlt hat, bzw. bin ich auch schon mal
über die Seite in diesem Zusammenhang gestolpert, aber ich hatte den
Microsoft-Artikel nicht genau genug gelesen^^

jetzt funktioniert es

Danke & Grüße
Frank :-)
Peter Doering
2007-09-05 18:05:18 UTC
Permalink
Hallo,
Post by Frank Strohmeyer
Ich möchte ein "Datei öffnen"-Fenster in Access 2003 verwenden um eine
Datei auszuwählen. Laut Hilfe sollte mir das "FileDialog"-Object weiter
helfen können.
www.donkarl.com?FAQ8.1 kennst du? Ich benutze den von Karsten. Laeuft immer
und bei Weitergabe muss man sich keine Sorgen machen.

Gruss - Peter
--
Ich beantworte keine Fragen per Email.
Mitglied im http://www.dbdev.org
FAQ: http://www.donkarl.com
Mark Doerbandt
2007-09-05 18:42:33 UTC
Permalink
Hallo, Frank,
Post by Frank Strohmeyer
Dim fd As FileDialog
Set fd = Application.FileDialog(msoFileDialogFilePicker)
Dim vrtSelectedItem As Variant
With fd
If .Show = -1 Then
For Each vrtSelectedItem In .SelectedItems
MsgBox "The path is: " & vrtSelectedItem
Next vrtSelectedItem
Else
End If
End With
Set fd = Nothing
unter Access 2003 verwende ich

Dim fd As Object
Set fd = Application.FileDialog(3)

ohne Verweis.

Gruss - Mark
--
Informationen fuer Neulinge in den Access-Newsgroups unter
http://www.doerbandt.de/Access/Newbie.htm

Bitte keine eMails auf Newsgroup-Beiträge senden.
Frank Strohmeyer
2007-09-05 18:58:09 UTC
Permalink
Hallo Mark,

ja das funktioniert.. und so einfach ^^

wieso brauchst Du keinen Verweis? (und würde das auch unter Access 2007
laufen?)

Grüße
Frank :-)
Post by Mark Doerbandt
unter Access 2003 verwende ich
Dim fd As Object
Set fd = Application.FileDialog(3)
ohne Verweis.
Gruss - Mark
Mark Doerbandt
2007-09-05 19:03:39 UTC
Permalink
Hallo, Frank,
Post by Frank Strohmeyer
wieso brauchst Du keinen Verweis?
weil ich die Variable als Object deklariere. Das macht man
normalerweise so beim Late Binding. Hier liefert Dir die Application
das Object zurueck.

Bei der Entwicklung ist es uebrigens praktisch, den Verweis zu setzen
und ihn vor der Auslieferung zu entfernen, weil man dann Intellisense
nutzen kann. Man muss dann nur eben auch die verwendeten Konstanten
ersetzen. Dafuer nutze ich im konkreten Fall aber eine kleine Enum

Public Enum GetFileNameMode
OpenFile = 1
SaveFile = 2
PickFile = 3
PickFolder = 4
End Enum
Post by Frank Strohmeyer
(und würde das auch unter Access 2007 laufen?)
http://office.microsoft.com/en-us/access/HA012327351033.aspx

Gruss - Mark
--
Informationen fuer Neulinge in den Access-Newsgroups unter
http://www.doerbandt.de/Access/Newbie.htm

Bitte keine eMails auf Newsgroup-Beiträge senden.
Loading...