Zellen in andere Tabellen übertragen

22/09/2007 - 22:21 von Thomas | Report spam
Hallo,
habe noch eine Frage:
Die Aufgabe ist folgende:
Man soll Zeile für Zeile durch eine Tabelle gehen und dort aus einer
bestimmten Spalte die Namen von Mitarbeitern auslesen.
Dann soll man die für jeden Mitarbeiter dazugehörige Exceltabelle öffnen
(eigene Datei) die Zeile dorthin kopieren / verschieben und mit dem nàchsten
Mitarbeiter genauso verfahren.
Also in Zeile 1 steht z.B. der Name Meier.
Dann soll die Excel-Tabelle Meier.xls geöffnet werden, die aktuelle Zeile
dorthin verschoben werden und zur nàchsten Zeile gesprungen werden.

Jetzt meine Frage.
Ist das sinnvoll jedesmal die Datei (also hier z.B. Meier.xls) zu öffnen,
die Zeile hineinzuschreiben und die Datei dann wieder zu schließen ?
Oder gibt es eine effektivere Methode für ein solches Vorgehen.
Ich müsste pro Durchlauf ca. 100 - 150 Dateien öffnen, was reinschreiben und
dann wieder schließen.

Danke schon mal...
Gruß
Thomas
 

Lesen sie die antworten

#1 Robert Jakob
23/09/2007 - 01:48 | Warnen spam
Hallo Thomas,


Am Sat, 22 Sep 2007 22:21:41 +0200 schrieb Thomas:

Hallo,
habe noch eine Frage:
Die Aufgabe ist folgende:
Man soll Zeile für Zeile durch eine Tabelle gehen und dort aus einer
bestimmten Spalte die Namen von Mitarbeitern auslesen.
Dann soll man die für jeden Mitarbeiter dazugehörige Exceltabelle öffnen
(eigene Datei) die Zeile dorthin kopieren / verschieben und mit dem nàchsten
Mitarbeiter genauso verfahren.
Also in Zeile 1 steht z.B. der Name Meier.
Dann soll die Excel-Tabelle Meier.xls geöffnet werden, die aktuelle Zeile
dorthin verschoben werden und zur nàchsten Zeile gesprungen werden.



Ich habe Dir einen MusterCode gebaut, mit dem Du von Deiner "Haupttabelle"
aus eine Datei gemàß dem Namen in Spalte A öffnen und dann den Zelleninhalt
der Zelle B, der gleichen Zeile in die Datei des Mitarbeiter-Namens
schreiben kannst.
Das ist nur ein Muster, Du kannst auf diese Weise natürlich auch ganze
Zeilen oder ganze Bereiche übertragen.

Bei mir beginnen die Daten immer in Zeile 5 nun kannst Du machen was Du
willst, etweder übernehme mein Sytem und lasse Deine Daten auch bei Zeile
5 anfangen oder àndere den Code.

In Moment habe ich das so eingestellt, daß die Dateien immer im gleichen
Ordner sein müssen, wie auch die Haupttabelle und dieser Ordner muß der
aktuelle Ordner sein, denn sonst bekommst Du Fehlermeldung.

Im Moment habe ich den Code so eingerichtet, daß Du Zeilenweise arbeiten
kannst und mit jedem Klick wird eine Datei geöffnet, der Zelleninhalt
der Zelle B der aktuellen Zeile in die Datei übertragen und dann wird
die Datei wieder geschlosen.

Wenn die Daten übertragen sind, dann werden in der Spalte D, das kannst Du
an Deine Bedürfnisse anpassen, 3 Sternchen = *** reingeschreiben, was
bedeuten soll, die Zeile wurde bereits bearbeitet.

Im Code lasse ich überprüfen, ob in der Zeile, Spalte D schon 3 Sternchen
drin sind. Wenn die Sternchen schon drin sind, dann wird der Auftrag
abgebrochen.

Lese Dir zuerst mal den Code genau durch, er ist ganz einfach und wie
ich meine, verstàndlich geschrieben.

Automatisieren kann man das Ganze immern noch, wenn die Grundfunktionen
fehlerfrei laufen.


Jetzt meine Frage.
Ist das sinnvoll jedesmal die Datei (also hier z.B. Meier.xls) zu öffnen,
die Zeile hineinzuschreiben und die Datei dann wieder zu schließen ?
Oder gibt es eine effektivere Methode für ein solches Vorgehen.
Ich müsste pro Durchlauf ca. 100 - 150 Dateien öffnen, was reinschreiben und
dann wieder schließen.



Man kann zwar Daten aus geschlossenen Zeilen lesen, es ist mir aber nicht
bekannt, daß man Daten in geschlossene ExcelDateien schreiben kann.
Natürlich kann man das Öffnen und Schließen verbergen aber ob das sinnvoll
ist, das ist eine andere Frage.

Hier der Code:

Sub TransferDatenZuDateiX()
Dim AuswahlDateiName As String
Dim TransferText As String
Dim Endzeile As Long
On Error GoTo Fehlermeldung

'hier tanken wir die Variable auf.
TransferText = ActiveSheet.Range("B" & ActiveCell.Row).Formula

'hier prüfen wir ob die Zeile kleine 5 ist und der
'Vorgang wird als Abseits gemeldet udn Abbruch wenn die
'ZeilenNummer kleiner 5 ist.
If ActiveCell.Row < 5 Then MsgBox "Abseitsmeldung": Exit Sub


'hier prüfen wir ob es schon 3 Sternchen in der Spalte D
'der aktiven Zeile gibt, wenn ja, dann Meldung und Abbruch

If Range("D" & ActiveCell.Row).Formula = "***" Then _
MsgBox "Abbruch, dise Zeile wurde schon bearbeitet"

AuswahlDateiName = "\" & Range("A" & ActiveCell.Row).Formula & ".xls"
Workbooks.Open Filename:=CurDir & AuswahlDateiName
'Hier tanken wir die Variable Endzeile auf und ermitteln die
'nàchste freie ZeilenNummer am Ende für die Daten
Endzeile = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row + 1

'Nun schreiben wir den Text in die neue Datei
ActiveSheet.Range("A" & Endzeile).Formula = TransferText

'Nun speichern wir die neue Datei
ActiveWorkbook.Save

'und jetzt schließen wir die soeben egspeicherte Datei wieder
ActiveWorkbook.Close

'danach geht es zurück zu der verbliebenen Datei, der Haupttabelle,
'wobei der Name der Tabelle hier keine Rolle spielt.

'Nun schreiben wir die 3 Sternchen als Markierung für erledigt,
ActiveSheet.Range("D" & ActiveCell.Row).Formula = "***"

'Wir speichern anschließen die Daten in der Haupttabelle
ActiveWorkbook.Save

'Nun gehen wir in der Haupttabelle in die nàchste Zeile
ActiveSheet.Range("A" & ActiveCell.Row + 1).Activate

'Nun können wir den Vorgang mit Klick neu starten oder
'eine Schleife einbauen. Die 150 Zeilen hat man aber
'so schnell durchgeklickt und sieht auch noch was passiert.

Exit Sub
'Hinweis, durch meine Kommentarzeilen, wird die Date natürlich nicht
'schneller, also KommentarZeilen rauswerfen, wenn alles verstanden.
Fehlermeldung:
MsgBox "Abbruch, es ist ein Fehler aufgetreten"
End Sub


So und nun ausprobieren ...


MfG
Robert

Ähnliche fragen