Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
876to880
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
876to880
876to880
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Makro mit Pfad auswählen Dialog

Makro mit Pfad auswählen Dialog
06.06.2007 19:05:53
Ryu_Hoshi
Hallo!
Ich möchte ein Makro ausführen (sub Test) und dabei den Speicherpfad vom User auswählen lassen. Ich habe hier was zusammengebastelt, aber es funzt nicht. Der Speicherpfad soll per Variable Wahl2 übergeben werden, aber diese hat dem Wert "Test" und nicht dem Pfad des Ordners welches zuvor bestimmt wurde. Wer kennt Rat?
Gruss+Danke
Private Declare Function GetActiveWindow Lib "user32" () As Long
Global Wahl2 As String

Public Sub OrdnerAuswaehlenAufruf()
Dim Modal As Boolean 'Die Deklaration ist hier zwingend
Hinweis = "Wählen Sie einen Ordner aus:" 'Erscheint im oberen Teil des Dialogs
Steuerung = 65 'Aussehen/Verhalten des Dialogs (1 = "Standard"; 65 = "new look")
'explizite Basisverzeichnisvorgabe...
'Basis = "C:\Dokumente und Einstellungen\eku\Eigene Dateien\WordFAQ"
'...oder alternativ implizit über so genannte *Special Folder* Konstanten
Basis = 0 'Arbeitsplatz (Siehe Liste der *Special Folders*)
Modal = True 'True oder False
Retcode = OrdnerAuswaehlen(Modal, Hinweis, Steuerung, Basis, Wahl2)
If Retcode = 0 Then MsgBox Wahl2 ', vbInformation
If Retcode = 4 Then MsgBox "Der Benutzer hat abgebrochen.", vbExclamation
If Retcode = 16 Then MsgBox "Interner Fehler!", vbExclamation
End Sub



Private Function OrdnerAuswaehlen(ByVal Modal As Boolean, _
ByVal Hinweis As String, _
ByVal Steuerung As Long, _
ByVal Basis As Variant, Wahl As String) As Long
Dim Owner As Long, oFolder As Object
If Modal Then Owner = GetActiveWindow
On Error Resume Next
Set oShell = CreateObject("Shell.Application")
rc = Err.Number: sysmsg = Err.Description: Err.Clear
If rc = 0 Then
Set oFolder = oShell.BrowseForFolder(Owner, Hinweis, Steuerung, Basis)
rc = Err.Number: sysmsg = Err.Description
End If
On Error GoTo 0
If oFolder Is Nothing Then
OrdnerAuswaehlen = 4
Else
Wahl = oFolder.Self.Path
If Right(Wahl, 1) = "\" Then Wahl = Left(Wahl, Len(Wahl) - 1) 'Normalisieren
End If
If Not rc = 0 Then
MsgBox "Laufzeitfehler: " & rc & vbLf & sysmsg, vbExclamation
OrdnerAuswaehlen = 16
End If
Set oFolder = Nothing
Set oShell = Nothing
End Function



Public Sub Test()
Dim wkb As Workbook, wkbNeu As Workbook
Dim i As Integer
Dim x1 As Integer
Set wkb = Workbooks("Delivery Performance IC.xls")
x1 = wkb.Worksheets.Count
OrdnerAuswaehlenAufruf
For i = 2 To x1
wkb.Worksheets("Important").Copy
Set wkbNeu = ActiveWorkbook
wkb.Worksheets(i).Copy After:=wkbNeu.Sheets("Important")
wkbNeu.SaveAs Filename:="" & Wahl2 & wkb.Worksheets(i).Name & ".xls"
wkbNeu.Close
Next
End Sub


4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro mit Pfad auswählen Dialog
06.06.2007 19:26:00
Hajo_Zi
Hallo RyU,
ich benutze immer folgenden Code.

Option Explicit
Option Private Module
'   von Nepumuk
Private Type InfoT
hwnd As Long
Root As Long
DisplayName As Long
Title As Long
Flags As Long
FName As Long
lParam As Long
Image As Long
End Type
Private Declare Function SHBrowseForFolder Lib "shell32" (lpbi As InfoT) As Long
Private Declare Function CoTaskMemFree Lib "ole32" (ByVal hMem As Long) As Long
Private Declare Function lstrcat Lib "kernel32" Alias "lstrcatA" (ByVal lpStr1 As String, ByVal  _
lpStr2 As String) As Long
Private Declare Function SHGetPathFromIDList Lib "shell32" (ByVal pList As Long, ByVal lpBuffer  _
As String) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassname As  _
String, ByVal lpWindowName As String) As Long
Function GetAOrdner() As String
Dim xl As InfoT, IDList As Long, RVal As Long, FolderName As String
With xl
.hwnd = FindWindow("xlmain", vbNullString)
'        .hwnd = FindWindow("", "Auswahl")  ' Userform Auswahl
.Title = lstrcat("Bitte wählen Sie ein Verzeichnis", "")
.Flags = 1
End With
IDList = SHBrowseForFolder(xl)
If IDList  0 Then
FolderName = Space(256)
RVal = SHGetPathFromIDList(IDList, FolderName)
CoTaskMemFree (IDList)
FolderName = Trim(FolderName)
FolderName = Left(FolderName, Len(FolderName) - 1)
End If
GetAOrdner = FolderName
End Function
'   nicht verwendeter Code
'   Aufruf mit
Sub Test()
StOrdner = GetAOrdner                       ' Verzeichnis auswählen
End Sub



Anzeige
AW: Makro mit Pfad auswählen Dialog
08.06.2007 10:24:00
Ryu_Hoshi
Hallo Hajo_Zi,
ich habe deinen Code in ein neues Modul kopiert, die Sub-Test mit meinem Code erweitert, habe aber noch immer das Problem, dass es nicht dort abgespeichert wird wo ich es möchte. Es wird eine Ebene außerhalb des gewünschten Pfads abgespeichert (z.B. wenn gewünscht C:\Programme ist Ergebnis C:\) und der fehlende Teil des Pfades wird in Dateinamen eingefügt. Ich musste übrigens die option private module deaktivieren da ich ansonsten nicht die sub-test ausführen konnte (war unsichtbar).
Hast du da einen Verbesserungsvorschlag?
Gruss

Sub Test()
Dim wkb As Workbook, wkbNeu As Workbook
Dim i As Integer
Dim x1 As Integer
Dim StOrdner As String
Set wkb = Workbooks("Delivery Performance IC.xls")
x1 = wkb.Worksheets.Count
StOrdner = GetAOrdner                       ' Verzeichnis auswählen
For i = 2 To x1
wkb.Worksheets("Important").Copy
Set wkbNeu = ActiveWorkbook
wkb.Worksheets(i).Copy After:=wkbNeu.Sheets("Important")
wkbNeu.SaveAs Filename:=StOrdner & wkb.Worksheets(i).Name & ".xls"
wkbNeu.Close
Next
End Sub


Anzeige
AW: Makro mit Pfad auswählen Dialog
08.06.2007 10:35:00
Hajo_Zi
Hallo RyU,
Stordner hat am Ende kein "\" das Zeichen fehlt bei Dir würde ich mal vermuten.
Gruß Hajo

AW: Makro mit Pfad auswählen Dialog
08.06.2007 11:48:40
Ryu_Hoshi
Genau das war es!
Danke!

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige