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

In ext. Excel schreiben - 2 Fragen

In ext. Excel schreiben - 2 Fragen
18.03.2022 09:01:11
Ronald
Hallo an alle!
Ich möchte aus meinem Excel in eine zweite Exceldatei speichern, was aber daran scheitert, die nächstfreie Zeile in diesem Excel zu ermitteln.

Option Explicit
Dim intZelleAktiveZeileSTD As Integer
Dim wkbSuppEx As Workbook
Dim wksSuppEx As Worksheet

Private Sub Supp_Stunden_Excel_oeffnen()
Dim intLetzteVolleSpalteSTD As Integer
Workbooks.Open "C:\Users\waelty\Desktop\Zwischenablage\_Ablage Service\Zeiterfassung\Supp.Stunden v. Excel\Supp.Stunden v. Excel.xlsx"
Set wkbSuppEx = Workbooks("Supp.Stunden v. Excel.xlsx")
Set wksSuppEx = wkbSuppEx.Worksheets("SuppStd")
intLetzteVolleSpalteSTD = wkbSuppEx.wksSuppEx.Cells(Rows.count, 1).End(xlUp).Row
intZelleAktiveZeileSTD = intLetzteVolleSpalteSTD + 1
End Sub
Hier kommt die Fehlermeldung: Laufzeitfehler 438 - Objekt unterstützt diese Eigenschaft nicht.
Beim Debuggen springt er auf die zweitletzte Zeile, also die mit .End(xlUp).Row.
Also ändere ich den Quelltext in dieser Zeile etwas:

Private Sub Supp_Stunden_Excel_oeffnen()
Dim intLetzteVolleSpalteSTD As Integer
Workbooks.Open "C:\Users\waelty\Desktop\Zwischenablage\_Ablage Service\Zeiterfassung\Supp.Stunden v. Excel\Supp.Stunden v. Excel.xlsx"
Set wkbSuppEx = Workbooks("Supp.Stunden v. Excel.xlsx")
Set wksSuppEx = wkbSuppEx.Worksheets("SuppStd")
intLetzteVolleSpalteSTD = wkbSuppEx("SuppStd").Cells(Rows.count, 1).End(xlUp).Row
intZelleAktiveZeileSTD = intLetzteVolleSpalteSTD + 1
End Sub
Dann kommt exakt die Fehlermeldung.
Ich habe das Gefühl, es sollte eigentlich problemlos funktionieren. Wahrscheinlich hat sich nur ein kleiner Fehler eingeschlichen, der sich von mir nicht finden läßt.
Wäre toll, wenn hier jemand einen Tip für mich hat.
Und die zweite kleine Anfrage wäre, was ich ändern muß, daß er in diese Exceldatei schreibt, ohne sie vorher zu öffnen. Ist das sehr kompliziert?
Danke im Voraus.
Gruß Ronald
PS: Gespeichert hätte ich die Einträge dann so:

Private Sub LogZeitSpeichern()
wkbSuppEx("SuppStd").Range("A" & intZelleAktiveZeileSTD).Value = CStr(Date)
wkbSuppEx("SuppStd").Range("A" & intZelleAktiveZeileSTD).VerticalAlignment = xlTop
wkbSuppEx("SuppStd").Range("A" & intZelleAktiveZeileSTD).HorizontalAlignment = xlCenter
wkbSuppEx("SuppStd").Range("B" & intZelleAktiveZeileSTD).Value = txtSupportNr.Text
wkbSuppEx("SuppStd").Range("B" & intZelleAktiveZeileSTD).VerticalAlignment = xlTop
wkbSuppEx("SuppStd").Range("B" & intZelleAktiveZeileSTD).HorizontalAlignment = xlCenter
'usw
End Sub
Ob dies so funktionieren würde, konnte ich wegen obigem Fehler noch nicht testen.

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: In ext. Excel schreiben - 2 Fragen
18.03.2022 09:33:34
Oberschlumpf
Hi Ronald,
versuch es mal mit dieser Codezeile

intLetzteVolleSpalteSTD = wkbSuppEx.wksSuppEx.Cells(wkbSuppEx.wksSuppEx.Rows.count, 1).End(xlUp).Row
das vorherige Rows.Count bezog sich auf das aktuell gezeigte Tabellenblatt - zum Zeitpunkt des Fehlers.
Am saubersten ist es immer, wenn Cells Rows usw immer klar referenziert werden; also genau angegeben wird, auf welche Tabelle sich Cells, Row, usw beziehen.
Hilfts?
Wenn ein, zeig per Upload eine Bsp-Datei mit Bsp-Daten, deinem Code und natürlich dem zu korrigierenden Fehler.
Ciao
Thorsten
Anzeige
AW: In ext. Excel schreiben - 2 Fragen
18.03.2022 09:35:43
Rudi
Hallo,

intLetzteVolleSpalteSTD = wksSuppEx.Cells(Rows.count, 1).End(xlUp).Row
sollte funktionieren.
Die Var. solltest du aber als LONG definieren.
Die Speicherung dann mit
wksSuppEx.Range(....) = ...
Gruß
Rudi
AW: In ext. Excel schreiben - 2 Fragen
18.03.2022 09:45:03
Ronald
Super, dieser Vorschlag hat funktioniert:

intLetzteVolleSpalteSTD = wksSuppEx.Cells(Rows.count, 1).End(xlUp).Row
Beim Speichern habe ich entsprechend abändern müssen:
Statt...

Private Sub LogZeitSpeichern()
wkbSuppEx("SuppStd").Range("A" & intZelleAktiveZeileSTD).Value = CStr(Date)
wkbSuppEx("SuppStd").Range("A" & intZelleAktiveZeileSTD).VerticalAlignment = xlTop
wkbSuppEx("SuppStd").Range("A" & intZelleAktiveZeileSTD).HorizontalAlignment = xlCenter
wkbSuppEx("SuppStd").Range("B" & intZelleAktiveZeileSTD).Value = txtSupportNr.Text
wkbSuppEx("SuppStd").Range("B" & intZelleAktiveZeileSTD).VerticalAlignment = xlTop
wkbSuppEx("SuppStd").Range("B" & intZelleAktiveZeileSTD).HorizontalAlignment = xlCenter
'usw
End Sub
hab ich jetzt:

Private Sub LogZeitSpeichern()
wksSuppEx.Range("A" & intZelleAktiveZeileSTD).Value = CStr(Date)
wksSuppEx.Range("A" & intZelleAktiveZeileSTD).VerticalAlignment = xlTop
wksSuppEx.Range("A" & intZelleAktiveZeileSTD).HorizontalAlignment = xlCenter
wksSuppEx.Range("B" & intZelleAktiveZeileSTD).Value = txtSupportNr.Text
wksSuppEx.Range("B" & intZelleAktiveZeileSTD).VerticalAlignment = xlTop
wksSuppEx.Range("B" & intZelleAktiveZeileSTD).HorizontalAlignment = xlCenter
'usw
End Sub
Vielen Dank Euch !!
Welche Möglichkeit gäbe es nun noch, um in diese Datei zu speichern, ohne daß sie geöffnet wird? Sind das nur Parameter, die man übergibt oder ist es nicht so trivial?
Danke im Voraus.
Gruß Ronald
Anzeige
du kannst in eine ...
18.03.2022 09:47:36
Rudi
...geschlossene Datei nicht schreiben.
Gruß
Rudi
AW: du kannst in eine ...
18.03.2022 09:50:02
Ronald
Dann also invisible öffnen, speichern, schließen. Aber nagt dies denn nicht an der Performance?
Dann stellt sich mir also die Frage, wie man eine Datei invisible öffnen kann.
AW: du kannst in eine ...
18.03.2022 10:24:51
Oberschlumpf
Hi Ronald,
wieso is es denn sooo wichtig, eine Datei "unsichtbar" zu öffnen?
Mach aus deinem Code (die Datei darf natürlich noch nicht geschlossen sein!)...

Private Sub LogZeitSpeichern()
wkbSuppEx("SuppStd").Range("A" & intZelleAktiveZeileSTD).Value = CStr(Date)
wkbSuppEx("SuppStd").Range("A" & intZelleAktiveZeileSTD).VerticalAlignment = xlTop
wkbSuppEx("SuppStd").Range("A" & intZelleAktiveZeileSTD).HorizontalAlignment = xlCenter
wkbSuppEx("SuppStd").Range("B" & intZelleAktiveZeileSTD).Value = txtSupportNr.Text
wkbSuppEx("SuppStd").Range("B" & intZelleAktiveZeileSTD).VerticalAlignment = xlTop
wkbSuppEx("SuppStd").Range("B" & intZelleAktiveZeileSTD).HorizontalAlignment = xlCenter
'usw
End Sub
...das hier...

Private Sub LogZeitSpeichern()
With wkbSuppEx("SuppStd")
.Range("A" & intZelleAktiveZeileSTD).Value = CStr(Date)
.Range("A" & intZelleAktiveZeileSTD).VerticalAlignment = xlTop
.Range("A" & intZelleAktiveZeileSTD).HorizontalAlignment = xlCenter
.Range("B" & intZelleAktiveZeileSTD).Value = txtSupportNr.Text
.Range("B" & intZelleAktiveZeileSTD).VerticalAlignment = xlTop
.Range("B" & intZelleAktiveZeileSTD).HorizontalAlignment = xlCenter
'usw
.Close True 'nach usw., also allen Einträgen in wkbSuppEx("SuppStd") wird genau die Datei erst gespeichert (True) und dann geschlossen (Close)
End With
End Sub
Ciao
Thorsten
Anzeige
wkbSuppEx("SuppStd") ?
18.03.2022 10:30:48
Rudi
funktioniert nie.
Wenn dann wkbSuppEx.Worksheets("SuppStd")
Gruß
Rudi
AW: wkbSuppEx("SuppStd") ?
18.03.2022 10:54:08
Oberschlumpf
ups, recht haste, sorry, da war ich zu stümperhaft...also Ronald...du müsstest meinen Code mit der Korrektur von Rudi anpassen
AW: wkbSuppEx("SuppStd") ?
18.03.2022 11:08:35
Ronald
Es hat alles sauber funktioniert. Bis auf das Speichern und Schließen. Momentan sieht es so aus:

Private Sub LogZeitSpeichern()
With wkbSuppEx.Worksheets("SuppStd")
.Range("A" & intZelleAktiveZeileSTD).Value = CStr(Date)
.Range("A" & intZelleAktiveZeileSTD).VerticalAlignment = xlTop
.Range("A" & intZelleAktiveZeileSTD).HorizontalAlignment = xlCenter
'...usw
.Range("I" & intZelleAktiveZeileSTD).Value = CStr(dteStopZeit)
.Range("I" & intZelleAktiveZeileSTD).VerticalAlignment = xlTop
'.Range("I" & intZelleAktiveZeileSTD).HorizontalAlignment = xlCenter´
.Close True
End With
End Sub
Beim Debuggen sprang der Fokus (gelbe Markierung) auf Close True. Fehlermeldung war dieselbe wie anfangs: Objekt unterstützt dies nicht. Laufzeit-Error 438.
Ich habs nun so:

.Range("I" & intZelleAktiveZeileSTD).Value = CStr(dteStopZeit)
.Range("I" & intZelleAktiveZeileSTD).VerticalAlignment = xlTop
'.Range("I" & intZelleAktiveZeileSTD).HorizontalAlignment = xlCenter´
End With
wkbSuppEx.Close SaveChanges:=True
End Sub
Damit funktioniert es prächtig. Es öffnet, speichert und schließt grad wieder. Das geht so fix, daß es gar nicht nötig ist, es versteckt zu öffnen.
Vielen Dank Euch beiden für Eure guten Tips!
Gruß Ronald
Anzeige
AW: wkbSuppEx("SuppStd") ?
18.03.2022 15:16:53
Luschi
Hallo Ronald,
so klappt es auch:

Private Sub LogZeitSpeichern()
With wkbSuppEx.Worksheets("SuppStd")
.Parent.Close True
End With
Gruß von Luschi
aus klein-Paris

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige