Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1236to1240
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

Speichern mit Unterordner aus Zelle

Speichern mit Unterordner aus Zelle
Oli
Ich versuche über Makro das Abspeichern in einem bestimmten Unterordner, dessen name aus einer Zelle hervorgehen soll.
Leider bekomme ich das so nicht hin, kann mich jemand belehren :-)
Sub SpeichernUnter()
ThisWorkbook.Worksheets("Firma").Activate
Const stdPath = "h:/bewatec/"
Dim myPath As String
myPath = Range("b1")
MsgBox ThisWorkbook.Name
ThisWorkbook.SaveAs Filename:=stdPath & "/" & myPath & "/" & "Wartung2011.xlsm"
End Sub


AW: Speichern mit Unterordner aus Zelle
05.11.2011 10:15:36
fcs
Hallo Oli,
du hast den falschen Schrägstrich als Trennzeichen verwendet. "/" statt "\" und wahrscheinlich auch ein Trennzeichen zu viel eingebaut.
Sub SpeichernUnter()
ThisWorkbook.Worksheets("Firma").Activate
Const stdPath = "h:\bewatec\"
Dim myPath As String
myPath = Range("b1")
MsgBox ThisWorkbook.Name
ThisWorkbook.SaveAs Filename:=stdPath & myPath & "\" & "Wartung2011.xlsm"
End Sub
Gruß
Franz
AW: Speichern mit Unterordner aus Zelle
05.11.2011 10:55:14
Oli
Ich habe es sowohl mit Slash und Backslash probiert. Es geht einfach nicht, er erstellt mir den Unterordner nicht, auch nicht mit deinem Code.
Ich bin am verzweifeln :-( Das Prinzip einen Unterordner zu erstellen, aus einem Zellennamen kann doch nicht so schwer sein. Wenn ich "/" weglasse, dann funzt der Code, er erzeugt natürlich keinen Unterordner.
Anzeige
AW: Speichern mit Unterordner aus Zelle
05.11.2011 11:20:47
Oli
Ach Ok, ich muss den Ordner erst erzeugen... Hm... unter OpenOffice hat er den Ordner einfach angelegt, wenn er nicht existierte.
Danke für deine Bemühungen:-)
So gehts:
Sub SpeichernUnter()
ThisWorkbook.ActiveSheet.Activate
ThisWorkbook.Worksheets("Firma").Activate
Const stdPath = "h:\bewatec\"
Dim myPath As String
myPath = Range("b1")
Dim Verzeichnis As String, fso As Object
Set fso = CreateObject("Scripting.Filesystemobject")
Verzeichnis = stdPath & myPath
If fso.FolderExists(Verzeichnis) = False Then MkDir Verzeichnis
MsgBox ThisWorkbook.Name
ThisWorkbook.SaveAs Filename:=stdPath & myPath & "\" & myPath & "_Wartung2011.xlsm"
'Application.Dialogs(xlDialogSaveAs).Show
End Sub

Anzeige
AW: Speichern mit Unterordner aus Zelle
05.11.2011 15:49:10
Reinhard
Hallo Oli,
zu deinem Code. Schreib die Dim Anweisungen zuoberst in den Code, die werden nämlich immer zuerst ausgeführt und zwar alle, auch dieses Dim:
If Weihnachten=Ostern
Dim A as Integer
End If.
Grund ist, beim makrostart kompiliert Vba manche Dinge, wie z.B. die variablen um ihnen den nötigen Speicher-Platz zuzuweisen.
Anschließend interpretiert Vba nur noch den Code.
Was soll das sein:
ThisWorkbook.ActiveSheet.Activate
Du aktivierst das sowieso aktivierte Blatt nochmals?
ThisWorkbook.ActiveSheet.Activate
ThisWorkbook.Worksheets("Firma").Activate
Wenn du mehrfach hintereinander aktivierst kannst du alle Aktivierungen bis auf die letzte "vergessen".
ThisWorkbook.Worksheets("Firma").Activate
ergibt das Gleiche.
Du benutzt MkDir, das verlangt daß der Pfad zum anzulegenden Verzeichnis vorher existiert.
Ich weiß aber, entweder mit FSO oder API kann man auch sowas schreiben im Pseudocode:
Erstelle c:\ordner1\ordner2\ordner3
D.h. das Verzeichnis wird auch erstellt wenn z.B. c:\ordner1 noch gar nicht existiert.
Was ich nun leider nicht weiß was man anstelle von "Erstelle" coden muß :-(
Gruß
Reinhard
Anzeige
AW: Speichern mit Unterordner aus Zelle
05.11.2011 17:38:20
Oli
Hallo Reinhard,
ah ja ok, ich hatte den Code noch nicht aufgeräumt, es war ja ein Zusammengeschnipsel von mir, dadurch die beiden Aktivierungen.
Was MkDir betrifft: Mit If fso.FolderExists(Verzeichnis) = False frage ich ab, ob dieser Pfad existiert. Then MkDir Verzeichnis erstellt es mir dann, wenn es nicht existiert.
Gruß
Oli
AW: Speichern mit Unterordner aus Zelle
05.11.2011 19:25:43
Reinhard
Hallo Oli,
ich meinte dieses:
Sub GehtNicht()
MkDir "c:\gibtsnicht\neu"
End Sub
Das würde nur funktionieren wenn es denn Pfad
c:\gibtsnicht
schon gibt.
Gruß
Reinhard
AW: Speichern mit Unterordner aus Zelle
05.11.2011 16:07:27
Josef

Hallo Oli,
' **********************************************************************
' Modul: Modul2 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

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

Sub SpeichernUnter()
  Dim strFilePath As String
  
  Const cstrStdPath = "h:\bewatec\"
  
  With ThisWorkbook
    With .Worksheets("Firma")
      strFilePath = cstrStdPath & IIf(Right(cstrStdPath, 1) = "\", "", "\") & _
        .Range("B1") & IIf(Right(.Range("B1"), 1) = "\", "", "\") & "_Wartung2011.xlsm"
    End With
    
    If MakeSureDirectoryPathExists(strFilePath) <> 0 Then .SaveAs strFilePath
  End With
  
End Sub



« Gruß Sepp »

Anzeige
AW: Speichern mit Unterordner aus Zelle
05.11.2011 17:41:33
Oli
Hallo Sepp,
Dieser Code sieht deutlich professioneller aus als meiner, aber so hätte ich es leider nicht hinbekommen, dafür sind meine Kenntnisse zu gering.
Danke für diese Variante, ich werde sie mal einsetzen, ich habe diese Anforderung noch häufiger für andere Arbeitsmappen zu realisieren.
Gruß
Oli
Noch ein Tipp!
05.11.2011 17:57:00
Josef

Hallo Oli,
universeller einsetzbar wird der Code, wenn man Erweiterung und Dateiformat mit einbezieht.
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

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

Sub SpeichernUnter()
  Dim strFilePath As String
  Dim strExt As String, lngFormat As Long
  
  Const cstrStdPath = "h:\bewatec\"
  
  getFileExtAndFormat ThisWorkbook, strExt, lngFormat
  
  With ThisWorkbook
    With .Worksheets("Firma")
      strFilePath = cstrStdPath & IIf(Right(cstrStdPath, 1) = "\", "", "\") & _
        .Range("B1") & IIf(Right(.Range("B1"), 1) = "\", "", "\") & "_Wartung2011" & strExt
    End With
    
    If MakeSureDirectoryPathExists(strFilePath) <> 0 Then .SaveAs strFilePath, lngFormat
  End With
  
End Sub


Private Function getFileExtAndFormat(ByRef WB As Workbook, ByRef strExt As String, ByRef lngFormat As Long)
  With WB
    If Val(Application.Version) < 12 Then
      strExt = ".xls": lngFormat = -4143
    Else
      Select Case WB.FileFormat
        Case 51: strExt = ".xlsx": lngFormat = 51
        Case 52:
          If .HasVBProject Then
            strExt = ".xlsm": lngFormat = 52
          Else
            strExt = ".xlsx": lngFormat = 51
          End If
        Case 56: strExt = ".xls": lngFormat = 56
        Case Else: strExt = ".xlsb": lngFormat = 50
      End Select
    End If
  End With
End Function



« Gruß Sepp »

Anzeige

306 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige