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

Daten automatisch übertragen

Daten automatisch übertragen
Heike
Hallo Excel-Freunde
folgende Aufgabe wurde mir gestellt:
Das Formular.xltm wird ausgefüllt und beim Schließen sollen die Daten in eine andere Arbeitsmappe mit dem Namen Liste.xlsx in die nächste leere Zeile geschrieben werden. Danach soll die Liste.xlsx automatisch gespeichert und geschlossen werden. Die Daten sollen rein als Wert (ohne Formeln) übertragen werden und Excel soll natürlich prüfen, ob die Liste.xlsx evtl. schon geöffnet ist. Weiterhin soll das Makro natürlich nur in der XLTM vorhanden sein, beim Speichern und Schließen des ausgefüllten Formulars soll das Makro gelöscht werden.
Ich habe wirklich stundenlang recherchiert, da dieses Thema nicht neu ist. Irgendwie habe ich mir was zusammengesucht aber es klappt nicht. Schon das Öffnen funktioniert nicht. Nur wenn ich in der VBA-Umgebung mit F5 teste, klappt es.
Wäre super toll, wenn sich jemand meiner annehmen könnte :-)
Vielen vielen Dank
Liebe Grüße
Heike
https://www.herber.de/bbs/user/72949.xls
das Formular, kann ich hier leider nicht in XLTM einstellen. Hach ist das alles kompliziert! :-(
https://www.herber.de/bbs/user/72950.xlsx
die Liste
AW: Daten automatisch übertragen
07.01.2011 10:00:27
GERWAS
Hallo
du muß deine macros in das Modul der arbeitsmappe kopieren nicht in das tabellenblatt modul!
hier die etwas angepasst version, funktioniert bei mir!
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim iRow As Integer
Dim chkStr As String
Dim wksSource As Object, wksTarget As Object
Set wksSource = ThisWorkbook.Worksheets("Maske2")
Set wksTarget = Workbooks("72950.xlsx").Worksheets(1)
iRow = wksTarget.Cells(Rows.Count, 1).End(xlUp).Row + 1
wksTarget.Cells(iRow, 3).Value = wksSource.Range("B4").Value  'Name
wksTarget.Cells(iRow, 4).Value = wksSource.Range("E4").Value  'Vorname
wksTarget.Cells(iRow, 5).Value = wksSource.Range("B9").Value  'Straße
wksTarget.Cells(iRow, 6).Value = wksSource.Range("E9").Value  'PLZ
wksTarget.Cells(iRow, 7).Value = wksSource.Range("F9").Value  'Ort
wksTarget.Cells(iRow, 8).Value = wksSource.Range("B11").Value  'Neukunde
wksTarget.Cells(iRow, 9).Value = wksSource.Range("H11").Value  'Alter
Workbooks("72950.xlsx").Close SaveChanges:=True
If ThisWorkbook.Name = "Formular.xltm" Then
Exit Sub
Else
Dim vbc As Object
With ActiveWorkbook.VBProject
For Each vbc In .VBComponents
Select Case vbc.Type
Case 1, 2, 3: .VBComponents.Remove .VBComponents(vbc.Name)
Case 100
With vbc.CodeModule
.DeleteLines 1, .CountOfLines
End With
End Select
Next
End With
End If
End Sub

Private Sub Workbook_Open()
ChDrive c:
ChDir "c:\temp"
Workbooks.Open Filename:="c:\temp\72950.xlsx"
ThisWorkbook.Activate
End Sub

Anzeige
AW: Daten automatisch übertragen
07.01.2011 10:51:22
fcs
Hallo Heike,
bei deiner Aufgabenstellung gibt es noch etliche offene Fragen bzw. Probleme.
1. Sollen mehrere User die Datei Liste.xlsx via Formular mit Daten füllen?
Dann muss diese Datei in einem Verzeichnis stehen auf das alle User Schreib-Lese-Berechtigung haben.
Der Desktop-Ordner des Admin ist nicht der ideale Speicher-Ort, besser ist es (wenn es schon der Desktop sein soll) hier den Desktop des angemeldeten Users zu verwenden. Ideal wäre ein "normales" Verzeichnis. Auf dem Desktop würde ich nur einen Link anlegen.
Wenn mehrere User die Listendatei mit Daten befüllen, dann sollte die Datei Liste.xlsx erst unmittelbar vor dem Eintragen der Daten geöffnet werden und nicht schon beim Öffnen der Formulardatei. So ist die Wahrscheinlichkeit, dass 2 User gleichzeitig die Liste geöffnet haben.
2. Speichern der ausgefüllten Formular-Datei ohne Makros
Das löschen von VBA-Code setzt voraus, dass die Sicherheitseinstellungen von Excel reduziert/geändert werden müssen (Zugriff aufs VBA-Projekt muss erlaubt werden). Außerdem gibt es Probleme wenn das Modul des aktuell ausgeführten Codes gelöscht wird.
Besser ist es, ggf. den Speicherprozess umzulenken, so dass die Datei via Speichern unter im makrofreien xlsx-Format gespeichert wird. Ist aber nicht ganz einfach, dies im Schließen- und Speichern-Ereignis des Workbooks einzubauen.
3. Formular: Datum in Zelle H4
Diese Formel muss vor dem Speichern/Schließen des Formulars(ohneMakro) durch ihren Wert ersetzt werden, sonst ändert sich dieser in der xlsx-Datei bei jedem Öffnen. Alternativ könnte man das aktuelle Datum beim Öffnen der Formular-Datei eintragen.
4. Formular: Blattschutz
Es empfiehlt sich hier alle Eingabezelle zu entsperren und den Blattschutz zu aktivieren. Das erleichtert die Eingabe und verhindert unbeabsichtigte Änderungen am Formular.
5. Liste: fortlaufende Nummer/nächste freie Zeile
Die Formel in Spalte A würde ich nicht bis Zeile 200 vorgeben, sondern vom Ausfüllmakro eintragen lassen. Dann kann man die Spalte A zum ermitteln der nächsten freien Zeile benutzen.
Alternativ kann man die Spalten C (Name) oder H (Neukunde) zur Ermittlung der nächsten freien Zeile benutzen, da in diesen Spalten wohl immer Daten eingetragen werden.
6. Formular/Liste - PLZ/Ort
In der Liste sollen PLZ und Ort in getrennten Spalten eingetragen werden. Also sollten im Formular auch deutlich 2 Eingabezellen vorgegeben werden.
Da es PLZ mit führenden Nullen gibt sollten die Eingabezelle und die Spalte als Text formatiert sein.
Beim Eintragen der PLZ in die Liste würde ich sogar ein Hochkomma(') voranstellen, um Probleme mit Zahlenformaten zu minimieren
7. Code für Workbook-Ereignismakros
Dieser muss im VBA-Editor unter "DieseArbeitsmappe" eingefügt sein, nicht unter dem Tabellenblatt-Modul.
Ich werde mal versuchen, die Prozeduren in die oben beschriebene Richtung umzuschreiben.
Gruß
Franz
Anzeige
AW: Daten automatisch übertragen
07.01.2011 11:43:03
Heike
Jetzt weiß ich nicht, bei welchem Thread ich schreiben soll, da ich - keine Ahnung wie - diesen 2 Mal eingefügt habe. Sorry.
Hallo Franz,
aaaahhhh ja, da hast du natürlich Recht.
Sollen mehrere User die Datei Liste.xlsx via Formular mit Daten füllen?
Jeder Mitarbeiter hat eine eigene Liste (3 Mitarbeiter). Die Listen liegen zentral auf dem Server und sind nicht schreibgeschützt. Liste_Marion.xlsx, Liste_Klaus.xlsx und Liste_Heike.xlsx.
Und tatsächlich liegt jeweils eine Verknüpfung auf dem Desktop der jeweiligen Mitarbeiter und nur der jeweilige Mitarbeiter füllt SEINE Liste.
Speichern der ausgefüllten Formular-Datei ohne Makros
Also wäre es hier sinnvoll, über einen Button (wie Sepp es gemacht hat) zu speichern/schließen?
Formular: Datum in Zelle H4
OK, das habe ich verstanden. Habe gerade mal was gefunden, habe aber noch nicht ausprobiert ob es funktioniert:
Dim Datum As String
Datum = Format(Now, "dd.mm.yyyy")
Range("H4") = Datum
4. Formular: Blattschutz
OK, das kriege ich hin, Hauptsache die Daten werden trotzdem übertragen
5. Liste: fortlaufende Nummer/nächste freie Zeile
ooohhhh jeeeeee, keine Ahnung
6. Formular/Liste - PLZ/Ort
Hier habe ich gerade mal probiert, die Zelle benutzerdefiniert zu setzen: „ „00000, also in die Anführungsstriche eine Leerstelle. Das klappt. Ist das ok?
7. Code für Workbook-Ereignismakros
Das habe ich schon geändert.
Vielen Dank für die enorme Mühe
Viele Grüße
Anzeige
AW: Daten automatisch übertragen
07.01.2011 14:49:15
fcs
Hallo Heike,
ich hab mal die Funktionen soweit erkennbar in zwei Dateien eingebaut.
https://www.herber.de/bbs/user/72965.zip
Wenn jeder User eine andere Listendatei hat, dann muss auch jeder seine eigene Formblatt-Datei (xltm) benutzen.
Im Code muss dann der Name der Listendatei und ggf. der Formulardatei für jeden User angepasst werden.
Speichern ohne Makro per Schaltfläche ist eine Lösung. Es geht aber auch ohne wie in meinem Beispiel.
Datum in Zelle H4 Es reicht : Range("H4") = Date
Format PLZ ein benutzerdefiniertes Zahlenformat mit 5 Ziffern geht auch. Auf der sicheren Seite (langfristig und bei anderer Verwendung z.B in Serienbriefen) bis du aber bei Formatierung als Text und in der Liste mit vorangestelltem Hochkomma.
Gruß
Franz
Anzeige
Ihr seid super klasse :-)
07.01.2011 15:56:14
Heike
Hallo Franz, Sepp und Gerwas,
phantastisch, was ihr drei für tolle Lösungen geboten habt. DANKE DANKE DANKE :-))))
Habe mich für Franz Lösung entschieden, da diese wirklich "DAU"-sicher ist :-)) Ich bin wirklich begeistert von eurer Hilfe!
@Franz:
Als verantwortliche Mitarbeiterin für dieses Projekt muss ich nun im 2. Schritt meine eigene Liste aus den vorherigen 3 Listen zusammenfügen. Also, ich öffne meine Uebersichtsliste.xlsx und über ein Button soll Excel mir immer komplett die Daten in meine Liste schreiben. Es sollen also immer ALLE Daten geholt werden und somit meine Übersichtsliste überschrieben werden. Denn so bin ich immer auf dem neusten Stand. Diese Übersichtsliste benötige ich, um weitere Auswertungen zu machen.
Ich hoffe, das ist jetzt nicht unverschämt und würde mich über eine Lösung freuen.
Viele Grüße
Anzeige
Listen in Übersicht zusammenfassen
07.01.2011 18:41:55
fcs
Hallo Heike,
eine Schaltfläche in deiner Übersicht.xlsx funktioniert nicht, da sie (im Moment noch) makrofrei ist?.
Ich hab in meinem Fundus noch was gefunden, was ich für dich angepasst hab. Verzeichnisse und Dateinamen im Blatt Steuerung muss du natürlich anpassen.
https://www.herber.de/bbs/user/72972.xlsm
Gruß
Franz
Ist ja die Luxusausführung :-)
07.01.2011 21:21:11
Heike
Hallo Franz,
deine Lösung ist ja hammer super gut :-))) Die Übertragung klappt super. Danke.
Ist es richtig, dass immer ALLE Listen eingelesen werden, egal ob ich gefiltert habe?
Sind die gelben Zellen relevant für dein Makro? Habe die Zellbezüge dort nicht gefunden.
Vielen Dank für deine Mühe, freue mich auf Antwort :-) (macht ja richtig Spaß :-)))))
Viele Grüße
Anzeige
AW: Ist ja die Luxusausführung :-)
09.01.2011 00:54:45
fcs
Hallo Heike,
Ist es richtig, dass immer ALLE Listen eingelesen werden, egal ob ich gefiltert habe?
Ja, wenn der Filter wirksam werden soll, dann müsste im Makro eine Prüfung eingebaut werden, so das nur die sichtbaren Zeilen eingelesen werden.
Folgen Abschnitt anpassen:
  With wksSteuer.Range("Dateinamen")
For iIndex = 1 To .Rows.Count
If .Rows(iIndex).Hidden = True Then GoTo NextFile
sQuellePfad = .Cells(iIndex, 1)
Sind die gelben Zellen relevant für dein Makro? Habe die Zellbezüge dort nicht gefunden.
Ja, sonst wären sie nicht vorhanden. Man könnte die Daten natürlich auch fest in den Code schreiben. In der Datei aus meinem Fundus waren die Eingaben auch vorhanden, um schnell Anpassungen an unterschiedlichen Tabellenaufbau machen zu können.
Das Makro muss nur wissen ab welcher Zeile es Daten einlesen soll und wieviele Spalten. Die relevanten Zellbezüge werden im Makro berechnet ausgehend von den Vorgaben. Für die Anzahl der Datenzeilen wird im Code die Spalte A ausgewertet.
Gruß
Franz
Anzeige
AW: Ist ja die Luxusausführung :-)
09.01.2011 12:34:54
Heike
Hallo Franz,
vielen Dank für deine Antwort. Ich habe noch zwei Fragen und hoffe, ich nerve dich nicht!
1. Zurzeit arbeite ich ja dann mit 2 Mappen. Die 1. Uebersicht.xlsm, um das Makro auszuführen und die 2. Uebersicht.xlsx, in der die Daten eingelesen werden. Ist es möglich, die einzulesenden Daten auch in die Uebersicht.xlsm in das 2. Tabellenblatt einzulesen?
2. In deinem Code steht: "ElseIf LCase(Right(ThisWorkbook.Name, 5)) = ".xlsx" Then" was bedeutet die Zahl 5? und "vAuswahl = Application.Dialogs(xlDialogSaveAs).Show("", 51)" was bedeutet die Zahl 51?
Nochmals vielen Dank für deine Mühe
Viele Grüße
Anzeige
Listen in Übersicht zusammenfassen - Variante
09.01.2011 15:18:50
fcs
Hallo Heike,
1. Ist es möglich, die einzulesenden Daten auch in die Uebersicht.xlsm in das 2. Tabellenblatt einzulesen?
Das ist kein Problem. Man kann dann direkt die Ziel-Tabelle setzen ohne eine Datei zu öffnen. Zusätzlich muss im Code alles rund um "wbZiel" verschwinden.
https://www.herber.de/bbs/user/72995.xlsm
2. Was bedeutet die Zahl 5?
Schau mal in der EXCEL-VBA-Hilfe unter "Right"
oder
in der Excel-Hilfe unter Tabellenfunktion "RECHTS"
Was bedeutet die Zahl 51?
51 ist der Parameter für das Dateiformat, dass im Speichern-unter-Dialog vorgegeben werden soll.
Eine vollständige Auflistung findest du in der VBA-Hilfe unter dem Stichwort "xlFileFormat-Enumeration"
Unter dem 1. Parameter (z.Zt. "") kann man übrigens einen Text-String als Vorgabe für den Dateinamen (nur Name ohne Datei-Namens-Erweiterung!!) angeben.
Gruß
Franz
Anzeige
Passt alles perfekt!
09.01.2011 17:50:43
Heike
Hallo Franz,
es passt alles perfekt. Ich habe alle Varianten ausprobiert und nun auch verstanden was 5 und 51 bedeutet. Ich danke dir viele tausend Mal für deine enorme Mühe und Geduld und wünsche dir noch einen schönen Sonntagabend :-)))))))
Viele Grüße
Heike

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige