Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

VBS Dateiauswahl klappt nicht bei jeder Endung (ShellApp.BrowseForFolder)

Frage Entwicklung VB for Applications

Mitglied: djbazo

djbazo (Level 1) - Jetzt verbinden

30.05.2011, aktualisiert 18.10.2012, 9541 Aufrufe, 9 Kommentare

Hallo zusammen,

folgendes Skript soll zur Auswahl von .DOC Dateien verwendet werden.
Leider klappt dies nicht, es funktionieren aber zB DOCX, PDF Dateien...

01.
  Dim ShellApp, Ret, s, i 
02.
 Set ShellApp = CreateObject("Shell.Application") 
03.
  
04.
 On Error Resume Next 
05.
 Set Ret = ShellApp.BrowseForFolder(0, "Bitte wählen Sie die Datei aus, die Sie übertragen möchten:", 16384) 
06.
 s = Ret.title 
07.
 If Err.number <> 0 Then 
08.
 WScript.Quit 
09.
 End If 
10.
  
11.
 s = GetPath(Ret, i) 
12.
 MsgBox s 
13.
   
14.
 Function GetPath(Fil, iItem) 
15.
 Dim Pt1, fPar, sn, Obj, sType 
16.
 On Error Resume Next 
17.
 sn = Fil.title 
18.
 MsgBox "sn (File/Folder title): " &sn 
19.
 Set fPar = Fil.parentfolder 
20.
 MsgBox "fPar (File/Folder parent Folder): " &fpar 
21.
  
22.
 Set Obj = fPar.parsename(sn) '--return item selected as a Shell FolderItem. 
23.
 MsgBox "Obj (return item selected as a Shell FolderItem): " &obj 
24.
  
25.
 '--weed out namespaces and drives. If it's a namespace or drive it can't 
26.
 '--return a FolderItem so the last Call caused an error and Obj is therefore 
27.
 '--Not part of the filesystem: 
28.
  
29.
 If Obj.isfilesystem = false Then 
30.
 Pt1 = instr(sn, ":") 
31.
 If Pt1 = 0 Then 
32.
 iItem = 0  '--namespace. 
33.
 getpath = sn 
34.
 Else 
35.
 iItem = 1 '--drive. 
36.
 getpath = mid(sn, (Pt1 - 1), 2) & "\"  '--Get letter before : and add "\" If drive. 
37.
 End If 
38.
 Set Obj = nothing 
39.
 exit Function 
40.
 End If 
41.
  
42.
 '--it's a file or folder. find out which and Get path: 
43.
 sType = Obj.type  '--Get object Type as shown in folder Details view. 
44.
 MsgBox "sType (Get object Type as shown in folder Details view): " &sType '-- Should be able to use: If Obj.IsFolder = True..... but it doesn't work. 
45.
  
46.
 If instr(sType, "Bestandsmap") = 0 Then  '-TAALGEVOELIG-in detail view a folder will be type "File Folder". 
47.
 iItem = 3  '--file. 
48.
 Else 
49.
 iItem = 2  '--folder. 
50.
 End If 
51.
  
52.
 getpath = Obj.path 
53.
 Set Obj = Nothing 
54.
 End Function
Hat jemand einen Tipp woran es liegen könnte?
Danke schonmal vorab!
Mitglied: bastla
30.05.2011, aktualisiert 18.10.2012
Hallo djbazo!
Hat jemand einen Tipp woran es liegen könnte?
Hatte noch nicht wirklich Zeit, mir das anzusehen, aber vielleicht geht's ja auch mit einer der Methoden von hier ...

Grüße
bastla
Bitte warten ..
Mitglied: TsukiSan
31.05.2011 um 04:12 Uhr
hallo djbazo,

das ist schon etwas merkwürdig, warum es mit windowseigenen Dateien nicht so richtig will.
ich würde auch erst einmal mit der BrowseForFile-Methode arbeiten, da du ja Dateien auswählen
möchtest. Das ginge in VBS in etwa so:
01.
 
02.
MsgBox BrowseForFile("D:\", "All Files|*.*") 
03.
 
04.
Function BrowseForFile(pstrPath, pstrFilter) 
05.
  Set objDialog = CreateObject("UserAccounts.CommonDialog") 
06.
  objDialog.Filter = pstrFilter 
07.
  objDialog.InitialDir = pstrPath 
08.
  objDialog.Flags = &H80000 + &H4 + &H8 
09.
  intResult = objDialog.ShowOpen 
10.
  BrowseForFile = objDialog.FileName 
11.
End Function
Trotzdem, sehr interessante Frage!
Bei mir gehen keinerlei docs,xls,pps,txt,jpg, etc. -> also alles, was von den Redmondern kommt.
Und auf der MS-Seite findet man auch nichts zu diesem Problem.
Vielleicht weiß bastla , warum das so ist.

Gruss
Tsuki
Bitte warten ..
Mitglied: djbazo
31.05.2011 um 09:19 Uhr
Hallo bastla, tsuki,

vielen Dank für die Antworten. Ich hatte nun die Zeit diese zu testen.
Leider bekomme ich in meiner (Vista) Umgebung den Fehler

Active-X-Komponenten kann kein Objekt erstellen: 'UserAccounts.CommonDialog'
Code: 800A01AD

Grüße
Bitte warten ..
Mitglied: bastla
31.05.2011 um 13:16 Uhr
Hallo djbazo und Tsuki!

Warum der Code hinsichtlich "docx" etc nicht tut, was er soll, kann ich leider auch nicht sagen - als Alternative gäbe es noch den im letzten Kommentar des oben verlinkten Beitrages von Dani vorgestellten Ansatz ...

Grüße
bastla
Bitte warten ..
Mitglied: TsukiSan
31.05.2011 um 14:50 Uhr
moin zusammen,

danke erst einmal an bastla! Ich weiß, auch wenn du's nicht weißt - warum? - ist das für mich aber schon mal eine Antwort!

@djbazo.
nun wissen wir schon mal, dass du mit Vista (de Luna) kämpfst
Du könntest dir eventuell die comdlg32.ocx laden und im Systemordner ablegen.
Danach ginge es mit VBS wie folgt:
01.
Set oCD = WScript.CreateObject("MSComDlg.CommonDialog") 
02.
 
03.
oCD.DialogTitle = "Bitte wählen Sie die Datei aus, die Sie übertragen möchten:" 
04.
oCD.MaxFileSize = 260 
05.
oCD.ShowOpen 
06.
 
07.
MsgBox oCD.FileName
Eventuell hilft dir das an dieser Stelle

Gruss
Tsuki
Bitte warten ..
Mitglied: djbazo
01.06.2011 um 09:26 Uhr
Das passt für mich!
Vielen Dank für Eure schnellen Antworten!
Bitte warten ..
Mitglied: Friemler
02.06.2011 um 16:56 Uhr
Hallo bastla,

unter Windows 7 funktioniert leider weder UserAccounts.CommonDialog noch SAFRCFileDlg.FileOpen. Ich habe vor längerer Zeit in diesem Forum eine Lösung gefunden, die auf allen Windowsversionen mit mindestens IE5 (oder war es IE4?) läuft, ohne DLLs/OCXe installieren zu müssen.

Es wird eine unsichtbare Instanz vom Internet Explorer mit der Seite about:blank geöffnet. In diese Seite wird der HTML-Code für einen Datei-Upload-Dialog injiziert und dann ein Klick auf den "Durchsuchen"-Button simuliert. Daraufhin öffnet sich der bekannte Dateiauswahldialog von Windows. Im Titel des Fensters steht jedoch immer "Datei zum Hochladen auswählen" und es kann nicht der Name einer neu anzulegenden Datei angegeben werden. Außerdem gibt es ab IE8 wieder ein Problem: Man muss zuerst Internetoptionen -> Registerkarte Sicherheit -> Stufe anpassen -> Lokalen Verzeichnispfad beim Hochladen von Dateien auf einen Server einbeziehen aktivieren, sonst erhält man als Ergebnis immer C:\fakepath\NameDerDatei. Ein neues Privacy-/Sicherheitsfeature der Redmonder.

Hier aber trotzdem mal der (etwas abgespeckte) Code, vielleicht hilft es noch irgendwem weiter. Im Original wird eine Klasse deklariert, die auch noch einen Ordnerauswahldialog auf Basis von BrowseForFolder mit erweiterter Funktionalität enthält.
01.
WScript.Echo ChooseFile 
02.
 
03.
Function ChooseFile() 
04.
  Dim Q2, sRet, IE 
05.
 
06.
  Q2 = Chr(34) 
07.
 
08.
  ChooseFile = "" 
09.
 
10.
  Set IE = CreateObject("InternetExplorer.Application") 
11.
 
12.
  IE.Visible = False 
13.
  IE.Navigate("about:blank") 
14.
 
15.
  Do Until IE.ReadyState = 4 
16.
  Loop 
17.
 
18.
  IE.Document.Write "<HTML><BODY><INPUT ID=" & Q2 & "Fil" & Q2 & " Type=" & Q2 & "file" & Q2 & "></BODY></HTML>" 
19.
 
20.
  With IE.Document.All.Fil 
21.
    .Focus 
22.
    .Click 
23.
    sRet = .Value 
24.
  End With 
25.
 
26.
  IE.Quit 
27.
  Set IE = Nothing 
28.
 
29.
  ChooseFile = Replace(sRet, "%20", " ") 
30.
End Function
Gruß
Friemler
Bitte warten ..
Mitglied: TsukiSan
02.06.2011 um 17:11 Uhr
Hallo Friemler,
unter Windows 7 funktioniert leider weder UserAccounts.CommonDialog noch SAFRCFileDlg.FileOpen.
ab VISTA scheinbar nicht mehr

aber die comdlg32.ocx macht es immer noch

Gruss
Tsuki
Bitte warten ..
Mitglied: Friemler
02.06.2011 um 17:39 Uhr
Hallo Tsuki,

hatte ich schon gelesen, die Methode mit dem IE funktioniert halt eben mit Bordmitteln und ist unabhängig davon, ob eine DLL/OCX für eine bestimmte Windowsversion geeignet ist. Dumm ist natürlich das dafür nötige Umstellen der Sicherheitsoptionen ab IE8.

Gruß
Friemler
Bitte warten ..
Ähnliche Inhalte
Viren und Trojaner
gelöst Neuer Crypto? Endung "sdvztvGw" (5)

Frage von emeriks zum Thema Viren und Trojaner ...

Batch & Shell
gelöst Datei-Endungen, Listen und Sortierung (Batch) (5)

Frage von clragon zum Thema Batch & Shell ...

Viren und Trojaner
CryptoLocker und seine wechselnden Datei-Endungen (24)

Erfahrungsbericht von Tharen zum Thema Viren und Trojaner ...

Batch & Shell
gelöst VBS Script in eine Textdatei ausgeben (VBS mit Batch zusammenführen) (5)

Frage von Luuke257 zum Thema Batch & Shell ...

Neue Wissensbeiträge
Windows Tools

Zeit für Energiesparmodus, Bildschirmabschaltung etc. schnell anpassen

Anleitung von hannsgmaulwurf zum Thema Windows Tools ...

Linux Netzwerk

Ping und das einstellbare Bytepattern

(1)

Erfahrungsbericht von LordGurke zum Thema Linux Netzwerk ...

Windows Update

Microsoft Update KB4034664 verursacht Probleme mit Multimonitor-Systemen

(4)

Tipp von beidermachtvongreyscull zum Thema Windows Update ...

Heiß diskutierte Inhalte
Firewall
Richtige Grundeinstellungen der Pfsense für mein Netzwerk (14)

Frage von Spitzbube zum Thema Firewall ...

Switche und Hubs
gelöst Cisco 2960x Stacking über mehrere Etagen (12)

Frage von b3scher zum Thema Switche und Hubs ...