Workshee_Change
#1
habe eine größere Menge Daten einzugeben und habe folgendes Problem:
Tabelle mit Spalten A:Z
Aufgabe:
Nach Eingabe in Spalte I soll eine neue Zeile erzeugt werden mit den Formatierungen und Formel der Zeile darüber. So habe
Ich habe nachstehendes Makro begonnen:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim KeyCells As Range
' The variable KeyCells contains the cells that will
    ' cause an alert when they are changed.
    Set KeyCells = Range("I1:I350")
 
If Not Application.Intersect(KeyCells, Range(Target.Address)) _
           Is Nothing Then
 
Kann mir jemand das Makro vervollständigen. Danke schon mal im Voraus!
Top
#2
Hallo,

warum willst du das unbedingt mit einem Makro lösen? Das geht doch problemlos mit Bordmitteln. Du musst nur deine Datensatzliste als Tabelle (Strg&L) formatieren, den Rest erledigt Excel selber.
Gruß Günter
Jeder Fehler erscheint unglaublich dumm, wenn andere ihn begehen.
angebl. von Georg Christoph Lichtenberg (1742-1799)
Top
#3
Hallo Günter,
Danke schon mal. Die Funktion mit Strg L habe ich bisher nicht gekannt. Werde das jetzt mal probieren.
Top
#4
Hallo Günter,
ich sende Dir mal meine bisherige Datei. Die Gliederung ist angepasst, dass ich relativ leicht mit den mir vorgebenen Vorlagen abstimmen und auswerten kann.

Leider sind meine Excelkenntnisse beschränkt und so behelfe ich mir oft mit Notlösungen. Vielleicht kannst Du mir noch ein paar Tips geben.

Vielen Dank Gerhard


Angehängte Dateien
.xlsm   Rechnungsprüfung.xlsm (Größe: 81,68 KB / Downloads: 5)
Top
#5
Hallöchen,

also, dass man es richtig versteht - Du hast einen Bereich von I1 bis I350 und wenn Du in dem Bereich irgendwo etwas eingibst soll eine Zeile darunter eingefügt werden mit den Formeln und Formatierungen der Zeile über der Eingabezeile oder aus der Eingabezeile.. ? Bei Eingabe in Zeile 1 wäre es allerdings schlecht möglich, die Formeln und Formatierung aus der Zeile darüber zu kopieren Sad

Im Prinzip könnte das so gehen:

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
'Wenn die Spalte = 9 (I) ist und nur eine Zelle gewählt, dann
If Target.Column = 9 And Target.Rows.Count = 1 Then
  'Zeile darunter einfuegen
  Rows(Target.Row + 1).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
  'Zeile kopieren
  Rows(Target.Row).Copy
  'Formeln einfuegen
  Rows(Target.Row + 1).PasteSpecial Paste:=xlPasteFormulas
  'Formate einfuegen
  Rows(Target.Row + 1).PasteSpecial Paste:=xlPasteFormats
  'Kopiermarkierung aus
  Application.CutCopyMode = False
  'Zelle wieder auswaehlen
  Target.Select
End If
End Sub
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
#6
Hallo Andr'e,
vielen Dank für die Hilfe. Makro funktioniert wie gewünscht. Dass auch Werte aus der zu kopierenden Zeile übernommen werden, ist kein Problem.
Schön, dass Du die einzelnen Schritte kommentiert hast, was das Verständnis sehr erleichtert  - Kompliment.
Noch eine Frage: gibt es eine Möglichkeit, zu verhindern, dass das Makro ausgeführt wird, wenn ich nachträglich in der Spalte I eine Änderung vornehmen muss, die zu keiner neuen Zeile führen soll?
Viele Grüße Gerhard
Top
#7
Hallöchen,

ich nehme an, dass es da nix gibt, woran Excel entscheiden kann, ob eine Zeile einzufügen ist oder nicht?
Da würde dann nur vor jedem Einfügen (am Anfang des Makros) eine Sicherheitsabfrage helfen, z.B.:
If MsgBox("Wollen Sie eine neue Zeile einf?gen?", vbYesNo) = vbNo Then Exit Sub
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
[-] Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:
  • gepf_04081949
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste