Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1088to1092
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
Inhaltsverzeichnis

Pfad anlegen, Mkdir Prüfung ob vorhanden

Pfad anlegen, Mkdir Prüfung ob vorhanden
Kay
Hallo,
möchte gern eine Kopie einer Datei unter einem Pfad speichern - der bei den meisten Usern nicht vorhanden ist. Da unsere Firmenrechner geschützt sind - muss ich die Datei in einen Pfad ablegen - wo ihn jeder anlegen kann, also unter "User"-Rechte ?! Und wenn dann der Pfad erstmalig angelegt ist - möchte ich gern eine Fehlermeldung vermeiden - gamäß Pfad bereits vorhanden oder so...
Dachte an:
If Dir (....) = "" then Mkdir ("Pfad\Dateiname.xls") else
end if
SavePath = "PFad\Dateiname.xls"
Aber irgendwie komme ich mit meinen Kenntnissen nicht weiter und habe im Forum noch nicht den passenden Eintrag gefunden...
Wie geht das
A) Userpfad erkennen ?
B) Neuen Unterordner dort anlegen ?
C) Prüfung ob Pfad + Unterordner vorhanden und wenn nicht ggf. Neu anlegen ?
Gruß und Vielen Dank !
Kay

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

Betreff
Benutzer
Anzeige
AW: Pfad anlegen, Mkdir Prüfung ob vorhanden
19.07.2009 12:45:24
Tino
Hallo,
könnte so gehen.
Teste mal.
Option Explicit
Private Declare Function apiCreateFullPath _
Lib "imagehlp.dll" Alias "MakeSureDirectoryPathExists" (ByVal lpPath As String) As Long
Sub test()
Dim strFile As String
Dim lngPahth As Long
Dim strPfad As String
'Pfad = z.Bsp. C:\Dokumente und Einstellungen\UserName
strPfad = Environ("HOMEDRIVE") & Environ("HOMEPATH")
strPfad = IIf(Right(strPfad, 1) = "\", strPfad, strPfad & "\")
'Pfad + Neuer Ordner
strPfad = strPfad & "Neuer_Ordner\"
lngPahth = apiCreateFullPath(strPfad)
If lngPahth = 1 Then
ThisWorkbook.SaveCopyAs strPfad & "Beispiel.xls"
Else
MsgBox "Ordner konnte nicht angelegt oder gefunden werden!", vbCritical
End If
End Sub
Gruß Tino
Anzeige
hier für Eigene Dateien
19.07.2009 13:08:26
Tino
Hallo,
hier noch eine Version für den Ordner Eigene Dateien oder einen den Du dir aussuchst.
Option Explicit
Private Declare Function SHGetSpecialFolderLocation Lib "Shell32" _
       (ByVal hwndOwner As Long, ByVal nFolder As Long, _
        ByRef ppidl As ITEMIDLIST) As Long

Private Declare Function SHGetPathFromIDList Lib "Shell32" _
       (ByVal pidList As Long, ByVal lpBuffer As String) As Long

Private Declare Function apiCreateFullPath _
Lib "imagehlp.dll" Alias "MakeSureDirectoryPathExists" (ByVal lpPath As String) As Long

Private Type SHITEMID
  cb   As Long
  abID As Byte
End Type

Private Type ITEMIDLIST
  mkid As SHITEMID
End Type

Private Const S_OK = 0
Private Const MAX_PATH = 260

Public Enum ShellSpecialFolderConstants
  ssfDESKTOP = &H0                   ' <Desktop> 
  ssfPROGRAMS = &H2                  ' Startmenü\Programme 
  ssfPERSONAL = &H5                  ' Eigene Dateien 
  ssfFAVORITES = &H6                 ' <Benutzer>\Favoriten 
  ssfSTARTUP = &H7                   ' Startmenü\Programme\Autostart 
  ssfRECENT = &H8                    ' <Benutzer>\Recent 
  ssfSENDTO = &H9                    ' <Benutzer>\SendTo 
  ssfSTARTMENU = &HB                 ' <Benutzer>\Startmenü 
  ssfDESKTOPDIRECTORY = &H10         ' <Benutzer>\Desktop 
  ssfNETHOOD = &H13                  ' <Benutzer>\Netzwerkumgebung 
  ssfFONTS = &H14                    ' Windows\Fonts 
  ssfTEMPLATES = &H15                ' <Benutzer>\Vorlagen 
  ssfCOMMONSTARTMENU = &H16          ' All Users\Startmenü 
  ssfCOMMONPROGRAMS = &H17           ' All Users\Startmenü\Programme 
  ssfCOMMONSTARTUP = &H18            ' All Users\Startmenü\Autostart 
  ssfCOMMONDESKTOPDIRECTORY = &H19   ' All Users\Desktop 
  ssfAPPDATA = &H1A                  ' <Benutzer>\Anwendungsdaten 
  ssfPRINTHOOD = &H1B                ' <Benutzer>\Druckumgebung 
  ssfCOOKIES = &H21                  ' <Benutzer>\Cookies 
  ssfHISTORY = &H22                  ' <Benutzer>\Lokale Einstell.\Verlauf 
  ssfCOMMONTEMPLATES = &H2D          ' All Users\Vorlagen 
  ssfCOMMONDOCUMENTS = &H2E          ' All Users\Dokumente 
End Enum

Public Function GetSpecialFolder(ByVal Folder As ShellSpecialFolderConstants) As String
  Dim tIIDL   As ITEMIDLIST
  Dim strPath As String
  
  If SHGetSpecialFolderLocation(0, Folder, tIIDL) = S_OK Then
    strPath = Space$(MAX_PATH)
    If SHGetPathFromIDList(tIIDL.mkid.cb, strPath) <> 0 Then
      GetSpecialFolder = Left$(strPath, InStr(1, strPath, vbNullChar) - 1)
    End If
  End If
End Function

Sub Test()
Dim strFile As String
Dim lngPahth As Long
Dim strPfad As String

'hier einen Spezialordner angeben ssfPERSONAL = Eigene Dateien 
strPfad = GetSpecialFolder(ssfPERSONAL)
strPfad = IIf(Right(strPfad, 1) = "\", strPfad, strPfad & "\")


strPfad = strPfad & "Neuer_Ordner\"         'Pfad + Name Neuer Ordner 
strFile = "Kopie von " & ThisWorkbook.Name  'Dateiname für die Sicherung 

'hier wird der Ordner angelegt, sollte er nicht vorhanden sein 
lngPahth = apiCreateFullPath(strPfad)

'ist der Ordner vorhanden oder konnte angelegt werden = lngPahth = 1 
'ist der Ordner schon vorhanden, wird er nicht überschrieben! 
    If lngPahth = 1 Then
     ThisWorkbook.SaveCopyAs strPfad & strFile
    Else
     MsgBox "Ordner konnte nicht angelegt oder gefunden werden!", vbCritical
    End If

End Sub
Gruß Tino
Anzeige
AW: hier für Eigene Dateien
19.07.2009 20:05:12
Kay
Super vielen Dank für die ausführliche Hilfe - dieses Forum ist Klasse, da braucht man keine Bange habe, wenn man eben nicht ein Profi ist ;o) - hier wird einem ohne blödes BlaBla einfach geholfen !
Werde es morgen gleich ausprobieren...
Gruß und Danke
Kay
AW: hier für Eigene Dateien
20.07.2009 11:30:29
k
Hi Tino,
habe es ausprobiert und auf meine Bedürfnisse noch etwas umgeschrieben (Wollte nun nicht mehr die volle Datei speichern, sondern nur die Datentabellen in einer neuen Tabelle)...habe es so gelöst und es funktioniert.
Super vielen Dank !
Gruß
Kay
Hier der Code, den ich verwende:
Sub Excel_Sheet_via_Outlook_Senden()
Dim Nachricht As Object, OutApp As Object
Dim AWS, ADM, SavePath, strPfad As String
Dim lngPahth As Long
Application.ScreenUpdating = False
strPfad = GetSpecialFolder(ssfPERSONAL)
strPfad = IIf(Right(strPfad, 1) = "\", strPfad, strPfad & "\")
strPfad = strPfad & "Aktivitaetenliste\"
lngPahth = apiCreateFullPath(strPfad)
SavePath = strPfad
ADM = Worksheets("Basic").Cells(3, 3).Value
Set OutApp = CreateObject("Outlook.Application")
Worksheets(Array("ATE", "ZKE", "STE")).Copy
ActiveWorkbook.SaveAs SavePath & ADM & "_Daten_" & Date & "_" & Format(Time, "hh_mm_ss") & " _
.xls"
AWS = ActiveWorkbook.FullName
Set Nachricht = OutApp.CreateItem(0)
With Nachricht
.To = "Empfaenger@provider"
.Subject = ADM & " - " & Date & " - " & Time
.Attachments.Add AWS
'.body = "aktuelle Daten" & vbCrLf & "Wichtig - bitte vertraulich behandeln !"
.HTMLBody ="aktuelle Daten" & vbCrLf & "Wichtig - bitte vertraulich behandeln !"
'.Display
.Send
End With
MsgBox "Daten wurden an Empfaenger versendet!", vbOKOnly, "Email-Versendung"
'OutApp.Quit - lasse Outlook aktiv bleiben, da es i.d.R. am Tag immer offen ist...
Set OutApp = Nothing
Set Nachricht = Nothing
ActiveWorkbook.Close
Application.ScreenUpdating = True
End Sub

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige