Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
624to628
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
624to628
624to628
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Hilfe: Excel Zeilen kopieren

Hilfe: Excel Zeilen kopieren
23.06.2005 09:36:29
philipp
Hallo,
ich muß gestehen, dass ich diesen Thread hier eigentlich zum zweitenmal aufmachen, aber der ist jetzt so weit runter gerutscht und ich habe bis jetzt noch keine Anwort bekommen die mir hilft, dass ich es jetzt noch mal weiter oben Probiere
Zum Sachverhalt:
Ich habe circa vier bis fünf Arbeitsmappen. Jede Arbeitsmappe gehört einem Teammitglied in denen er seine Aufgabenliste(Aufgabenliste_NAME.xls) in die Tabelle1 reinschreibt. Die Liste in Tabellenform fängt in den Zeilen A7 bis F7 an und ist je nachdem wieviel das Teammitglied zu tun hat etwas länger oder kürzer (Die Aufgabenliste braucht also mehr oder weniger Zeilen). Alle Teamlisten möchte ich in eine andere Arbeitsmappe (Aufgabenliste_Team.xls) kopieren lassen. Diese Arbeitsmappe beinhaltet zwei Tabellen. Die erste Tabelle heißt Aufgaben. In der Tabelle Aufgaben ist ein Button „auffüllen“, wenn man drauf klickt dann soll sich alle Aufgabenlisten der Teammitglieder reinzukopieren und zwar auch ab der Spalte A7 bis F7 reinkopiert werden. In der zweiten Tabelle mit dem Namen Team stehen alle Namen der Teammitglieder drin.
Mein derzeitiger Code sieht so aus.

Option Explicit
Private Sub btauffuellen_Click()
Dim zielDatei As Workbook
Dim quellDatei As Workbook
Dim dateiName As String
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim aufgabenVorhanden As Boolean
Dim aufgaben As Variant
Dim aufgabenPunkte() As Variant
Set zielDatei = ActiveWorkbook
'Abschalten der Warnmeldungen und der Screenaktualisierung
Application.DisplayAlerts = False
Application.ScreenUpdating = False
'Bereinigen der Zieldatei
zielDatei.Sheets("Aufgaben").Select
ActiveSheet.Range("A7:I200").Delete
'Auslesen der Dateinamen, die ausgelesen werden sollen
Sheets("Team").Select
Sheets("Team").Range("A1").Select
Do Until ActiveCell.Value = ""
dateiName = ActiveCell.Value
ActiveCell.Offset(1, 0).Select
If Dir(ThisWorkbook.Path & "\aufgaben_" & dateiName & ".xls") = "" Then
MsgBox ("Die Datei  & aufgaben_ & dateiName & .xls liegt nicht in dem gleichen Verzeichnis wie die Zieldatei"), vbCritical, "Datenbank nicht gefunden!"
Exit Sub
Else
Workbooks.Open Filename:=ThisWorkbook.Path & "\aufgaben_" & dateiName & ".xls"
End If
'Aktivierung der Quelldatei
Set quellDatei = ActiveWorkbook
ActiveSheet.Range("F6").Select
aufgabenVorhanden = False
'Wenn Aufgaben vorhanden sind
If ActiveCell <> "" Then
aufgabenVorhanden = True
Do Until ActiveCell = "" And i > 30
aufgabenPunkte(i, k) = ActiveCell.Value
i = 5
i = i + 1
For k = 1 To 5 Step 1
k = k + 1
Next k
Loop
End If
'Nach dem Auslesen der Aufgaben
quellDatei.Close
j = 0
zielDatei.Sheets("Aufgaben").Select
If aufgabenVorhanden Then
ActiveCell.Value = dateiName
ActiveCell.Offset(2, 0).Select
Do Until j >= i
Loop
End If
Loop
zielDatei.Sheets("Aufgaben").Select
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub

Besonders sorgen macht mir dieser Teil des Codes. Hier wollte ich eigentlich die Spalte A bis F in ein zweidimensionales Array schreiben. Aber erst ab der Zeile 7 bis zu der Zeile in der die Tabelle leer ist. So ich hoffe ich habe das jetzt einigermaßen erklärt.

If ActiveCell <> "" Then
aufgabenVorhanden = True
Do Until ActiveCell = "" And i > 30
aufgabenPunkte(i, k) = ActiveCell.Value
i = 5
i = i + 1
For k = 1 To 5 Step 1
k = k + 1
Next k
Loop
End If

