Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: crystal am Oktober 10, 2016, 20:33:30

Titel: Shell funktioniert nicht mehr
Beitrag von: crystal am Oktober 10, 2016, 20:33:30
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.

Titel: Re: Shell funktioniert nicht mehr
Beitrag von: Hondo am Oktober 11, 2016, 09:37:45
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
Titel: Re: Shell funktioniert nicht mehr
Beitrag von: DF6GL am Oktober 11, 2016, 09:53:26
Hallo,

Set objFolder = objShell.NameSpace(sfolder)

mag als Parameter keine Variable  vom Datentyp String (sfolder).  Diese sollte als Variant deklariert sein.
Titel: Re: Shell funktioniert nicht mehr
Beitrag von: Josef P. am Oktober 11, 2016, 10:04:36
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
Titel: Re: Shell funktioniert nicht mehr
Beitrag von: crystal am Oktober 11, 2016, 14:22:14
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.