Automatisches Abspeichern ActiveWorkbook.SaveAs

Hallo VBA’ler!

Folgendes Problem: Ich lade Daten aus einer Word-VBA UserForm in eine vorgefertigte Excel-Datei. Dies geht auch alles.

Nachdem die Daten an die vorgesehenen Stellen geschrieben wurden, soll die Excel Datei automatisch unter einem bestimmten Namen abgespeichert werden. Dies habe ich folgendermaßen gemacht:

d.h.

Sub Speichern()
Dateiname = tbName & "Daten.xlsx
ChDir „C:“
ActiveWorkbook.SaveAs FileName:= „C:\Users“ & Dateiname, _
FileFormat:= 51
End Sub

Problem: Wenn ich keine andere ExcelDatei offen habe, funktioniert das wunderbar!!
Nur sobald eben eine andere Excel-Datei offen ist - bringt er mir Laufzeitfehler 91: Objektvariable oder With-Blockvariable nicht festgelegt
und markiert die Zeile mit ActiveWorkbook…
Er schreibt die Daten zwar rein - speichert aber nichts ab und bricht ab! Die Excel-Datei ist geschlossen, wird automatisch geöffnet und abgespeichert (Wenn keine andere offen ist…) - so sollte es zumindest laufen!

Könnt ihr mir helfen?? Wäre super! Dankeschöön!
Greetz heiks

Hallo,

ändere doch einfach „activeworkbook“ in „thisworkbook“

Gruß
Ronny

achso
die Zeile

ChDir „C:“

kannst Du dir denke ich sparen.

Gruß
Ronny

Hallo Ronny,

ändere doch einfach „activeworkbook“ in „thisworkbook“

–> geht leider nicht, er bringt laufzeitfehler 1004:
Die Methode ‚ThisWorkBook‘ für das Objekt ‚_Global‘ ist fehlgeschlagen…

aber den ansatz finde ich ganz gut.
Ich hab mir gedacht ob es möglich wäre, ActiveWorkbook eine bestimmte Datei zuzuweisen, sodass er nicht „verwirrt“ wird durch andere geöffnete Dateien und weiß: ActiveWorkbook = „C:\Users\Datei.xlsx“

hab das schon versucht mit:
ActiveWorkbook.Path „C:\Users\Datei.xlsx“
…geht aber leider auch nicht!

Danke für euere Hilfe schonmal! Ihr würdet mir echt riesig weiterhelfen!!

greetz heiks

Hatte es vorhin bei mir (Excel2007) mal getestet und es hat funktioniert.

Was mich aber wundert: Wo kommt denn das Objekt ‚_Global‘ her ???

Da Du keine Variablen-Definition in Deiner sub hast vermute ich mal Du verwendest globale Variablen. Poste die mal (Wozu brauchst Du eigentlich was globales, wenn’s nur um’s speichern geht?).

Da ich noch nicht weis ob ich dieses Wochenende an einem PC sitze kann Dir keine weitere Antwort vor nächstem Montag garantieren.

Gruß
Ronny

Hallo Heiks,

ändere doch einfach „activeworkbook“ in „thisworkbook“

–> geht leider nicht, er bringt laufzeitfehler 1004:
Die Methode ‚ThisWorkBook‘ für das Objekt ‚_Global‘ ist
fehlgeschlagen…

„_Global“ irritiert mich auch. Wenn dann zeige uns bitte den relevanten Code.
Und teste ihn vorher. Es geht nicht darum ob er einen Fehler bringt oder nicht, es geht darum daß bei deiner Anfrage z.B. Gänsefüßchen fehlen und das hätte der Debugger sofort bemeckert und den Code gar nicht gestartet.

(mal weglassend daß bestimmte Gänsefüßchen der Debugger von selbst aus einfügt.)

Und benutze bitte Option Explicit. (Extras—Optionen—[X]Variablendeklaration erforderlich)

Thisworkbook ist eindeutig, da verwirrt nix.

Gruß
Reinhard

Hallo Reinhard,

Danke dass du wieder einspringst! Finde ich echt super von dir!
Dieses Problem läuft unter dem gleichem Programm, wo du mir schon die Lösung für das Einfügen in Excel aus Word-VBA gezeigt hast vor ein paar tagen…

Jetzt habe ich das ganze eben noch soweit erweitert, dass diese daten auch automatisch abgespeichert werden - eben unter der prozedur die ich anfangs gepostet habe!
Zu deinem post:

er bringt laufzeitfehler 1004:
Die Methode ‚ThisWorkBook‘ für das Objekt ‚_Global‘ ist
fehlgeschlagen…

„_Global“ irritiert mich auch. Wenn dann zeige uns bitte den
relevanten Code.
Und teste ihn vorher. Es geht nicht darum ob er einen Fehler
bringt oder nicht, es geht darum daß bei deiner Anfrage z.B.
Gänsefüßchen fehlen und das hätte der Debugger sofort
bemeckert und den Code gar nicht gestartet.

Ich weiß, dies ist sehr komisch - vor allem weil ich kein Objekt „_Global“ habe…

(mal weglassend daß bestimmte Gänsefüßchen der Debugger von
selbst aus einfügt.)

Und benutze bitte Option Explicit.
(Extras—Optionen—[X]Variablendeklaration erforderlich)

Thisworkbook ist eindeutig, da verwirrt nix.

Denk ich mir - habe auch option explicit gemacht…
Wie gesagt, code sieht eben so aus:

Sub ExcelSpeichern()
Dim Datum, Tag, Monat, Jahr, Dateiname As String

Tag = Format(Day(Date), „00“)
Monat = Format(Month(Date), „00“)
Jahr = Format(Year(Date), „0000“)
Datum = Jahr & Monat & Tag & „_“
Dateiname = Datum & „_“ & tbNachname & „_“ & „Eingabedaten.xlsx“
ChDir „C:“
ThisWorkbook.SaveAs FileName:=„C:\Users“ & Dateiname, _
FileFormat:=51

End Sub

dann noch diesen hier:
Option Explicit
Public objXL As Object

'Öffnet die Datei „Eingabe Daten.xlsx“ zum Einfügen der Daten aus dem Eingabeformular
Sub ExcelStarten()
On Error Resume Next
Set objXL = GetObject(, „Excel.Application“)
If Err.Number 0 Then
Err.Clear
Set objXL = CreateObject(„Excel.Application“)
End If
On Error GoTo 0
End Sub

wie gesagt - komisch ist ja, er macht alles was ich will, wenn eben keine excel datei geöffnet ist.
nur wenn eine andere bereits geöffnet ist, bricht mir das programm ab…

Daaaanke schonmal! Super von dir Reinhard!!
greetz heiks

Trotzdem Danke für deine Mühen!

Weiter bei Beitrag von Reinhard… :wink:

Hallo Heiks,

„_Global“ irritiert mich auch. Wenn dann zeige uns bitte den
relevanten Code.
Und teste ihn vorher. Es geht nicht darum ob er einen Fehler
bringt oder nicht, es geht darum daß bei deiner Anfrage z.B.
Gänsefüßchen fehlen und das hätte der Debugger sofort
bemeckert und den Code gar nicht gestartet.

Ich weiß, dies ist sehr komisch - vor allem weil ich kein
Objekt „_Global“ habe…

lade mal bitte mit file-upload s. FAQ:2606 eine Mappe mit dem Codes von dir hoch.

Und benutze bitte Option Explicit.

Denk ich mir - habe auch option explicit gemacht…
Sub ExcelSpeichern()
Dim Datum, Tag, Monat, Jahr, Dateiname As String

Jede Variable braucht in eigenes „As“.

Probiers mal so:

Sub ExcelSpeichern()
Dim strDatum As String, strDateiname As String
strDatum = Format(Date, „yyyymmdd“ & „_“)
strDateiname = strDatum & tbNachname & „_“ & „Eingabedaten.xlsx“
ThisWorkbook.SaveAs Filename:=„C:\Users“ & strDateiname, FileFormat:=51
End Sub

Was/wer ist „tbNachname“, ein String?

Bei Fileformat 51 muß ich erst schauen was das ist.
Irgendwie hilft mir das alles nix bei der Fehlermeldung mit „_Global“.

Aber zeig mal eine mappe wo das auftritt.

Gruß
Reinhard