Wegen GetLastError: Das ist unter VB keine gute Idee:
Um dieser unter Visual Basic oft fälschlich verwendeten Vorgehensweise gleich einen Riegel vorzuschieben: GetLastError liefert Ihnen unter Visual Basic vielleicht, vielleicht aber auch nicht die korrekte Fehlernummer zurück - diese Funktion ist für Visual Basic Programmierer absolut tabu!
Stattdessen sollte LastDllError eingesetzt werden. Zu diesem Thema gibts zahlreiche Infos im Netz warum das so ist. Unter anderem auch
direkt von Microsoft. Von der Seite stammt übrigens das Zitat.
SHFileOperation
Ich habe mit dieser API noch nie gearbeitet, deswegen kann ich zumindest nicht aus dem Stand heraus beantworten warum es nicht geht. Mir fällt nur auf, Du ermittelst als ReturnCode lediglich einen booleschen Wert und damit nur ob es geklappt hat oder nicht. Stattdessen solltest mal den tatsächlichen RC als Long ausgeben lassen um herauszukriegen WARUM es nicht funktioniert.
Eventuell hilft Dir auch
dieser vb@archiv Tipp weiter, der diese API verwendet. Entweder Du leitest die dortige Funktionsweise für Deine Routine ab, oder verwendest gleich die fertigen Routinen. Funktionieren sollen diese Funktionen u.a. auch unter Vista, und damit stehen die Chancen sehr gut, dass es auch unter 7 klappt.