Datei speichern in neues Verzeichnis

Hallo liebe Excel-Experten,
mit untenstehendem Code erzeuge ich bei Bedarf ein neues Verzeichnis auf dem Server und versuche dann, dorthin die Datei zu speichern, die diesen Code enthält. Das klappt aber leider immer erst im 2. Anlauf ( also wenn das Verzeichnis schon vorhanden gewesen ist ).
Ich würde mich über brauchbare :wink: Hinweise sehr freuen.
Grüße aus Oldenburg
Thomas

Option Explicit
Dim Datei As String
Dim Angebot 'muss für LEN Variant sein!
Dim KundenName As String
Dim Ziffer As Integer
Dim OrdnerName As String
Dim Pfad As String
Dim SuchPfad As String
Dim Spalte As Integer
Dim Zeile As Integer
Public Const AV As String = „\server\daten$\ANGEBOTE\Angebotsverzeichnis.xls“

Sub Daten_holen()
Application.DisplayAlerts = False ’ Meldungen und Rückfragen unterdrücken
Application.EnableEvents = False
Datei = ActiveWorkbook.Name 'Name der aufrufenden Datei

’ bei abweichender AngebotsNummer: DatenZeile löschen
If Worksheets(„DATEN“).Cells(6, 1) Worksheets(„DATEN“).Cells(4, 3) Then Worksheets(„DATEN“).Rows(4).ClearContents

'VARIABLENWERTE BESTIMMEN
Angebot = Worksheets(„Daten“).Cells(6, 1) 'eingetragener Wert aus aufrufender Datei
Ziffer = Left(Angebot, 1)
If Len(Angebot) = 5 Then Ziffer = Left(Angebot, 2)
SuchPfad = „\server\daten$\Angebote“ & Ziffer & „“ & Angebot & „*“

