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

Zeile Anfügen

Zeile Anfügen
11.11.2006 19:11:28
Jon
Guten Tag,
Ich hab folgendes Problem:
ich möchte ein Macro per Befehlsbutton in meine Arbeitsmappe hinzufügen der folgende Funktion haben soll:
Zeile Kopieren (incl. Kontrollkästchen, Steuerelemente und Bedingteformatbefehle)und am Ende Anfügen.
Alle Eigenschaften das kopierte Zeile sollen sich nun auf das neu eingefugten Zeile beziehen.
Wenn ich die Zeile kopiere dann bezieht sich das Bedingteformat auf das kopierte Zeile und nicht auf das neue ?(also alles bezieht sich auf A56 obwohl jetzt A57)
Das $ Zeichen hab ich vor dem Zeilennummer weggelassen und zwar bei Zellverknüfung sowie als auch bei der Bedingteformatierung ?
Ich bin schon seit 3 tage am verzweifeln und finde auch nix unter Hilfe
der mir auch weiter bringt. Ich hoffe ich habe das Problem verständlich beschrieben :-)
Habt Ihr eine Lösung ?
Jon

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zeile Anfügen
12.11.2006 13:18:35
fcs
Hallo Jon,
bei der bedingten Formatierung wird die Formatierung beim Kopieren korrekt in der eingefügten Zeile verarbeitet, wenn in den Bedingungs-Formeln für die Zeilenadressen relative Bezuge angegeben sind (ohne $-Zeichen). Da muss du also noch irgendeinen Fehler eingebaut haben.
Das Kopieren von Steuerelementen zusammen mit den Zellen funktioniert nur mit den Steuerelementen aus der Symbolleiste "Formular". Ich nehme an, dass du diese verwendet hast.
Die Adresse der verknüpften Zellen bleibt dabei unverändert. Sie muss manuell oder per Makro angepasst werden.
Die nachfolgenden beiden Makros kopieren die Zeile in der sich die aktive Zelle befindet ans Ende und passen die verknüpfte Zelle für die FormsObjekte an die neue Position an. Im Makro werden die Objekte auch sytematisch umbenannt. Das kannst du naürlich auch weglassen.
Ich halte es allerdings nicht für besonders sinnvoll ein Tabellenblatt mit Steuerlementen zuzupflastern. Da gibt es andere Lösungen wie Datengültigkeit oder auch ereignismakro-gesteuerte Steuerelemente aus der Symbolleiste "Steuerelemente Toolbox", die man immer an in der gerade selektierten Zelle anzeigen läßt.
Gruss
Franz

Sub ZeileKopieren()
With ActiveSheet
ActiveCell.EntireRow.Copy Destination:=.Cells(.UsedRange.Row + .UsedRange.Rows.Count, 1)
'    ActiveCell.EntireRow.Copy Destination:=.Cells(.Rows.Count, 1).End(xlUp).Offset(1, 0)'Alternative wenn immer Daten in Spalte A
End With
Call VerknuepfungFormsObjekt(2) 'DropDownListen in Spalte 2 (B)
Call VerknuepfungFormsObjekt(5) 'Checkboxen in Spalte 5 (E)
Call VerknuepfungFormsObjekt(7) 'Checkboxen in Spalte 7 (G)
ActiveCell.Select
End Sub
Sub VerknuepfungFormsObjekt(ByVal Spalte As Integer)
'Aktualisiert Verknüpfte Zelle eines FormsObjektes in Spalte gemäß Zellposition
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.Address Then
.ControlFormat.LinkedCell = .TopLeftCell.Address
.Select
.Name = "CBox_S" & Format(Spalte, "000") & "R" & Format(.TopLeftCell.Row, "0000")
End If
End If
Case xlDropDown
If .TopLeftCell.Column = Spalte Then
If .ControlFormat.LinkedCell <> .TopLeftCell.Address Then
.ControlFormat.LinkedCell = .TopLeftCell.Address
.Select
.Name = "Drop_S" & Format(Spalte, "000") & "R" & Format(.TopLeftCell.Row, "0000")
End If
End If
Case Else
'do nothing
End Select
End If
End With
Next
End Sub

