Ich suche ein Makro das aus verschiedenen Arbeitsblättern eine Zelle herauskopiert und in neue Arbeitsblatt reinkopiert.
Da es mehrere hundert Arbeitsblätter gibt wollte ich das mit einer hochzählenden Variable machen. Oder einer „nächstes-Arbeitsblatt-auswählen“-Funktion. Aber irgendwie funktioniert das nicht.
Public Sub CopyFromWorksheets()
Dim oWorkbook As Object 'Aktive Arbeitsmappe
Dim oSheet As Object 'Arbeitsblatt
Dim oRange As Object 'Genutzter Bereich
Dim iLast As Integer 'Index Letztes Arbeitsblatt
Dim i, x As Integer 'Zähler
'- Zähler für Zeile auf letztem Arbeitsblatt
x = 1
'- Aktive Arbeitsmappe ermitteln
Set oWorkbook = ActiveWorkbook
'- Index für letztes Arbeisblatt ermitteln
iLast = oWorkbook.Sheets.Count
'- Genutzten Bereich auf letzter Seite löschen
oWorkbook.Sheets(iLast).UsedRange.Clear
'- Schleife für alle Arbeitsblätte außer dem letzten
For i = 1 To iLast - 1
'- Arbeitsblatt auswählen
Set oSheet = oWorkbook.Sheets(i)
'- Genutzten Bereich auswählen
Set oRange = oSheet.UsedRange
'- Zeilen auf das letzte Arbeitsblatt kopieren
oRange.Copy oWorkbook.Sheets(iLast).Range("A" & x)
'- x um die Anzahl der eingefügten Zeilen erhöhen
x = x + oRange.Rows.Count
Next i
'- Objekte zerstören
Set oRange = Nothing
Set oSheet = Nothing
Set oWorkbook = Nothing
End Sub
Vielleicht kannst du ja trotzdem was mit anfangen.
OT Excel Zeile Spalte als long deklarieren
Hallo Sweidner,
ich hab das nur flüchtig überflogen aber mir fiel was auf:
Dim i, x As Integer 'Zähler
Dir ist klar daß „i“ als Variant deklariert ist?
Und, Zeilenzähler IMMER als long deklarieren, auch wenn es „nur“ 29000 zeilen sind also Integer ausreichend wäre. Erstens kann die Datei wachsen aber zweitens kostet das vermeintlich paar Bytes sparende Integer Rechenzeit die sich bei großen Datenmengen zusammenläppert.
Denn z,b, Cells(Zeile,Spalte) wandelt immer alles sowieso in Long um egal ob du Zeile als Byte deklariert hast.
Diese Umrechnungszeit kostet dich zeit.
Bei einem Spaltenzähler ist das das Gleiche.
Also Zeilen und Spalten immer als long.
Ich weiß, wer hat schon 16000 Spalten und 29000 Zeilen zu bearbeiten aber Excel2007 bitete das an, irgendeiner wird das schon ausschöpfen
auch ist es unglücklich, Variablen als i, x zu deklarieren, also einbuchstabig. Wenn man in einer längeren Routine sowas sucht, hat man ein Problem. Besser ist i1, x1 u.ä.
Ich habe mir auch angewöhnt, Variablen, Subs, Functions usw. deutsche Namen zu geben, dann habe ich praktisch keine Probleme mit Konflikten mit Schlüsselwörtern.
auch ist es unglücklich, Variablen als i, x zu deklarieren,
also einbuchstabig. Wenn man in einer längeren Routine sowas
sucht, hat man ein Problem. Besser ist i1, x1 u.ä.
Ich habe mir auch angewöhnt, Variablen, Subs, Functions usw.
deutsche Namen zu geben, dann habe ich praktisch keine
Probleme mit Konflikten mit Schlüsselwörtern.
Hallo Laika,
durch deinen beitrag fiel mir auf daß ich was vergessen hatte zu schreiben was ich an sich dazu schreiben wollte.
Der Name „i“ ist völlig daneben, genau wie „l“ *find*
Je nach Augenleistung, Schriftart usw. ist der Anblick von
1,i,l
sehr sehr ähnlich und erschwert völlig unnnötig das Code-Lesen.
Ich nehme auch aus den gleichen Gründen wie du deutsche Namen.
Allerdings, alle mir bekannten deutschen Vbaler die das beruflich machen nehmen immer englische Namen.
Und benutzen natürlich Präfixe, siehe „ungarische Notation“ bei Wikipedia u.ä.
Vielleicht *Mutmaßung* nehmen sie englische Begriffe da sie „internationalen“ Code schreiben. Und da ist halt die VBA-Sprache englisch.