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

VBA Kopie verrutscht ?!?!?

VBA Kopie verrutscht ?!?!?
22.01.2009 18:31:45
Sascha
Hallöchen.
Bitte mal folgenden Code unter die Lupe nehmen:

Private Sub Worksheet_Activate()
'Zielblatt muss immer die höchste Nr. haben!
Dim i As Long
Dim j As Long
On Error GoTo Fehler
Application.EnableEvents = False
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
ActiveSheet.Columns("B").ClearContents
ActiveSheet.Columns("C").ClearContents
With ActiveSheet
For i = 1 To ActiveWorkbook.Sheets.Count - 1 Step 1
Sheets(i).Range("C122:C218").Copy
.Cells(Rows.Count, "B").End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlPasteValues
Sheets(i).Range("N122:N218").Copy
.Cells(Rows.Count, "C").End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlPasteValues
Sheets(i).Range("L122:L218").Copy
.Cells(Rows.Count, "D").End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlPasteValues
Next i
End With
Fehler:
Application.CutCopyMode = False
Application.EnableEvents = True
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
ActiveSheet.Range("A1").Select
End Sub


der Code kopiert mir alle Daten aus bestimmten Spalten auf das letzte Tabellenblatt in die Spalten B:B / C:C / D:D.
Bei D:D klappt das wunderbar
Nur die Spalten B und C verrutschen um die erste Zeile, was für die weitere Berechnung keinen Sinn macht.
Kann mir jemand helfen?
LG und Danke
Sascha

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

Betreff
Datum
Anwender
Anzeige
AW: VBA Kopie verrutscht ?!?!?
22.01.2009 19:42:14
Reinhard
Hi Sascha,
dein Code ist wegen des Activesheet gefährlich, was ist wenn ein Blatt das aktive ist, da werden die Spalten B:D überschrieben!
Vielleicht besser mit Blattnamen ansprechen oder so:
With sheets(sheets.count)
Löshc dann alle drei Spalten:
.Range("B:D").ClearContents
Mit
Zei = .Cells(Rows.Count, "B").End(xlUp).Offset(1, 0).row
kriegst du die Zeilennummer nterhalb der untersten belegten zelle in B. Dabei mußt du immer zwei Dinge im Auge behalten.
Wenn die Spalte völlig leer ist oder nur B1 belegt ist, in beiden Fällen ist Zei = 2
Abhilfe z.B. so
Zei = .Cells(Rows.Count, "B").End(xlUp).Offset(1, 0).row
Zei=IIF(zei=2 and .cells(1,"B")="";1;zei)
Die zweite Sache ist, bei XL vor 2007, wenn die unterste belegte Zelle in B65536 ist,
dann ist Zei=65537 und dann kommt ein Fehler wenn du in diese zeile etwas schreiben willst.

Zei = .Cells(Rows.Count, "B").End(xlUp).Offset(1, 0).row
Zei=IIF(zei=2 and .cells(1,"B")="";1;zei)
If Zei=65537 then
msgbox "Zeilenüberlauf"
exit sub
end if


Für 2007 gilt das analog für die Million Zeilen.
Natürlich wenn du mehrmals nacheinander in B etwas untereinander einfügst, darf das untere Ende auch nicht größer als 6556 werden als Zeilenzahl.
Ich hoffe dir ist jetzt klar warum sich bei deinem Code B und C anders verhalten als D, es liegt daran daß du B und C vorher löschst und D nicht.
Gruß
Reinhard

Anzeige
AW: VBA Kopie verrutscht ?!?!?
22.01.2009 19:46:00
Sascha
Hallo Reinhard,
danke, wie du an meinem neuen Beitrag erkennen konntest, habe ich den Fehler mit dem Löschen schon gemerkt und behoben.
ABer was genau ist die Sache mit dem "ActiveSheet"
Ich bin in VBA nicht sonderlich firm. Ich möchte das mir immer alle Inhalte der angegebenen Zeilen aller anderen Sheets im Workbook in der Zeile B/C/D untereinander angezeigt werden.
Kann es hier zu komplikationen kommen, abgesehen von der 65000er Regel?
Ich erwarte "nur" 26 sheets a 96 Zeilen also... hmmm.... 2496 gefüllte Zeilen maximal ;)
LG
Sascha
AW: VBA Kopie verrutscht ?!?!?
23.01.2009 15:38:00
fcs
Hallo Sascha,
ActiveSheet als bezogenes Objekt kann Probleme machen wenn man im Code die Übersicht verloren hat welches Blatt im Moment der Ausführung des Codes das aktive Blatt im aktiven Fenster ist.
Deshalb ist es praktisch immer besser man weisst Tabellen zum geeigneten Zeitpunkt als Worksheet deklarierten Objekt-Variablen zu.
In den Prozeduren unter Tabellen, Charts, Workbooks oder Userforms kann man auch mit der Systemvariablen Me arbeiten, wenn man auf die Tabelle etc. Bezug nehmen will.
Nachfolgend dein Code etwas modifiziert, so wird die nächste freie Datenzeile immer korrekt ermittelt und das Zusammenfassungsblatt kann an beliebiger Position in den Registern stehen.
Gruß
Franz

Private Sub Worksheet_Activate()
'Daten aller anderen Blätter im Zielblatt sammeln!
Dim i As Long
Dim j As Long
On Error GoTo Fehler
Application.EnableEvents = False
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
'Inhalte in Spalten B bis D löschen
Me.Columns(2).ClearContents
Me.Columns(3).ClearContents
Me.Columns(4).ClearContents
With Me
For i = 1 To ActiveWorkbook.Worksheets.Count
Select Case Worksheets(i).Name
Case Me.Name, "Tabelle XYZ"
'Namen der Ausnahme-Blätter, deren Daten nicht in dieses Blatt kopiert werden sollen
Case Else
'letzte Datenzeile im Zielblatt ermitteln
With Application.WorksheetFunction
j = Me.Cells(Me.Rows.Count, 2).End(xlUp).Row
j = .Max(j, Me.Cells(Me.Rows.Count, 3).End(xlUp).Row)
j = .Max(j, Me.Cells(Me.Rows.Count, 4).End(xlUp).Row)
'Nächste Einfügezeile setzen
If .CountA(Me.Range("B1:D1")) = 0 Then j = 1 Else j = j + 1
End With
'Freie Zeilen Prüfen
If j > .Rows.Count - .Range("C122:N218").Rows.Count Then
MsgBox "Nicht genug freie Zeilen zum Einfügen!"
GoTo Fehler
End If
'Daten Kopieren
Sheets(i).Range("C122:C218").Copy
.Cells(j, 2).PasteSpecial Paste:=xlPasteValues
Sheets(i).Range("N122:N218").Copy
.Cells(j, 3).PasteSpecial Paste:=xlPasteValues
Sheets(i).Range("L122:L218").Copy
.Cells(j, 4).PasteSpecial Paste:=xlPasteValues
End Select
Next i
End With
Fehler:
Application.CutCopyMode = False
Application.EnableEvents = True
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
ActiveSheet.Range("A1").Select
End Sub


Anzeige
AW: VBA Kopie verrutscht ?!?!?
22.01.2009 19:42:00
Sascha
Habs schon selbst gefindet ;)
Langsam lern ich VBA glaub ich *ggg*
Trotzdem Danke an alle, die sich das Problem angeschaut haben.
LG
Sascha

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige