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, 9217 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 ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

(1)

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
Batch & Shell
Eventlog Druckjobs mit VBS auslesen (2)

Frage von joni2000de zum Thema Batch & Shell ...

Windows 10
Klappt es noch mit 7 Key Windows 10 zu aktivieren? (10)

Frage von zeroblue2005 zum Thema Windows 10 ...

VB for Applications
VBS Script zum versenden mehrerer Verknüpfungen zu Dateien per Lotus Notes

Frage von Sentinel87 zum Thema VB for Applications ...

LAN, WAN, Wireless
gelöst Router Switch zwei APs Verbindung klappt nicht (16)

Frage von c3t1n57 zum Thema LAN, WAN, Wireless ...

Heiß diskutierte Inhalte
Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...

Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (9)

Frage von JayyyH zum Thema Switche und Hubs ...

Backup
Clients als Server missbrauchen? (8)

Frage von 1410640014 zum Thema Backup ...