'ANGEBOTSVERZEICHNIS ÖFFNEN, ZEILE SUCHEN
Workbooks.Open Filename:=AV 'AngebotsVerzeichnis öffnen
Worksheets(„alle“).Columns(3).Select
On Error GoTo Hell 'Fehlermeldung bei erfolgloser Suche abfangen
Selection.Find(What:=Angebot, After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Activate
Zeile = ActiveCell.Row
On Error GoTo 0 ’ Fehlerbehandlung ausschalten

If KundenName = „“ Then KundenName = Left(Worksheets(„alle“).Cells(ActiveCell.Row, 5), 15)
OrdnerName = Dir(SuchPfad, 16) 'vbNormal = 0 (Voreinstellung) Dateien ohne Attribute.

Pfad = „\server\daten$\Angebote“ & Ziffer & „“ & OrdnerName & „“ 'realer Pfad des AngebotsOrdners am Server

'EINTRÄGE UND HYPERLINKS IN ANGEBOTSVERZEICHNIS SCHREIBEN
Cells(ActiveCell.Row, 23) = Pfad & „Projekt_“ & Angebot & „.xls“ 'TextEintrag in AngebotsVerzeichnis, Spalte 23
Cells(ActiveCell.Row, 23).Select
ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:=Pfad & „Projekt_“ & Angebot & „.xls“ 'Hyperlink in AngebotsVerzeichnis, Spalte 23
Cells(ActiveCell.Row, 3).Select
ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:=Pfad 'Hyperlink in AngebotsVerzeichnis, Spalte 23
'EINTRÄGE UND HYPERLINKS IN AUFRUFENDE DATEI SCHREIBEN
Windows(Datei).Activate
Cells(4, 23) = Pfad & „Projekt_“ & Angebot & „.xls“ 'TextEintrag in AngebotsVerzeichnis, Spalte 23
Cells(4, 23).Select
ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:=Pfad & „Projekt_“ & Angebot & „.xls“ 'Hyperlink in aufrufende Datei, Zeile 4, Spalte 23
Cells(4, 3) = Angebot
Cells(4, 3).Select
ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:=Pfad 'Hyperlink in aufrufende Datei, Zeile 4, Spalte 3

If KundenName = „“ Then KundenName = Left(Cells(4, 5), 15)
OrdnerName = Dir(SuchPfad, 16) 'vbNormal = 0 (Voreinstellung) Dateien ohne Attribute.
If OrdnerName = „“ Then Ordner_anlegen 'Gegebenenfalls ORDNER ANLEGEN
Pfad = „\server\daten$\Angebote“ & Ziffer & „“ & OrdnerName & „“ 'realer Pfad des AngebotsOrdners am Server

'FALLS SCHON EINE PROJEKT****.xls EXISTIERT --> DIESE ÖFFNEN
If Datei „Projekt_“ & Angebot & „.xls“ Then ’ … nur wenn die aufrufende Datei nicht besagte Projektdatei ist
If Dir(Pfad & „Projekt_“ & Angebot & „.xls“) „“ Then
MsgBox („Es existiert bereits eine Projekt.xls zu dieser AngebotsNummer. Diese wird jetzt geöffnet und der DatenImport abgebrochen.“)
Workbooks.Open Filename:=Pfad & „Projekt_“ & Angebot & „.xls“

Windows(Datei).Activate
ActiveWorkbook.Save
ActiveWorkbook.Close 'ab hier wird der Code nicht mehr ausgeführt
'Datei = Pfad & „Projekt_“ & Angebot & „.xls“
End If
End If

Windows(„Angebotsverzeichnis.xls“).Activate
Rows(„6:8“).Select 'ÜberschriftZeilen
Application.CutCopyMode = False
Selection.Copy
Windows(Datei).Activate
Cells(1, 1).Select ’ … in die 1. Zeile der aufrufenden Datei
ActiveSheet.Paste

Windows(Datei).Activate
Worksheets(„DATEN“).Activate ’ Aufrufende Datei aktivieren
For Spalte = 1 To 26
’ leere Zellen der aufr. Datei füllen
If Worksheets(„DATEN“).Cells(4, Spalte) = „“ Then _
Worksheets(„DATEN“).Cells(4, Spalte) = Workbooks(„Angebotsverzeichnis.xls“).Worksheets(„alle“).Cells(Zeile, Spalte)
’ leere Zellen des AV füllen
If Workbooks(„Angebotsverzeichnis.xls“).Worksheets(„alle“).Cells(Zeile, Spalte) = „“ Then _
Workbooks(„Angebotsverzeichnis.xls“).Worksheets(„alle“).Cells(Zeile, Spalte) = Worksheets(„DATEN“).Cells(4, Spalte)
Next Spalte
’ AV SPEICHERN UND SCHLIESSEN
Windows(„Angebotsverzeichnis.xls“).Activate
ActiveWorkbook.Save
ActiveWorkbook.Close
’ AUFRUFENDE DATEI AKTIVIEREN
Windows(Datei).Activate
ActiveWorkbook.Save
’ AUFRUFENDE DATEI unter neuem Namen speichern
ActiveWorkbook.SaveAs Filename:=Pfad & „Projekt_“ & Angebot & „.xls“, FileFormat:=xlExcel8, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:=False, CreateBackup:=False
’ AUFRUFENDE DATEI unter ALTEM Namen speichern

ActiveWorkbook.SaveAs Filename:="\server\daten$\VORLAGEN\Excel\Projekt.xltm", FileFormat _
:=xlOpenXMLTemplateMacroEnabled, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:=False, CreateBackup:=False '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

Sub Ordner_anlegen()
If KundenName = „“ Then KundenName = InputBox(prompt:=„Geben Sie bitte einen KundenNamen ein:“, _
Title:=„Ereignisprozedur zu Open“)
OrdnerName = Angebot & „_“ & KundenName
MkDir ("\server\daten$\Angebote" & Ziffer & „“ & OrdnerName)

End Sub

Hallo Thomas,

sorry, der Code ist mir zu lang um mich da einfach so reinzuvertiefen.

mit untenstehendem Code erzeuge ich bei Bedarf ein neues
Verzeichnis auf dem Server und versuche dann, dorthin die
Datei zu speichern, die diesen Code enthält. Das klappt aber
leider immer erst im 2. Anlauf ( also wenn das Verzeichnis
schon vorhanden gewesen ist ).

Sponatener Gedanke, erzeuge doch das Verzeichnis ohne jedweden Bedarf wenn es nicht vorhanden ist.

Was bedeutet 2.ter Anlauf genau.
Beim ersten Codedurchlauf passiert nix? keine Fehlermeldung?
Beim zweiten scheint es zu klappen.
Was ist mit dem dritten, vierten Aufruf?
Klappen die alle wie der zweite?

Ich würde mich über brauchbare :wink: Hinweise sehr freuen.

Unabhängig von deiner Anfrage, grad bei aufwendigem Code versuche globale Variablen zu vermeiden.

Z.B. der Aufruf von
Sub Ordner_anlegen()
der wohl so aussieht Call Ordner_anlegen
könnte auch so aussehen:

Sub Ordner_anlegen(Angebot, Kundenname)

Call Ordner_anlegen(„Angebot12“, „A23B12“)

Ist zugegeben Mehrarbeit anfangs aber zahlt sich sehr aus bei der Fehlersuche.
Bei globalen Variablen die in vielen Modulen Prozeduren abgeändert werden haste ein echtes Problem bei der Fehlersuche.

Fazit für mich, ich habe keine Lust den Code zu sezesieren.
Lade eine funktionierende mappe hoch wo das auftritt was du beschreibst, also beim ersten Mal geht es nicht, beim zweiten Mal schon.
Dann habe ich es viel einfacher nach evtlm. fehler zu suchen.

Gruß
Reinhard

Hallo Thomas,

mit untenstehendem Code erzeuge ich bei Bedarf ein neues
Verzeichnis auf dem Server und versuche dann, dorthin die
Datei zu speichern, die diesen Code enthält. Das klappt aber
leider immer erst im 2. Anlauf ( also wenn das Verzeichnis
schon vorhanden gewesen ist ).

der Code ist recht verwirrend.

Ich gehe mal davon aus, dass du den Pfad nicht manuell anlegst. Wenn es immer erst ab dem zweiten Mal klappt, würde ich darauf tippen, dass die Reihenfolge der Befehle ganz einfach nicht stimmt. Die Datei soll womöglich zu einem Zeitpunkt gespeichert werden, an dem der Pfad noch nicht existiert. Einen konkreten Hinweis zu geben ist aber schwierig, weil ich nicht weiß, an welcher Stelle der Code, falls überhaupt, einen Fehler verursacht.

Ich würde mich über brauchbare :wink: Hinweise sehr freuen.

Das Makro einfach mal im Einzelschrittmodus laufen lassen und dabei die relevanten Variablen in der Überwachung beobachten. Auf diese Weise siehst du, ob das Makro jetzt das gemacht hat, was von Dir geplant war.

Viel Erfolg!

MfG
Stephan

OT - Forumsaufteilung
Morgen,

mal ne Frage, wieso sind in letzter Zeit soviele VBA-Codes in „Tabellenkalkulation“ zu finden? Da gibs doch nen eigenes Unterforum für…

MfG

mal ne Frage, wieso sind in letzter Zeit soviele VBA-Codes in
„Tabellenkalkulation“ zu finden? Da gibs doch nen eigenes
Unterforum für…

Hallo Brille,

eher umgekehrt. Excel-Vba gehört schon in’s Excel-Brett,
Word-Vba in’s Word-Brett, Access-Vba in’s Access-Brett, Outlook-Vba in’s Outlook-Brett, usw.

Denn jedes Vba ist eine Mischung aus Grunddingen aus VB und programmspezifischen Dingen des jeweiligen Programms.

Gruß
REinhard

Hallo Reinhard,
vielen Dank für Deine Mühe.

sorry, der Code ist mir zu lang um mich da einfach so
reinzuvertiefen.

Kann ich nachvollziehen.

mit untenstehendem Code erzeuge ich bei Bedarf ein neues
Verzeichnis auf dem Server und versuche dann, dorthin die
Datei zu speichern, die diesen Code enthält. Das klappt aber
leider immer erst im 2. Anlauf ( also wenn das Verzeichnis
schon vorhanden gewesen ist ).

Sponatener Gedanke, erzeuge doch das Verzeichnis ohne jedweden
Bedarf wenn es nicht vorhanden ist.

Ist vielleicht später ein Ausweg. Dann würde ich aber von meinem AngebotsVerzeichnis ausgehend 7200 leere Ordner nach Bedarf generieren. Naja, die meisten gibt es bereits …Gute Idee jedenfalls.
Trotzdem wundere ich mich über dieses Phänomen.

Was bedeutet 2.ter Anlauf genau.
Beim ersten Codedurchlauf passiert nix? keine Fehlermeldung?

Doch. Hätte ich ja auch gleich schreiben können :-S
Es gibt sogar 2 verschiedene FM bei Start ohne das passende Verzeichnis:

  1. "Laufzeitfehler 1004 - Unzulässige Funktion
  2. "Die Methode’Save As’ für das Objekt ‚_Workbook‘ ist fehlgeschlagen
    ( tatsächlich „_“ vor wb )

*** Frage, off topic: Warum kann man eigentlich die MicroSoft-Fehlermeldungen nicht in die ZwischenAblage kopieren??? ***

Dafür taucht der Fehler aber immer an derselben Stelle auf, nämlich nach der KommentarZeile "’ AUFRUFENDE DATEI unter neuem Namen speichern
"
Vorher wurde folgender Code abgearbeitet:
„OrdnerName = Dir(SuchPfad, 16) 'vbNormal = 0 (Voreinstellung) Dateien ohne Attribute.
If OrdnerName = „“ Then Ordner_anlegen 'Gegebenenfalls ORDNER ANLEGEN“
Der Ordner wurde erfolgreich erzeugt ( ist auch im Explorer sichtbar ).
Habe ich Alles im Debugger mit F8 durchgekaspert, mehrmals.
Er ( oder sie? ) will einfach nicht in den frisch angelegten Ordner speichern. GRRRR!

Beim zweiten scheint es zu klappen.
Was ist mit dem dritten, vierten Aufruf?
Klappen die alle wie der zweite?

Ja, wenn der Ordner existiert läuft Alles wie geplant. Dann kopiert sich auch meine .xltm als .xls dort hinein und wieder dorthin, wo sie gestartet wurde :smile:

Lade eine funktionierende mappe hoch wo das auftritt was du
beschreibst,

Ich fürchte, dass das nicht den gewünschten Effekt hätte, denn

  1. sind 2 AM beteiligt, eine davon 8700kB groß und voller spezifischer AuftragsDaten
  2. funktioniert die Vorlage zunächst nur in Verbindung mit unserer Verzeichnisstruktur

Es wäre toll, wenn Du trotzdem noch den einen oder anderen Gedanken niederschriebest

Freundliche Grüße
Thomas

Hallo Stephan,
vielen Dank für Deine Antwort. Das habe ich allerdings schon so durchgeführt ( siehe meine Antwort an Reinhard! )
Freundliche Grüße
Thomas

Hallo,
Du meinst vielleicht das VB-Brett?
Jedenfalls gibt es tatsächlich andere Bretter für Anfragen wie Deine: Schaue Dir einmal den Bereich „Intern“ an

Freundliche Grüße
Thomas

Jedenfalls gibt es tatsächlich andere Bretter für Anfragen wie
Deine: Schaue Dir einmal den Bereich „Intern“ an

Hallo,

und welches wäre das? Anregung, Lob, Kritik?
Soll es ja alles drei nicht sein, weils mir ehrlich gesagt wurscht ist, weil ich eh beide Foren lese…hat mich halt nur gewundert, dass anstatt Excel-Formeln nun hier ständig VBA-Codes auftauchen, deswegen hab ichs gleich in den Beitrag geschrieben/gefragt…

Ich mach erstmal Wochenende :smile:

MfG

Hallo Thomas,

Sponatener Gedanke, erzeuge doch das Verzeichnis ohne jedweden
Bedarf wenn es nicht vorhanden ist.

Ist vielleicht später ein Ausweg. Dann würde ich aber von
meinem AngebotsVerzeichnis ausgehend 7200 leere Ordner nach
Bedarf generieren. Naja, die meisten gibt es bereits

also wenn es schon 4356 gibt hätte ich keine Probleme da noch knapp 3000 dazu zu tun.
Aber wichtiger ist jetzt im Augenblick daß du das ja jederzeit tun kannst und dann die Problematik im Code weg wäre wenn ich richtig verstanden habe.
Das sind doch erfreuliche Aussichten, quasi ein Plan B von dem man weiß daß der klappt bzw. das sehr annimmt.
Hat was sehr beruhigendes*find*

Was bedeutet 2.ter Anlauf genau.
Beim ersten Codedurchlauf passiert nix? keine Fehlermeldung?

Doch. Hätte ich ja auch gleich schreiben können :-S

Können? *hüstel* müssen :smile:)

Es gibt sogar 2 verschiedene FM bei Start ohne das passende
Verzeichnis:

  1. "Laufzeitfehler 1004 - Unzulässige Funktion
  2. "Die Methode’Save As’ für das Objekt ‚_Workbook‘ ist
    fehlgeschlagen
    ( tatsächlich „_“ vor wb )

Bei beiden, vor allem beid er ersten, wo, welche Zeile?

Das „_“ bedeutet schon was, ist was internes von Excel/Vba, sehe ich öfters wenn ich in den Eingeweiden von Excel/Vba recherchiere.
Spielt aber keine sonderlich große Rolle.
Die Info daß SaveAs eines WB fehlgeschlagen ist ist aussagekräftig genug.

*** Frage, off topic: Warum kann man eigentlich die
MicroSoft-Fehlermeldungen nicht in die ZwischenAblage
kopieren??? ***

Warum mußt du Bill fragen *gg*. Als Workaround, mach ein Bild des Fensters und zeig das.
Oder halt Notepad o.ä. als zweites sichtbares Fenster und abschreiben.
Früher ohne Alzheimer :smile: hätte es bei mir auch gereicht auch bei längeren Fehlermeldungen einfach mir die FM zu merken, Notepad zu öffnen und dann die FM aus dem Kopf hinzuschreiben und dabei halt so 2-4mal nochmal nachschauen wie das nun genau heißt.

Für hier als Info welche FM langt auch eine ungenaue FM, Schreibfehler und Auslassungen sind nicht so wichtig, Hauptsache das meiste steht drin.
Aber, was sehr oft sehr hilfreich ist, um erfolgreich nach der Fehlermeldung im Internet suchen zu können müßte sie schon genau sein.
Zumindest 1-2 Sätze.

Dafür taucht der Fehler aber immer an derselben Stelle auf,
nämlich nach der KommentarZeile "’ AUFRUFENDE DATEI unter
neuem Namen speichern

Ich nehme an da steht der SaveAs-Befehl.

Der Ordner wurde erfolgreich erzeugt ( ist auch im Explorer
sichtbar ).

Habe ich Alles im Debugger mit F8 durchgekaspert, mehrmals.
Er ( oder sie? ) will einfach nicht in den frisch angelegten
Ordner speichern. GRRRR!

Oh, danke für Info, hatte zwar schon vage sowas vermutet aber ich vermute auch noch anderes erstmal so als Ansatz wo ich bohren würde,

Baue mal bitte zwischen Ordner-Erzeugung und Dem SaveAs in den Ordner
eine Warteschleife ein.

Geht auch mit normalem Vba aber cih finde da API sleep besser.
Google mal nach
Private Declare sleep
Dann findest du leicht einen API Einzeiler. Den schreibst du
in einem beliebigen Standardmodul unter Option Explicit.

Dann kannst du in Codes an der Wartestelle einfach schreiben
Sleep 3000
(das sind dann 3 sec, Sleep erwartet die Wartezeit in Millisec)

Vielleicht reicht in der Codezeile nach dem OrdnerErzeugen auch dies aus:
DoEvents

Kombination geht natürlich auch
DoEvents
Sleep 3000

Wenn das der Fehler war/ist so ist der Grund klar, Vba ist schneller als der Festplattenzugriff. Während das BS noch versucht den Ordner anzulegen ist Vba schon dabei da was reinzuschreiben mit SaveAs was natürlich nicht geht, ergo Fehler.

  1. funktioniert die Vorlage zunächst nur in Verbindung mit
    unserer Verzeichnisstruktur

In Netztwerken kenne ich mich nicht aus.
Kann also mit
Pfad ="\ordner1/ordner2/ordner3…"
wenig anfangen und weiß nicht ob das EXAKT identisch ist mit
Pfad =„C:\ordner1/ordner2/ordner3…“

Falls dem aber so wäre so brauche ich deine Pfadstruktur die zu einem Ordner führt um den es geht überhaupt nicht.
Angenommen es ginge um Ordner3, dann schreibst du im Code
Pfad ="K:\

Dann funktioniert dein Code bei mir genauso gut.
Denn was hinter K steckt ist uninteressant.

Um das zu erreichen müssen wir beide nur etwas ähnliches tun.
In den Autostart-Ordner deines Win stellst du eine Textdatei mit der Dateiendung
.bat

Inhalt deiner .bat:
subst K: \ordner1/ordner2/ordner3

Meine .bat sieht dann so aus:
subst K: c:\test\falken

Es wäre toll, wenn Du trotzdem noch den einen oder anderen
Gedanken niederschriebest

Ich hab noch mehr Gedanken :smile:
Lass alle Select und Activate weg, auch das mit ActiveCell.
Benutze Set und With.

Select1:
Cells(ActiveCell.Row, 3).Select
ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:=Pfad

abändern in

ActiveSheet.Hyperlinks.Add Anchor:=Cells(ActiveCell.Row, 3), Address:=Pfad

Select2:
Worksheets(„alle“).Columns(3).Select

Selection.Find(What:=Angebot, After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Activate
Zeile = ActiveCell.Row

abändern in

On Error GoTo Hell
Zeile=Worksheets(„alle“).Columns(3).Selection.Find(What:=Angebot, After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Row

With:
If Worksheets(„DATEN“).Cells(6, 1) Worksheets(„DATEN“).Cells(4, 3) Then Worksheets(„DATEN“).Rows(4).ClearContents

abändern in

With Worksheets(„DATEN“)
If .Cells(6, 1) .Cells(4, 3) Then .Rows(4).ClearContents
'…
end with

Gruß
Reinhard

Hallo Reinhard,
nun hast Du den Code ja inzwischen doch ziemlich genau untersucht, vielen Dank für die Tips :smile:
Einen „Plan B“ zu haben ist immer gut, da hast Du recht

also wenn es schon 4356 gibt hätte ich keine Probleme da noch
knapp 3000 dazu zu tun.

Naja, beim FirmenNetzwerk mit mehreren unbedarften Usern muss man immer gründlich überlegen: Suchen kostet Zeit - Verwirrung noch mehr.

Können? *hüstel* müssen :smile:)

Äh, ja … sorry.

Es gibt sogar 2 verschiedene FM bei Start ohne das passende
Verzeichnis.

Finde ich schon merkwürdig, dass bei gleichen Anfangsbedingungen nach Zufall (?) 2 verschiedene Fehler kommen …

  1. "Laufzeitfehler 1004 - Unzulässige Funktion
  2. "Die Methode’Save As’ für das Objekt ‚_Workbook‘ ist
    fehlgeschlagen

Bei beiden, vor allem beid er ersten, wo, welche Zeile?

Da war ich wohl jetzt zu sparsam mit dem Posten des Codes:

’ AUFRUFENDE DATEI unter neuem Namen speichern
ActiveWorkbook.SaveAs Filename:=Pfad & „Projekt_“ & Angebot & „.xls“, FileFormat:=xlExcel8, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:=False, CreateBackup:=False

*** Frage, off topic: Warum kann man eigentlich die
MicroSoft-Fehlermeldungen nicht in die ZwischenAblage
kopieren??? ***

Warum mußt du Bill fragen *gg*. Als Workaround, mach ein Bild
des Fensters und zeig das.

Wenn ich ihn das nächste Mal sehe, tue ich das. Nervt vor Allem beim gugeln nach Fehlern.

2-4mal nochmal nachschauen wie das nun genau heißt.

Leider ist nicht Jeder so Gewissenhaft wie Du und deshalb findet man manchmal mehr Treffer für eine falsche FehlerMeldung als für die wörtlich abgeschriebene :frowning:

Dafür taucht der Fehler aber immer an derselben Stelle auf,
nämlich nach der KommentarZeile "’ AUFRUFENDE DATEI unter
neuem Namen speichern

Ich nehme an da steht der SaveAs-Befehl.

Genau ( s. o. )

Habe ich Alles im Debugger mit F8 durchgekaspert, mehrmals.
Er ( oder sie? ) will einfach nicht in den frisch angelegten
Ordner speichern. GRRRR!

Baue mal bitte zwischen Ordner-Erzeugung und Dem SaveAs in den
Ordner eine Warteschleife ein.

Habe das mehrmals im EinzelSchrittModus getestet. Hat jeweils ca. 5 Minuten gedauert - meinst Du, da bringen 3 Sekunden Warteschleife ´was?

  1. funktioniert die Vorlage zunächst nur in Verbindung mit
    unserer Verzeichnisstruktur

In Netztwerken kenne ich mich nicht aus.
Kann also mit
Pfad ="\ordner1/ordner2/ordner3…"
wenig anfangen und weiß nicht ob das EXAKT identisch ist mit
Pfad =„C:\ordner1/ordner2/ordner3…“

Geht mir genau so. Deshalb arbeite ich auch durchweg mit vollständigen Pfaden

Um das zu erreichen müssen wir beide nur etwas ähnliches tun.
In den Autostart-Ordner deines Win stellst du eine Textdatei
mit der Dateiendung
.bat
Inhalt deiner .bat: subst K: \ordner1/ordner2/ordner3

Lass alle Select und Activate weg, auch das mit ActiveCell.
Benutze Set und With.

Meistens versuche ich schon, select und activate zu eliminieren. Wenn´s dann aber nicht gleich klappt, fehlt mir oft die Geduld, den Fehler zu suchen :-S
Werde aber versuchen, den Code etwas zu vereinfachen.
Nochmals besten Dank für Deine Hilfe und schönes WE
Thomas, der morgen doch noch ein paar Stunden arbeiten muss

Schönes WE
Hallo Brille1982,
stimmt, da passt kein Thema so ganz. Aber DAS wäre schon ein Thema für „Anregungen, Lob und Kritik“:

„Warum gibt es kein Brett für Fragen nach der Abgrenzung der Bretter?“

( Habe aber auch keine Lust, da jetzt ´was zu schreiben )

Schönes WE
Thomas

Hallo Thomas,

Bei beiden, vor allem beid er ersten, wo, welche Zeile?

’ AUFRUFENDE DATEI unter neuem Namen speichern
ActiveWorkbook.SaveAs Filename:=Pfad & „Projekt_“ & Angebot &
„.xls“, FileFormat:=xlExcel8, Password:="",
WriteResPassword:="", _
ReadOnlyRecommended:=False, CreateBackup:=False

Ach, erst jetzt kapiere ich, die beiden FM kommen wenn sie kommen in/an der gleichen Codezeile.

Baue mal bitte zwischen Ordner-Erzeugung und Dem SaveAs in den
Ordner eine Warteschleife ein.

Habe das mehrmals im EinzelSchrittModus getestet. Hat jeweils
ca. 5 Minuten gedauert - meinst Du, da bringen 3 Sekunden
Warteschleife ´was?

? Soll das heißen das Ordneranlegen dauert 5 min? Das stimmt doch nicht irgendwie.

Nimm mal dieses UP:

Sub Ordner\_anlegen()
Dim T As Single, Pf As String
If KundenName = "" Then KundenName = InputBox(prompt:="Geben Sie bitte einen KundenNamen ein:", \_
Title:="Ereignisprozedur zu Open")
OrdnerName = Angebot & "\_" & KundenName
Pf = "\\server\daten$\Angebote\" & Ziffer & "\" & OrdnerName
T = Timer
MkDir Pf
While Dir(Pf, vbDirectory) = ""
 DoEvents
 sleep 200
Wend
MsgBox Pf & Chr(10) & "wurde in ca. " & Format(Timer - T, "#.00") & "sec angelegt."
End Sub

Gruß
Reinhard

*** Frage, off topic: Warum kann man eigentlich die
MicroSoft-Fehlermeldungen nicht in die ZwischenAblage
kopieren??? ***

Wenn du eine Fehlerbehandlungsroutine eingebaut hast, kannst mit Debug.Print die Err.Description und dir Err.Number in das Direktfenster schreiben. Von dort aus kannst du die Meldung bequem kopieren und anschließend bei Google einfügen.

Habe das mehrmals im EinzelSchrittModus getestet. Hat jeweils
ca. 5 Minuten gedauert - meinst Du, da bringen 3 Sekunden
Warteschleife ´was?

? Soll das heißen das Ordneranlegen dauert 5 min? Das stimmt
doch nicht irgendwie.

Er meint, dass er im Einzelschrittmodus 5 Minuten braucht, um sich „durchzuklicken“. Zwischen Ordneranlegen und Datei speichern liegen sicher einige Sekunden, weshalb das Problem sicher nicht hier ensteht.

Habe das mehrmals im EinzelSchrittModus getestet. Hat jeweils
ca. 5 Minuten gedauert - meinst Du, da bringen 3 Sekunden
Warteschleife ´was?

? Soll das heißen das Ordneranlegen dauert 5 min? Das stimmt
doch nicht irgendwie.

Er meint, dass er im Einzelschrittmodus 5 Minuten braucht, um
sich „durchzuklicken“.

auch möglich. Deutungssache, immerhin bezieht sich die obige Antwort von Thomas auf dieses von mir:
„Baue mal bitte zwischen Ordner-Erzeugung und Dem SaveAs in den Ordner
eine Warteschleife ein.“
Insofern ist mir das aus der Ferne her unklar und muß gelärt werden was da genau so lang dauert.

Zwischen Ordneranlegen und Datei
speichern liegen sicher einige Sekunden, weshalb das Problem
sicher nicht hier ensteht.

Das weiß ich nicht, deshalb will ich das ja geklärt wissen.

Immerhin ist ja grundsätzlich der Gedankengang nicht falsch daß genau an dieser Codestelle die Weiterabarbeitung des Codes durch Vba „zu“ schnell ist und es deshalb bei „Saveas“ kracht weil der Festplattenzugriff zu langsam ist.

Das würde auch die beiden unterschiedlichen Fehlermeldungen erklären.
Sie spiegeln ggfs. zwei unterschiedliche Fehlermeldungen von Win an Vba wieder die Vba erhält wenn es „SaveAs“ ausführen will.

Natürlich würde das auch erklären daß es problemlos funktioniert wenn der Ordner schon existiert.

Gruß
Reinhard

Hallo Stephan,

Zwischen Ordneranlegen und Datei
speichern liegen sicher einige Sekunden, weshalb das Problem
sicher nicht hier ensteht.

Das weiß ich nicht, deshalb will ich das ja geklärt wissen.

Immerhin ist ja grundsätzlich der Gedankengang nicht falsch
daß genau an dieser Codestelle die Weiterabarbeitung des Codes
durch Vba „zu“ schnell ist und es deshalb bei „Saveas“ kracht
weil der Festplattenzugriff zu langsam ist.

Das kann ich mir nicht vorstellen.

Ich denke eher, dass zur Laufzeit, aus welchem Grund auch immer, der Speicherpfad bzw. Dateiname einen Fehler enthält. Wenn ich die Datei vor Ort debuggen könnte, würde ich mir als erstes diesen Punkt anschauen. Ich habe z.B. schon öfter erlebt, dass VBA am Ende eines Strings & „“ vergisst. Beim Filename für SaveAs hat das dann entsprechend gefehlt und auch einen Fehler verursacht. Warum das so ist weiß ich nicht, und das Problem tritt auch nicht immer auf.

PS: Das Makro ist echt ätzend geschrieben, weshalb ich keine weiteren Versuche unternehmen werden, um den Fehler zu finden.

Genau!
Hallo Stephan
genau so war das gemeint, danke.
Freundliche Grüße
Thomas

Er meint, dass er im Einzelschrittmodus 5 Minuten braucht, um
sich „durchzuklicken“. Zwischen Ordneranlegen und Datei
speichern liegen sicher einige Sekunden, weshalb das Problem
sicher nicht hier ensteht.

Hallo Stephan,

Immerhin ist ja grundsätzlich der Gedankengang nicht falsch
daß genau an dieser Codestelle die Weiterabarbeitung des Codes
durch Vba „zu“ schnell ist und es deshalb bei „Saveas“ kracht
weil der Festplattenzugriff zu langsam ist.

Das kann ich mir nicht vorstellen.

was genau glaubst du nicht?

Wie im hiesigen Fall:

MkDir Pfad
.SaveAs…

oder allgemein

Befehl der Festplattenzugriff auslöst
Befehl der das Ergebnis des Fesplattenzugriffs benutzt

Der zweite Fall ist so daß das was ich beschrieb geschehen kann.
Kein problem Code zu schreiben wo genau dies auftritt.

Im ersteren fall auch möglich *denk*
Ich weiß wenig darüber wie Win die Ressourcen verteilt wenn da gewissermaßen gleichzeitig irgendwelche Virenscanner Vba o.ä.
auf die CPU zugreifen.
Da dies also für mich denkbar ist muß ich das halt abklären/testen.
Deshalb die neue UP die das klärt.

Ich denke eher, dass zur Laufzeit, aus welchem Grund auch
immer, der Speicherpfad bzw. Dateiname einen Fehler enthält.

Wenn alle Variablen im Code befüllt werden so kann man das erkennen.
das ist dann ein fester Fehler.
Wenn die variablen globale Variablen sind oder Zellinhalte auswerten weiß ich natürlich nicht ob da marode daten drin stehen.

Ich habe z.B. schon öfter
erlebt, dass VBA am Ende eines Strings & „“ vergisst.

Was bedeutet „vergisst“. das klingt so als würde Vba aus
Pfad =„c:\test“
zur laufzeit dann
„c:\test“
machen. das kenne ich nicht.

Beim
Filename für SaveAs hat das dann entsprechend gefehlt und auch
einen Fehler verursacht. Warum das so ist weiß ich nicht, und
das Problem tritt auch nicht immer auf.

Schad, würd gern den Code sehen wo das auftritt.

PS: Das Makro ist echt ätzend geschrieben,

Das ist nicht meine Wortwahl.

Gruß
Reinhard

Er meint, dass er im Einzelschrittmodus 5 Minuten braucht, um
sich „durchzuklicken“.

genau so war das gemeint, danke.

Hallo Thomas,

okay, dann probiere bitte aus was ich schrieb.

Übrigens, wenn du da 5 min brauchst dann versuche mal nicht nur F8 zu benutzen sondern Haltepunkte zu setzen und F5 und F8 im Wechsel zu benutzen.

Gruß
Reinhard