Liebe Grüße Philipp

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Kann mir den niemand helfen
23.06.2005 11:03:37
philipp
ich weiß echt nicht mehr weiter
AW: Kann mir den niemand helfen
23.06.2005 12:08:13
Harald
Hallo Philipp,
hab deinen Beitrag gestern auch schon gesehen. Heute wie gestern, bin ich nicht in der Lage dein Ansinnen so zu verstehen, dass ich da sinnvolle Hilfe anbieten könnte.
Höchstens zu dieser Frage:
Besonders sorgen macht mir dieser Teil des Codes. Hier wollte ich eigentlich die Spalte A bis F in ein zweidimensionales Array schreiben. Aber erst ab der Zeile 7 bis zu der Zeile in der die Tabelle leer ist.
LRow = cells(rows.count, 1).end(xlup).row 'letzte Zelle in Spalte A
for i = 7 to LRow (also von 7 bis letzte Zelle)
Vielleicht solltest Du das Problem splitten und genau beschreiben, wo die Problemstellen liegen mit Soll- und Ist-Zustand.
Gruß
Harald
Anzeige
AW: Hilfe: Excel Zeilen kopieren
23.06.2005 14:06:52
philipp
Dann beschreib ich nochmal mein Ansinnen. Ich dachte nicht, das mein Code so schlecht ist. Okey er funktioniert nicht, aber das selbst Profis nicht dahinter kommen, was ich will, das ist schon hart. :-(
Ich möchte auf dem Button „auffüllen“ Klicken um diese Aktion anzustoßen. (Ich glaube, dass habe ich richtig gemacht.)
Option Explicit

Private Sub btauffuellen_Click()
Dim zielDatei As Workbook
Dim quellDatei As Workbook
Dim dateiName As String
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim aufgabenVorhanden As Boolean
Dim aufgaben As Variant
Dim aufgabenPunkte() As Variant
Hier möchte ich die Arbeitsmappe (Aufgaben_Team.xls). in der auch der Code steht, als Aktive Arbeitsmappe einsetzten
Set zielDatei = ActiveWorkbook
'Abschalten der Warnmeldungen und der Screenaktualisierung
Application.DisplayAlerts = False
Application.ScreenUpdating = False
Hier möchte ich zuerst einmal alle alten Einträge löschen, damit man die neuen, darein schreiben kann.
'Bereinigen der Zieldatei
zielDatei.Sheets("Aufgaben").Select
ActiveSheet.Range("A7:I200").Delete
Hier wähle ich jetzt die Tabelle Team an, die in der aktiven Arbeitsmappe (Aufgabenliste_Team.xls) enthalten ist. In ihr stehen alle Namen der Teammitglieder. Dazu muss gesagt werden das im selben Pfad, wo die Arbeitsmappe (Aufgaben_Team.xls) ist auch noch lauter Aufgabenlisten mit dem Syntax aufgaben_NAMEDESTEAMMITGLIDS.xls abgespeichert sind. Diese sollen jetzt aus der Tabelle Team ausgelesen werden und geöffnet werden.
'Auslesen der Dateinamen, die ausgelesen werden sollen
Sheets("Team").Select
Sheets("Team").Range("A1").Select
Do Until ActiveCell.Value = ""
dateiName = ActiveCell.Value
ActiveCell.Offset(1, 0).Select
If Dir(ThisWorkbook.Path & "\aufgaben_" & dateiName & ".xls") = "" Then
MsgBox ("Die Datei  & aufgaben_ & dateiName & .xls liegt nicht in dem gleichen Verzeichnis wie die Zieldatei"), vbCritical, "Datenbank nicht gefunden!"
Exit Sub
Else
Workbooks.Open Filename:=ThisWorkbook.Path & "\aufgaben_" & dateiName & ".xls"
End If
Hier möchte ich jetzt die frisch geöffnete Arbeitsmappe als Active Arbeitsmappe setzten. Und schauen ob überhaupt etwas in der Tabelle 1 drinsteht.
'Aktivierung der Quelldatei
Set quellDatei = ActiveWorkbook
ActiveSheet.Range("F7").Select
aufgabenVorhanden = False
Wenn hier was drinsteht, dann möchte ich das die Aufgabenliste, die in Tabellenform abgespeichert wurde in ein Array geschrieben wird. Was aber nicht klappt. Die Liste ist unterschiedlich groß. Sie geht von den Zellen A7 bis F7 so viele Zeilen runter wie das Teammitglied Aufgaben hat. Beim debuggen kommt hier immer die Fehlermeldung: „Index außerhalb des gültigen Bereichs.“
'Wenn Aufgaben vorhanden sind
If ActiveCell <> "" Then
aufgabenVorhanden = True
Do Until ActiveCell = "" And i > 30
aufgabenPunkte(i, k) = ActiveCell.Value
i = 5
i = i + 1
For k = 1 To 5 Step 1
k = k + 1
Next k
Loop
End If
Nach dem Auslesen der Aufgaben möchte ich die geöffnete NAME_Aufgaben.xls wieder schließen. Und dann die in das Array geschriebenen Daten in die Arbeitsmappe (Aufgaben_Team.xls) Tabelle (Aufgaben) reinschreiben und zwar ab der Zeile 7. Danach sollte wieder in die Tabelle Team gegangen werden, dort geschaut werden, welcher Name in der nächsten Spalte steht. Mit diesen Name sollte dann wieder eine aufgaben_Name.xls geöffnet werden, die Aufgabenliste aus Tabelle1 rauskopiert werden und unter die Aufgabenliste des vorherigen Namens reinkopiert werden. Dies sollte solange wiederholt werden bis keine Namen mehr in der Tabelle Team stehen.
'Nach dem Auslesen der Aufgaben
quellDatei.Close
j = 0
zielDatei.Sheets("Aufgaben").Select
If aufgabenVorhanden Then
ActiveCell.Value = dateiName
ActiveCell.Offset(2, 0).Select
Do Until j >= i
Loop
End If
Loop
zielDatei.Sheets("Aufgaben").Select
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub

Ich weiß der Text ist jetzt ziemlich lang geworden. Mal sehen ob den noch ein liest. Aber ich hoffe, dass jetzt jemand wirklich durchcheckt was ich machen will.
mfg philipp
Anzeige
AW: Hilfe: Excel Zeilen kopieren
23.06.2005 14:39:43
Harald
Boahh, (vorab: Zum Profi, fehlt mir noch Einiges ;-))
na eigentlich ein Fass ohne Boden. Ich lass die Frage offen, aber nicht ohne 2-3 Anmerkungen.
1. zuviele Select
z.B.
'Bereinigen der Zieldatei
zielDatei.Sheets("Aufgaben").Select
ActiveSheet.Range("A7:I200").Delete
wird zu:
zielDatei.Sheets("Aufgaben").Range("A7:I200").Delete
2. Du startest einen zweiten Loop, ohne meines Wissens den ersten zu beenden
ERSTER
Do Until ActiveCell.Value = ""
dateiName = ActiveCell.Value
ActiveCell.Offset(1, 0).Select
If Dir(ThisWorkbook.Path & "\aufgaben_" & dateiName & ".xls") = "" Then
MsgBox ("Die Datei & aufgaben_ & dateiName & .xls liegt nicht in dem gleichen Verzeichnis wie die Zieldatei"), vbCritical, "Datenbank nicht gefunden!"
Exit Sub
Else
Workbooks.Open Filename:=ThisWorkbook.Path & "\aufgaben_" & dateiName & ".xls"
End If
'Aktivierung der Quelldatei
Set quellDatei = ActiveWorkbook
ActiveSheet.Range("F6").Select
aufgabenVorhanden = False

'Wenn Aufgaben vorhanden sind

If ActiveCell &lt&gt "" Then
aufgabenVorhanden = True
ZWEITER...ohne die erste Schleife zu beenden..auch darunter nicht
Do Until ActiveCell = "" And i &gt 30

aufgabenPunkte(i, k) = ActiveCell.Value
i = 5
i = i + 1
For k = 1 To 5 Step 1
k = k + 1
Next k

Loop
3. aufgabenPunkte hast Du als Variant deklariert, nutzt es aber später als Range
aufgabenPunkte(i, k) = ActiveCell.Value
cells(i, k) ist besser
4. i = 5 und darunter sofort i = i + 1
i = 5 sollte vor die Zeile Do until...
An dieser Stelle gebe ich auf. Ich komm mit dieser Programmiersystematik nicht klar.
Viel Glück noch
Harald
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige