Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Shell funktioniert nicht mehr

Begonnen von crystal, Oktober 10, 2016, 20:33:30

⏪ vorheriges - nächstes ⏩

crystal

Hallo,

vielleicht liegt es am W10-Update...
In meinem VBA-Code kann ich nicht mehr aus das Shell-Object zugreifen.

Dim objShell  As Object
Dim objFolder As Object
    sfolder = TopDir & "\" & SDir & "\" & FDir
   
    Set objShell = CreateObject("Shell.Application")
    Set objFolder = objShell.NameSpace(sfolder)
    For Each objFolderItem In objFolder.Items

wird zwar ausgeführt, aber danach ist objShell = gar nichts, objShell  = nothing und es knallt bei for each...

sfolder ist zu diesem Zeitpunkt z.B.

X:\va1\0\blabla

und dieses Verzeichnis existiert auch.

Haben die Redmonder etwas geändert oder wo liegt der Fehler?
Vor dem W10-Update hat's noch problemlos geklappt.

Wer Fehler in meinen Antworten findet, darf sie behalten, muss sie aber kommentieren. ;-)
Dies ist keineswegs arrogant gemeint, sondern soll nur unterstreichen, dass meine Antworten - natürlich - nicht immer fehlerfrei sind und sein können.
Devise: bitte immer erst selbst probieren!

Aus gesundheitlichen Gründen nur noch selten dabei...

Hondo

Hallo,
ich denke mal dass die Deklaration von objFolderItem falsch ist, das dürfte imo kein Objekt sein sondern ein Variant (Array)

So funktionierts bei mir:
Sub test()
    Dim objShell As Object
    Dim objFolder As Object
    Dim FolderItem As Variant

    Set objShell = CreateObject("Shell.Application")
    Set objFolder = objShell.NameSpace("C:\")
   
    For Each FolderItem In objFolder.Items
        Debug.Print objFolder.getDetailsOf(FolderItem, 0)
    Next FolderItem
   
    Set objFolder = Nothing
    Set objShell = Nothing
End Sub


Gruß Andreas

DF6GL

Hallo,

Set objFolder = objShell.NameSpace(sfolder)

mag als Parameter keine Variable  vom Datentyp String (sfolder).  Diese sollte als Variant deklariert sein.
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

Josef P.

Hallo!

Ich tippe auf eine explizite Byval-Übergabe für den Parameter der NameSpace-Funktion.

Zum Ausprobieren:
sfolder = "C:\"
Set objFolder = objShell.NameSpace(sfolder)
debug.print "sfolder", objFolder is Nothing

Set objFolder = objShell.NameSpace("C:\")
debug.print """C:\""", objFolder is Nothing

Set objFolder = objShell.NameSpace(sfolder & "")
debug.print "sfolder & """"", objFolder is Nothing

Set objFolder = objShell.NameSpace((sfolder))
debug.print "(sfolder)", objFolder is Nothing


mfg
Josef

crystal

OK - Problem gelöst.
Ich hatte im alten Sourcecode meine Deklaration
   dim sfolder
gesehen und auf
   dim sfolder as string
geändert, weil ich glaubte, das schlicht vergessen zu haben...

Mit
   dim sfolder as variant
Klappt es jetzt.

Wer Fehler in meinen Antworten findet, darf sie behalten, muss sie aber kommentieren. ;-)
Dies ist keineswegs arrogant gemeint, sondern soll nur unterstreichen, dass meine Antworten - natürlich - nicht immer fehlerfrei sind und sein können.
Devise: bitte immer erst selbst probieren!

Aus gesundheitlichen Gründen nur noch selten dabei...