AW: Zeile Anfügen
15.11.2006 16:18:35
fcs
Hallo Jon,
die Prüfung des für Zeilenkopieraktionen erlaubten Bereichs hab ich eingebaut.
Ich weiß ja nicht, wie deine Originaldatei aussieht. Wenn die Checkboxen in Zeile 56 beginnen dann brauchst du im Makro nichts zu ändern, Ansonsten muß du im Makro diese Zeilennummer anpassen. Neues Makro siehe unten.
Was dein Problem mit dem Sortieren angeht. Hier muss du wahrscheinlich für den zu sortierenden Bereich die letzte Zeile immer dynamisch vom Makro ermitteln lassen bevor der Sortiergang startet.
also etwa so:
Sub Sortieren()
Dim Sortierbereich As Range, LetzteZeile As Long, wks As Worksheet
Set wks = Worksheets("Tabelle1") 'Tabelle in der sortiert werden soll
With wks
'Letzte Zeile für Sortierbereich ermitteln. Dabei wird in Spalte F die _
letzte ausgefüllte Zelle (mit Eintrag "Summe") ermittelt und dann noch _
3 Zeilen abgezogen
LetzteZeile = .Cells(.Rows.Count, "F").End(xlUp).Row - 3
Set Sortierbereich = .Range("A56:W" & LetzteZeile)
End With
With Sortierbereich
'Sortieren nach Spalte H
.Sort Key1:=.Range("H1"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
End With
End Sub
Ansonsten gilt: Man wächst mit den Aufgaben.
Also nicht verzweifeln und wacker weitermachen.
Gruß
Franz
Aktualisiertes Zeilen-Kopier-Makro
Private Zeile As Long
Sub ZeileKopieren()
Zeile = ActiveCell.Row
With ActiveSheet
'Prüfen des Zeilenbereichs in dem kopiert werden darf
If Zeile < 56 Or Zeile > .Cells(.Rows.Count, "F").End(xlUp).Row - 3 Then Exit Sub
'Kopie der gemerkten Zeile einfügen
.Rows(Zeile).Copy
.Cells(.Rows.Count, "F").End(xlUp).Offset(-2, -5).Insert Shift:=xlDown
'Verknüpfung der Boxen in Kopie aktualisieren, _
die 56 ggf. anpassen, muss = der ZeilenNr. der 1. Zeile sein, die ggf. kopiert wird
Call VerknuepfungFormsObjekt(3, -2, 1, 56) 'Checkboxen in Spalte 3 (C)
Call VerknuepfungFormsObjekt(4, -2, 1, 56) 'Checkboxen in Spalte 4 (D)
End With
ActiveCell.Select
End Sub
Sub VerknuepfungFormsObjekt(ByVal Spalte As Integer, ByVal VersatzX As Integer, ByVal VersatzY As Integer, Zeile1 As Integer)
'Aktualisiert Verknüpfte Zelle eines FormsObjektes in Spalte gemäß Zellposition
'Spalte = Spalte in der die Checkbox plaziert ist
'VersatzX = Horizontaler Versatz (Spalten) zwischen verknüpfter Zelle und linker oberer Ecke der Box
'VersatzY = Vertikaler Versatz (Zeilen) zwischen verknüpfter Zelle und linker oberer Ecke der Box
'Zeile1 = Oberste Zeile, die ggf. kopiert werden kann.
Dim Element As Shape
For Each Element In ActiveSheet.Shapes
With Element
If .Type = msoFormControl Then 'Abfrage auf Formblatt Kontroll-Elemente
Select Case .FormControlType
Case xlCheckBox
If .TopLeftCell.Column = Spalte Then
If .ControlFormat.LinkedCell <> .TopLeftCell.Offset(VersatzY, VersatzX).Address Then
.ControlFormat.LinkedCell = .TopLeftCell.Offset(VersatzY, VersatzX).Address
If Zeile1 = Zeile Then
'Box etwas nach unten verschieben, gilt nur für 1. Zeile wenn diese kopiert werden soll
.Top = .Top + 3
End If
End If
End If
Case Else
'do nothing
End Select
End If
End With
Next
End Sub