nächstes Arbeitsblatt auswählen

Hallo,

ich hoffe hier kann mir jemand helfen.

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.

Wenn jemand was weiß, bitte helft mir.

LG, Billy

Habe eine Lösung gefunden!

Hallo!

Hatte dir auch eine Lösung geschrieben.

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.

Gruß sweidner

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 :smile:

Gruß
Reinhard

Hallo,

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.

Nur so nebenbei.
Laika

Namen für Variablen

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.

Gruß
Reinhard