Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1856to1860
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
Werte autom. in neue Liste übergeben
24.11.2021 12:47:38
Andreas
Hi zusammen,
brauche bitte eure Hilfe, komme alleine leider nicht mehr weiter.
Hab eine Basisdatei: https://www.herber.de/bbs/user/149357.xlsm
Diese liegt in meinem Verzeichnis: C:\Users\andreas\Desktop\Test neu
In der Datei muss in C1 eine Nummer vergeben werden, C22-C28 wird mit Formeln gefüllt.
Wenn man das Makro auslöst, wird die Datei mit neuem Namen (die in C1 vergebene Nummer) gespeichert.
Ist es Möglich, dass in dem Moment wo gespeichert wird,
die Werte aus C22-C28 in eine Übersichts-Datei übertragen werden?
Also immer, wenn eine neue Nummer vergeben- und eine neue Datei erzeugt wird,
die Werte in die nächste freie Zeile meiner Übersichtsdatei aufgeführt werden?
https://www.herber.de/bbs/user/149358.xlsx
Diese Datei liegt hier: C:\Users\andreas\Desktop\Test neu\Übersicht
Falls jemand helfen kann, schon Mal vielen Dank vorab.
Gruß Andreas

16
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Werte autom. in neue Liste übergeben
24.11.2021 17:22:26
Yal
Hallo Andreas,
was da passieren soll, wird beim Ereignis "Workbook_BeforeSave" abgefangen.
_VB-Editor öffnen
_ Im Projekt-Explorer links auf "DieseArbeitsmappe" doppelklicken
_ im Auswahlfenster direkt über der Code-Fenster, da wo "<Allgemein>" steht, "Workbook" auswählen,
_ im Auswahlfenster rechts davon, wo jetzt "Open" steht, "BeforeSave" auswählen
_ in der Ereignisprozedure "Workbook_BeforeSave" den gewünschte Code reinbringen
VG
Yal
AW: Werte autom. in neue Liste übergeben
25.11.2021 08:12:45
Andreas
Guten Morgen Yal,
besten Dank für deine Rückmeldung.
Habe nur das Problem, dass ich nicht weiß wie ich den Code schreiben soll.
Kannst du/jemand anderes mir dazu ein Beispiel machen?
Meine VBA-Kenntnisse sind leider sehr bescheiden.
Hoffe es kann jemand helfen.
Gruß Andreas
Anzeige
AW: Werte autom. in neue Liste übergeben
25.11.2021 09:08:29
Yal
Hallo Andreas,
dann wird Zeit für die erste Stufe: Makro Rekorder.
Du machst es sichtbar, in dem Du den Menüpunkt "Entwicklertools" sichtbar macht (Rechtsklick auf Menü, Menüband anpassen ...)
Dort ist der Makro Rekorder, steht hinter "Makro aufzeichen": drauf drücken, machen, aufzeichnung stoppen, Code anschauen.
Achtung: nicht 20 Aktionen aufnehmen, sondern nur 1 oder 2. Das aufgenommen Code ist meist ausführlich und Du kannst nicht mehr den Zuammenhang zwischen Aktion und Code machen.
Du willst die Zelle C22:C28 markieren, kopieren, irgendwo ander pasten? Aufzeichnung starten, machen, stoppen, Code anschauen.
Du willst die Datei mit einem neuen Namen speichern? Aufzeichnung starten, machen, stoppen, Code anschauen.
Dann musst Du noch rausfinden, wie man die Wert einer Zelle auslist, eine Variable ändert und das alles in einer Ereignis-Prozedur "Worksheet_Change": Das gleich wie bei "DieseArbeitsmappe" aber auf dem betroffenen Blatt doppelklicken.
Sieht dann so aus:

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("C1")) Is Nothing Then
'...Dein Code hier
End If
End Sub
Viel Erfolg
Yal
Anzeige
AW: Werte autom. in neue Liste übergeben
25.11.2021 10:10:06
Andreas
Hi Yal,
Danke für deine Unterstützung.
Hab das mit dem Makrorekorder versucht, und es hat sogar geklappt =D, Danke. Das Makro überträgt die kopierten Daten in die Mappe Übersicht.
Den Code zum speichern und den damit die kopierten Werte in eine neue Zeile eingefügt werden hatte ich schon.
Weiß jetzt nur nicht, wie ich diese 3 Codes kombinieren kann.
Vielleicht kannst du mir sagen wie das geht? Die Codes befinden sich alle in der Datei, aus der ausgelesen werden soll.
Die heißen Modul 1, 2 und 3? Das sind wirklich blöde Namen... kann man die nicht ändern =D ?
https://www.herber.de/bbs/user/149385.xlsm Daten auslesen
https://www.herber.de/bbs/user/149384.xlsx Daten einfügen
Vielen Dank vorab
Gruß Andreas
Anzeige
wegen umbenennen...
25.11.2021 10:18:57
Pierre
Hallo Andreas,
Im VBA-Fenster F4 drücken, dann öffnet sich links ein Fenster "Eigenschaften". Dort wo dann Modul1, 2, 3 steht, kannst du einen (nicht ganz) beliebigen Namen eintragen.
Bei mir meckerts immer, wenn Name zu lang oder Leerzeichen verwendet werden.
Beim Rest lasse ich Yal gerne den Vortritt ;-)
Gruß Pierre
AW: Werte autom. in neue Liste übergeben
25.11.2021 15:13:38
Yal
Hallo Zusammen,
@Pierre: kannst Du ruhig übernehmen.
@Andreas: eigentlich alles zusammen in einem Modul. Dann kannst Du die beiden anderen Modul löschen.
Danach ist die Frage in welche Reihenfolge es erfolgen soll. Ich habe es nicht durchgeschaut.
Aus 2 Subs machst Du eine, wenn Du das "End Sub" der erste und "Sub xy()" vom zweiten löscht.

Sub Aktion1 ()
End Sub ' Ende 1
Sub Aktion2 () 'Anfang 2
End Sub
Dein gesamten Code:

Dim sSF_Name$, sFrage$, sZielOrdner$
Public Const sKey = ""
Const sPfadErledigt As String = "C:\Users\andreas\Desktop\Test neu\"
Sub SpeichernIn()
Dim sPfad$
On Error Resume Next 'Nur SaveAs kann eine Fehler verursachen. Da danach nichts ist, ist "Next" = Ende
sPfad = sPfadErledigt & "K " & Worksheets("Tabelle1").Range("C1") & ".xlsm"
ActiveWorkbook.SaveAs Filename:=sPfad, FileFormat:=xlOpenXMLWorkbookMacroEnabled
End Sub
Private Sub CommandButton1_Click()
Dim letzte As Long
'In Spalte 23 ("W") die erste freie Zelle von unten kommend ermitteln
With Worksheets("Übersicht")
letzte = .Cells(Rows.Count, 23).End(xlUp).Row + 1
.Cells(letzte, 2).Resize(1, 4) = Application.Transpose(Range("F23:L23").Value)
End With
End Sub
Sub Übertragen()
' Übertragen Makro
ThisWorkbook.Worksheets("Tabelle1").Range("F23:L23").Copy
Workbooks("Übersicht.xlsx").Worksheets("Übersicht").Range("A2").PasteSpecial _
Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
'    Windows("K 100333.xlsm").Activate
End Sub
VG
Yal
Anzeige
AW: Werte autom. in neue Liste übergeben
25.11.2021 15:57:34
Andreas
Hi Yal,
Danke fürs zusammenstecken :)
Hab ein Problem, die Werte werden nicht in die Datei Übersicht übertragen.
Kann das sein, dass mir da noch irgendwo der Dateipfad fehlt, der ihm sagt wo er diese Datei finden kann?
Weiß sonst leider nicht woran es liegen könnte, bekomme nämlich keine Fehlermeldung beim ausführen des Codes.
Hoffe du weißt weiter?
Gruß Andreas
AW: Werte autom. in neue Liste übergeben
25.11.2021 19:15:35
Yal
Hallo Andreas,
dann so:

'unter Anbindung von Bibliothek "Microsoft Scripting Runtime":
'Extras, Verweise..., Hacken bei "Microsoft Scripting Runtime"
Dim FSO As New FileSystemObject
Const sPfadErledigt As String = "C:\Users\andreas\Desktop\Test neu\"
Const DateinamenMuster = " K xxx.xlsm"
Private Sub CommandButton1_Click()
Dim Datei As File
'1. Prüfen, dass der Pfad gültig ist
'2. Prüfen, ob Dateinumemr gültig ist
'3. Prüfen ob Datei bereit existiert
'4. Daten übertragen
'5. Datein Speichern
'1.
If Pfad_prüfen(sPfadErledigt) Is Nothing Then
MsgBox "Verzeichnis """ & sPfadErledigt & """ nichtvorhadne oder nicht gefunden.", vbExclamation
Exit Sub
End If
'2.
If Worksheets("Tabelle1").Range("C1").Value = "" Or Not IsNumeric(Worksheets("Tabelle1").Range("C1").Value) Then
MsgBox "Nummer """ & Worksheets("Tabelle1").Range("C1").Value & """ ist für diese Datei nicht gültig.", vbExclamation
Exit Sub
End If
'3
Set Datei = Datei_prüfen(sPfadErledigt & Replace(DateinamenMuster, "xxx", Worksheets("Tabelle1").Range("C1").Value))
If Not Datei Is Nothing Then
If MsgBox("Datei """ & Datei.ShortPath & """ existiert bereits. " & vbCr & vbCr & "Überschreiben?", vbYesNo + vbQuestion)  vbYes Then
Exit Sub
End If
End If
'4.
ThisWorkbook.Worksheets("Tabelle1").Range("F23:L23").Copy
Workbooks("Übersicht.xlsx").Worksheets("Übersicht").Range("A2").PasteSpecial _
Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
'5.
ThisWorkbook.SaveAs Datei.Path, xlOpenXMLWorkbookMacroEnabled
'    ThisWorkbook.Close
End Sub
Function Pfad_prüfen(Pfad As String) As Folder
'gibt einen Folder-Objekt zurück, wenn Pfad vorhanden, sonst Nothing
On Error Resume Next
Set Pfad_prüfen = FSO.GetFolder(Pfad)
End Function
Function Datei_prüfen(Pfad As String) As File
'gibt einen File-Objekt zurück, wenn Pfad vorhanden, sonst Nothing
On Error Resume Next
Set Datei_prüfen = FSO.GetFile(Pfad)
End Function
VG
Yal
Anzeige
AW: Werte autom. in neue Liste übergeben
26.11.2021 09:01:59
Andreas
Guten Morgen Yal,
vielen Dank für deine Mühe, hab's natürlich gleich ausprobiert =)
Microsoft Scripting Runtime ist aktiviert, er bringt dann aber folgende Fehlermeldung zu diesem Punkt:
'5. ThisWorkbook.SaveAs Datei.Path, xlOpenXMLWorkbookMacroEnabled
' ThisWorkbook.Close
Fehlermeldung: Laufzeitfehler '91':
Objektvariable oder With-Blockvariable nicht festgelegt.
Hab die Zeile dann gelöscht, dann kommt keine Fehlermeldung mehr.
Der Übertrag funktioniert dann auch, aber es wird immer die aktuelle Zeile in der Übersichtsdatei überschrieben anstelle,
dass die Werte in eine neue Zeile kopiert werden.
Liegt vielleicht daran, dass die Datei jetzt nicht abgespeichert wird?
Kannst du mir sagen wie ich die Fehlermeldung beheben kann?
Hab schon gegoogelt verstehe aber nur Bahnhof =(
Gruß Andreas
Anzeige
AW: Werte autom. in neue Liste übergeben
26.11.2021 09:48:49
Yal
Hallo Hannes,
es gibt zwei Typ von Variable: die einfache, normale Variablen und die Objekte.
Einfache Variablen haben Wert wie Zahl (integer, long, double) oder Zeichenkette (string).
Dagegen enthalten Objekt-Variable nicht das Objekt selbst, sondern eine Adresse, wo dieses Objekt im Speicher zu lesen sei. Man spricht von "Zeiger" (engl. Pointer). Deswegen immer diesen "Set" bevor das setzen der Variable. So überträgt man die Adresse des Objektes. Zeigt diese Variable auf keine gültigen Objekt, ist der Inhalt "Nothing".
Somit entdecke ich meine Denkfehler: bei der Prüfung in 3 frage ich, ob Datei vorhanden ist. Wenn nicht, bleibt die Variable Datei auf "Nothing". Und dementsprechend gibt es keine gültigen Eigenschaft "Datei.Path", was eine Pfadangabe inkl. Dateiname sein sollte (Typ String).
Füge in Deklarationsbereich (also direkt nach Dim FSO as ..) eine neue Variable
Dim DateiPfad as String
Im Punkt 3 vor dem
Set Datei = Datei_prüfen(...
einen
DateiPfad = sPfadErledigt & Replace(DateinamenMuster, "xxx", Worksheets("Tabelle1").Range("C1").Value)
Dementsprechend kannst Du jetzt auch die Prüfung so gestalten:
Set Datei = Datei_prüfen(DateiPfad)
Und dann in 5
ThisWorkbook.SaveAs DateiPfad, xlOpenXMLWorkbookMacroEnabled
Voilà
VG
Yal
Anzeige
AW: Werte autom. in neue Liste übergeben
26.11.2021 10:44:26
Andreas
Hey Yal,
Danke für deine Geduld und deine Unterstützung.
Das hat funktioniert :) https://www.herber.de/bbs/user/149409.xlsm
Es wird eine neue Datei erzeugt und die Werte werden in die Übersichtsdatei übergeben.
2 Problemchen hab ich aber noch.
Die Werte werden immer in Zeile 2 geschrieben.
Eigentlich sollen die ja aber immer in die nächste freie Zeile kopiert werden.
Außerdem werden die Werte nur übertragen, wenn die Datei "Übersicht" geöffnet ist. Geht das nicht auch ohne?
Vielen Dank vorab
Gruß Andreas
Anzeige
AW: Werte autom. in neue Liste übergeben
26.11.2021 13:17:43
Yal
Hallo Andreas,
da könnten jetzt dein neu erworbenes Wissen über VBA zur Einsatz kommen: was muss man tun um die beiden Problem zu lösen?
Nicht in Zeile 2 sondern in die erst freien Zeile:
Workbooks("Übersicht.xlsx").Worksheets("Übersicht").Range("A99999").end(xlup).offset(1,0).PasteSpecial _
Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Nur wenn "Übersicht" offen ist? Ja, Excel schreibt ungern in einer geschlossenen Datei.
Da müsste/könnte man eine Prüfung einbauen, ist die Datei offen, wenn nein öffnen.
VG
Yal
AW: Werte autom. in neue Liste übergeben
26.11.2021 14:42:42
Andreas
Ein riesiges Danke Yal.
Es funktioniert =D
Die Datei speichert mit neuem Namen ab, die Übersichtsdatei wird in der immer nächsten freien Zeile befüllt.
Vielen vielen Dank =)
Falls du noch Lust hast, ich hab immer noch das Problem mit der Übersichtsdatei (excel schreibt nur wenn sie offen ist).
Hab also einfach mal versucht mit dem Makrorecorder ein Makro zu schreiben, welches die Datei automatisch öffnet, sobald die erste Eingabe in meiner Standartdatei in E4 gemacht wird. Das Feld muss nämlich immer befüllt werden.
Raus dabei kam das:

Sub ÜBersichöffnen()
' ÜBersichöffnen Makro
ActiveCell.FormulaR1C1 = "XXXXXXXX"                 'Hab hier x reingemacht, weil die Eingabe verschieden sein kann
Range("E4").Select
End Sub

Sub Übersichtöffnen()
' Übersichtöffnen Makro
Range("E3").Select
ActiveCell.FormulaR1C1 = "XXXXXXXX"                 'Hab hier x reingemacht, weil die Eingabe verschieden sein kann
Range("E4").Select
ActiveWindow.SmallScroll Down:=-15
Windows("Vorlage.xlsm").Activate
End Sub
Aber irgendwas mache ich schon wieder falsch, den die Datei wird nicht geöffnet.
Gruß Andreas
Anzeige
AW: Werte autom. in neue Liste übergeben
26.11.2021 15:36:12
Yal
Hallo Andreas,
bedenke, dass bei
a = b
die Variable a den Wert b oder den Wert, der von der Function b zurückgegebene Wert annimmt, spricht, wenn
ActiveCell.FormulaR1C1 = "abcd"
bedeutet, dass die aktive Zelle den Wert "abcd" annimmt.
Du willst vielleicht eher der Inhalt der Zelle lesen?
Den Rest gebe ich Dir als Forschungsaufgabe. Hier die Funktion, die prüft, ob eine Workbook offen ist und falls ja einen Zeigen auf diesem Workbook setzt ("Set").
Schaue Dir, was wir im bisherigen Code haben und überlege, was anstelle diesen auskommentierten Punkte kommen soll.
Dazu eine Test-Sub und eine Spiel-Sub. Schaue, was diese Debug.Print macht. Schaue Dir auch das Thema Lokalfenster und Schrittmodus an.

Function IstWB_offen(WBTeilname As String) As Workbook
Dim W As Workbook
For Each W In Workbooks
If InStr(1, W.Name, WBTeilname) Then
Exit Function
End If
Next
End Function
Sub Test()
Dim W As Workbook
Set W = IstWB_offen("149")
If Not W Is Nothing Then Debug.Print W.Name
End Sub
Sub Workbooks_auflisten()
Dim W As Workbook
For Each W In Workbooks
Debug.Print W.Name
Next
End Sub
VG
Yal
AW: Werte autom. in neue Liste übergeben
26.11.2021 15:43:03
Andreas
Hi Yal,
bei dir lerne ich noch richtig was =D
"Du willst vielleicht eher der Inhalt der Zelle lesen?"
Nein eigentlich will ich nur, dass er das Workbook "Übersicht" öffnet sobald in meiner Vorlagedatei E4 befüllt wird, was da drinnen steht ist Wurscht.
Werde mich jetzt auf jeden Fall mal mit deiner Aufgabe versuchen : )
Gruß Andreas
AW: Werte autom. in neue Liste übergeben
26.11.2021 16:54:11
Yal
Dann müsstest Du diese "Übersicht"-Datei schliessen und unter Makro Rekorder es wieder öffnen.
Nur so bekommst Du vom Marko Rekorder den Code wie man eine Datei öffnet.
VG
Yal

256 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige