Speichern unter :-(

Hallo Excel-Kundige,
habe wohl gerade ein Brett vorm Kopf und kann nicht verstehen, warum die Datei nicht unter dem vorgegebenen Pfad gespeichert wird ( Fehler in der Zeile mit „****“
Die Variable „Pfad“ hat genau den richtigen Wert, nämlich: "\server\daten$\Angebote\2\2792_Nagel "
Kann mir Jemand auf die Sprünge helfen?

Sub Daten_holen()
datei = ActiveWorkbook.Name 'ActiveWorkbook.Path & „“ & ActiveWorkbook.Name
Angebot = Worksheets(„Daten“).Cells(6, 1)
Application.DisplayAlerts = False ’ Meldungen und Rückfragen
Workbooks.Open Filename:=„Y:\ANGEBOTE\Angebotsverzeichnis.xls“
Columns(3).Select
On Error GoTo Hell
Selection.Find(What:=Angebot, After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Activate
On Error GoTo 0
KundenName = Left(Cells(ActiveCell.Row, 5), 6)
ziffer = Left(Angebot, 1)
If Len(Angebot) = 5 Then ziffer = Left(Angebot, 2)
'ziel = Dir("\server\daten$\Angebote" & ziffer & „“ & Angebot & „*“, 16) 'vbDirectory = 16 Verzeichnis oder Ordner, zusätzlich zu Dateien ohne Attributen.
ziel = Dir("\server\daten$\Angebote" & ziffer & „“ & Angebot & „*“, 16) 'vbNormal = 0 (Voreinstellung) Dateien ohne Attribute.
If ziel = „“ Then ziel = Angebot & „_“ & KundenName & „“
Application.CutCopyMode = False
Pfad = „\server\daten$\Angebote“ & ziffer & „“ & ziel ’ Pfad des AngebotsOrdners am Server

Cells(ActiveCell.Row, 23) = Pfad & „Projekt_“ & Angebot & „.xls“
Cells(ActiveCell.Row, 23).Select
ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:=Pfad & „Projekt_“ & Angebot & „.xls“ 'Hyperlink in AngebotsVerzeichnis, Spalte 23

Application.CutCopyMode = False
ActiveCell.EntireRow.Copy
Windows(datei).Activate
Cells(4, 1).Select
ActiveSheet.Paste
Windows(„Angebotsverzeichnis.xls“).Activate
Rows(„6:8“).Select
Application.CutCopyMode = False
Selection.Copy
Windows(datei).Activate
Cells(1, 1).Select
ActiveSheet.Paste
Windows(„Angebotsverzeichnis.xls“).Close
Windows(datei).Activate
****ActiveWorkbook.SaveAs Filename:=Pfad & „Projekt_“ & Angebot & „.xls“ ', AccessMode:=xlShared
ActiveWorkbook.SaveAs Filename:="\server\daten$\vorlagen\excel" & datei 'für LaufZeit diese Zeile auskommentieren

Worksheets(„Daten“).Cells(6, 1).Select
Application.DisplayAlerts = True ’ Meldungen und Rückfragen
Exit Sub
Hell:
MsgBox „keinen Eintrag gefunden“
Windows(„Angebotsverzeichnis.xls“).Close
Worksheets(„Daten“).Cells(6, 1).Select
Application.DisplayAlerts = True ’ Meldungen und Rückfragen
End Sub

Ein Schritt weiter:
Ich hatte erwartet, dass Excel das Verzeichnis anlegt, falls es nicht vorhanden ist --> musste ich von Hand machen --> keine Fehlermeldung.
Aber die neue Datei heißt „2792_NagelProjekt_2792.xls“ und liegt unter „\server\daten$\Angebote\2“, also genau auf gleicher Ebene wie das handgemachte Verzeichnis.

Wie bekomme ich die Datei „Projekt_2792.xls“ an diesen SpeicherOrt:
„\server\daten$\Angebote\2\2792_Nagel“ ? ( möglichst noch, ohne händisch neue Verzeichnisse anzulegen )

Freundliche Grüße aus OL
Thomas

Grüezi Thomas

Ich hatte erwartet, dass Excel das Verzeichnis anlegt, falls
es nicht vorhanden ist --> musste ich von Hand machen -->
keine Fehlermeldung.

Ja, Excel legt wie wohl die meisten Anwendungen keine Verzeichnisse automatisch an.

Wie bekomme ich die Datei „Projekt_2792.xls“ an diesen
SpeicherOrt:
„\server\daten$\Angebote\2\2792_Nagel“ ? ( möglichst noch,
ohne händisch neue Verzeichnisse anzulegen )

Die Ordner musst Du ggf. per VBA selbst erzeugen und dann die Datei(en) dort rein speichern mit dem bisherigen Code.

Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Hallo Thomas,

Ein Schritt weiter:

gut, ich hab den Code nur sehr kurz überflogen :smile:

Ich hatte erwartet, dass Excel das Verzeichnis anlegt, falls
es nicht vorhanden ist --> musste ich von Hand machen -->
keine Fehlermeldung.

nein, Excel legt keine Verzeichnisse an.
Vba kennt „MkDir“, aber das funktioniert auch nur für ein Verzeichnis/Ordner an einem schon bestehend Pfad.

D,h., wenn „K:\kw1\kw2“ schon besteht klappt dieses:
MkDir „K:\kw1\kw2\kw3“
Wenn nichtmal „K:\kw1“ besteht geht es nur so

MkDir „K:\kw1“
MkDir „K:\kw1\kw2“
MkDir „K:\kw1\kw2\kw3“

Um bestehende Verzeichnisse herauszufinden könntest du so programmieren:

if dir(„K:\kw1/nul“)= „“ Then MkDir „K:\kw1“
if dir(„K:\kw1\kw2/nul“)= „“ Then MkDir „K:\kw1\kw2“
if dir(„K:\kw1\kw2\kw3/nul“)= „“ Then MkDir „K:\kw1\kw2\kw3“

Aber die neue Datei heißt „2792_NagelProjekt_2792.xls“ und
liegt unter „\server\daten$\Angebote\2“, also genau auf
gleicher Ebene wie das handgemachte Verzeichnis.
Wie bekomme ich die Datei „Projekt_2792.xls“ an diesen
SpeicherOrt:
„\server\daten$\Angebote\2\2792_Nagel“ ? ( möglichst noch,
ohne händisch neue Verzeichnisse anzulegen )

Kommste klar mit meinem Hinweis? Natürlich kannste auch ohne /nul vorgehen und da vbDirectory bzw. 16 benutzen.

Btw: Was genau ist für Excel der Unterschied zwischen Verzeichnis und Ordner? Für mich ist beides und Pfad auch noch das Gleiche.

Freundliche Grüße aus OL

OL? Was issen da so los in Wildeshausen? Echt soviel los wie der Name verspricht :smile:)

Gruß aus F
Reinhard

´Mal geht´s, ´mal nicht :frowning:
Hallo Thomas,
das war wohl auch zu viel verlangt mit dem automatischen Anlegen von Verzeichnissen - o. k., habe das mittlerweile auch ohne Excels Beistand hingekriegt und mein Code sieht nun so aus:

Option Explicit
Dim Datei As String
Dim Angebot As Integer
Dim KundenName As String
Dim Ziffer As Integer
Dim Ziel As String
Dim Pfad As String
Dim SuchPfad As String
’ Dim x As String
’ Dim n As Name

Sub Daten_holen()
Datei = ActiveWorkbook.Name 'ActiveWorkbook.Path & „“ & ActiveWorkbook.Name
Angebot = Worksheets(„Daten“).Cells(6, 1) 'eingetragener Wert aus Tabelle
Application.DisplayAlerts = False ’ Meldungen und Rückfragen unterdrücken
Application.EnableEvents = False
Workbooks.Open Filename:="\server\daten$\ANGEBOTE\Angebotsverzeichnis.xls"
Columns(3).Select
On Error GoTo Hell
Selection.Find(What:=Angebot, After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Activate
On Error GoTo 0
'ActiveCell.EntireRow.Select
KundenName = Left(Cells(ActiveCell.Row, 5), 6)
Ziffer = Left(Angebot, 1)
If Len(Angebot) = 5 Then Ziffer = Left(Angebot, 2)
SuchPfad = „\server\daten$\Angebote“ & Ziffer & „“ & Angebot & „*“

'ziel = Dir("\server\daten$\Angebote" & ziffer & „“ & Angebot & „*“, 16) 'vbDirectory = 16 Verzeichnis oder Ordner, zusätzlich zu Dateien ohne Attributen.
Ziel = Dir(SuchPfad, 16) 'vbNormal = 0 (Voreinstellung) Dateien ohne Attribute.
If Ziel = „“ Then
Ziel = Angebot & „_“ & KundenName
MkDir ("\server\daten$\Angebote" & Ziffer & „“ & Ziel)
End If
Application.CutCopyMode = False
Pfad = „\server\daten$\Angebote“ & Ziffer & „“ & Ziel & „“ ’ Pfad des AngebotsOrdners am Server

Cells(ActiveCell.Row, 23) = Pfad & „Projekt_“ & Angebot & „.xls“
Cells(ActiveCell.Row, 23).Select
ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:=Pfad & „Projekt_“ & Angebot & „.xls“ 'Hyperlink in AngebotsVerzeichnis, Spalte 23

Application.CutCopyMode = False
ActiveCell.EntireRow.Copy
Windows(Datei).Activate
Cells(4, 1).Select
ActiveSheet.Paste
Windows(„Angebotsverzeichnis.xls“).Activate
Rows(„6:8“).Select
Application.CutCopyMode = False
Selection.Copy
Windows(Datei).Activate
Cells(1, 1).Select
ActiveSheet.Paste
Windows(„Angebotsverzeichnis.xls“).Close
Windows(Datei).Activate

ActiveWorkbook.SaveAs Filename:=Pfad & „Projekt_“ & Angebot & „.xls“ ', AccessMode:=xlShared
ActiveWorkbook.SaveAs Filename:="\server\daten$\vorlagen\excel" & Datei 'für LaufZeit diese Zeile auskommentieren

Worksheets(„Daten“).Cells(6, 1).Select
Application.DisplayAlerts = True ’ Meldungen und Rückfragen
Application.EnableEvents = True
Exit Sub
Hell:
MsgBox „keinen Eintrag gefunden“
Windows(„Angebotsverzeichnis.xls“).Close
Worksheets(„Daten“).Cells(6, 1).Select
Application.DisplayAlerts = True ’ Meldungen und Rückfragen
Application.EnableEvents = True
End Sub

Das klappt auch. Aber immer erst beim 2. Anlauf. In dem Durchlauf, wo das neue Verzeichnis angelegt wird, gibt es erst´mal ´ne Fehlermeldung. Erst beim 2. Mal klappt es mit diesem AngebotsOrdner. Das finde ich schon eigenartig. Kommt aber noch besser:
Wenn ich eine andere Angebotsnummer eingebe, funktioniert es von Anfang an ohne Fehler. Ich habe beide Ordner mehrfach gelöscht und durch meinen Code wieder neu erstellen lassen. Immer mit den wiederkehrend unterschiedlichen Abläufen.
Weiß auch nicht, ob mir überhaupt Jemand helfen kann, ohne die Verzeichnisstruktur nachzubauen. Aber vielleicht hast Du ja doch einen Tip…
Jedenfalls schon ´mal besten Dank für Dein Interesse.
Freundliche Grüße
Thomas

Hallo Reinhard,
vielen Dank für Deine Antwort.


nein, Excel legt keine Verzeichnisse an.

O. k., versuche ich mir zu merken. Habe ich auch schon soweit gelöst ( bzw. nicht so ganz --> siehe meine Antwort auf Thomas Ramels Antwort )


MkDir „K:\kw1“
MkDir „K:\kw1\kw2“
MkDir „K:\kw1\kw2\kw3“

Endlich ein Problem, dass ich nicht habe :wink:
Zum Glück gibt es bei uns ( bisher )nur 12 Bereiche mit AngebotsOrdnern, da muss ich keine neuen anlegen. Aber in jedem Bereich („Ziffer“) bis zu 9999 Angebote in entsprechenden Ordnern, die größtenteils schon angelegt sind; allerdings von Hand und nach keinem festen Schema. Aber da hilft ja die DIR-Anweisung ganz gut.
Dann habe ich momentan noch ein weiteres Problemchen:
Wenn ich die unter neuem Namen abgespeicherte Datei wieder öffnen will, sagt Excel 2007 mir, dass die Erweiterung nicht zum Format passt. Dabei speichere ich voreinstellungsmäßig alle Dateien als .xls
Wie kann ich diese Rückfrage wohl eliminieren?

Wildeshausen? War schon länger nicht mehr dort. Wird sich inzwischen beruhigt haben :wink:
Insgesamt wird da sowieso weniger los sein als in F

Bis demnächst
Thomas

Grüezi zusammen

nein, Excel legt keine Verzeichnisse an.
Vba kennt „MkDir“, aber das funktioniert auch nur für ein
Verzeichnis/Ordner an einem schon bestehend Pfad.

D,h., wenn „K:\kw1\kw2“ schon besteht klappt dieses:
MkDir „K:\kw1\kw2\kw3“
Wenn nichtmal „K:\kw1“ besteht geht es nur so

MkDir „K:\kw1“
MkDir „K:\kw1\kw2“
MkDir „K:\kw1\kw2\kw3“

Direkt(er) gehts dann mit API-Funtkionen die den Pfad gleich anlegen wenn nicht vorhanden:

Option Explicit

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

Und dann im Code drin nur noch

 MakePath "K:\kw1\kw2\kw3\"

Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Grüezi Thomas

Dann habe ich momentan noch ein weiteres Problemchen:
Wenn ich die unter neuem Namen abgespeicherte Datei wieder
öffnen will, sagt Excel 2007 mir, dass die Erweiterung nicht
zum Format passt. Dabei speichere ich voreinstellungsmäßig
alle Dateien als .xls
Wie kann ich diese Rückfrage wohl eliminieren?

Mit welcher Excel-Version arbeitest Du?

Ab xl2007 gibt es neue Dateitypen und es reicht nicht mehr, einem Dateinamen einfach ein ‚.xls‘ anzuhängen um es entsprechend zu speichern, sondern Du musst explizit das Speicherformat als Parameter beim Speichern angeben.

Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Aha
Grüezi Thomas,
das richtige FileFormat finde ich dann z. B. über den MakroRecorder heraus, danke.
Thomas
2007 in der Firma, zuhause 2003

Grüezi Thomas

das richtige FileFormat finde ich dann z. B. über den
MakroRecorder heraus, danke.

Ocer besser noch über die Online-Hilfe, die besser ist als sie allgemein gemacht wird…

2007 in der Firma, zuhause 2003

Dachte ich es mir doch… :wink:

Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Werte für FileFormat ab Version Excel 2007

das richtige FileFormat finde ich dann z. B. über den
MakroRecorder heraus, danke.

Hallo Thomas,

durch Zufall brauchte ich eben auch das Fileformat bzw. welche Werte man da nehmen kann, suche in F1 nach
XlFileFormat
dann wähle
XlFileFormat-Enumeration

Gruß
Reinhard

Hallo Reinhard,
die Werte stimmen mit meinen per MakroRecorder gefundenen Code überein :smile:
Besten Dank und schönen Sonntagabend
Thomas