Anzeige
AW: Zeile Anfügen
14.11.2006 03:13:19
Jon
Hallo Franz,
erstmals vielen Dank für deine Lösung.So wie du es gemacht hast funktioniert es auch :-)
Ich muss zugeben das ich noch am Anfang bin mit VBA und das erstmal Autodidaktisch alles mache. Deine Annahme "Da muss du also noch irgendeinen Fehler eingebaut haben" war vollig korrekt :-( hab es aber jetzt auch gefunden. Was muss ich jetzt in dein Macro ändern damit die Zeile nicht am ende der Tabelle Angefügt wird sondern hinter der letzte User Eingabe Zeile. Es ist glaub ich besser wenn ich ein Teil meine Tabelle hochlade damit du selbe sehen kannst was ich meine https://www.herber.de/bbs/user/38134.xls
Anzeige
AW: Zeile Anfügen
14.11.2006 08:51:34
fcs
Hallo Jon,
das wird deutlich komplizierter.
Einfacher wird es wenn du vor der Summenzeile eine Leerzeile einfügst, die in die Formeln der Summenzeilen mit einbezogen wird.
Andernfalls wird es kompliziert die Formeln der Summenzeile automatisch von Excel aktualisieren zu lassen.
Die extra Leerzeile würde die Sache extrem vereinfachen. Die tatsache, dass die linke obere Ecke der Ceckboxen immer in die darüberliegende Zeile ragt, macht das Ganze auch noch etwas aufwendiger.
Antwort heute Abend.
Du solltest dich aber schon mal zu der extra Leerzeile äußern
Gruss
Franz
Anzeige
AW: Zeile Anfügen
14.11.2006 19:09:43
Jon
hi Franz,
es ist kein Problem eine Leerzeile einzufügen. Checkbox hab ich auch korrigiert.
Hoffe es ist so wie du es gemeint hast :-)https://www.herber.de/bbs/user/38166.xls
AW: Zeile Anfügen
14.11.2006 22:31:27
fcs
Hallo Jon,
kopieren funktioniert jetzt.
Für die oberste Zeile musste ich noch einen Sonderfall einbauen.
Im Makro muss du hier ggf. noch zwei Zeilen anpassen und aus der 56 eine andere Nr. als 1. Zeile eintregen, die ggf kopiert werden soll.
https://www.herber.de/bbs/user/38184.xls
Gruss
Franz
Anzeige
AW: Zeile Anfügen
14.11.2006 23:45:41
Jon
hallo Franz,
ich weiss ich stehe heute neben mir aber "" Im Makro muss du hier ggf. noch zwei Zeilen anpassen und aus der 56 eine andere Nr. als 1. Zeile eintregen, die ggf kopiert werden soll. "" ? hast du dein Original macro geändert ? in 38184.xls find ich keine ? Sorry wenn ich mich anstelle Grippe wohl im Anmarsch ;-(
Danke dir herzlichst für dein Geduld
Jon
AW: Zeile Anfügen
15.11.2006 10:54:39
Jon
hi Franz,
so heute bin ich etwas (hoffentlich) klare im Kopf. Macro hab ich und es funzt super !
Einziges Problem liegt daran dass das ActiveCell immer kopiert wird.Da kann es passieren das der Cursor in eine Berechnungsfeld (also tiefer als Zeile 57 ) sich befindet und damit kopiere ich das falsche ? Kann ich die Berechnungsfelder für den Cursor sperren um das zu vermeiden? Dazu kommt auch das mein "Sortiermacro" die hinzugefügtem Zeilen nicht mit einbezieht? Bekomme langsam das Gefühl das ich mich hier wohl übernommen habe ;-(
gruß
Jon
Anzeige
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

Anzeige
AW: Zeile Anfügen
15.11.2006 20:50:40
Jon
hallo Franz !
ich bin begeistert :-)hab beide Macros am laufen und hab sie auch erfolgreich geändert und die Funktionieren (Trotz meine Änderungen )
Eine Frage hab ich noch, dann nerv ich nicht mehr. Die Zeile ""Set wks = Worksheets("Tabelle1") 'Tabelle in der sortiert werden soll"" Gibt es hier die Möglichkeit ohne bestimmte Name zu sortieren sowie "Aktivetabelle" oder muss ich dieser Macros für alle 12 Tabellen machen also für Tabelle "Jan""Feb"März""April" usw usw ?
Alle Tabellen sind im gleiche Arbeitsmappe.
Nochmals vielen Dank.....und auch für das Mut machen :-)
Gruß
Jon
Anzeige
AW: Zeile Anfügen
16.11.2006 01:00:03
fcs
Hallo Jon,
freut mich, dass du mit meiner Hilfe weitergekommen bist
Falls das Makro immer das gerade aktive Blatt bearbeiten soll, dann verwende die Zeile

Set wks = ActiveSheet

Gruss
Franz

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige