138 Aufrufe
Gefragt in Tabellenkalkulation von thomas0711 Einsteiger_in (19 Punkte)

Hallo liebe excel-freaks, 

ich habe ein einfaches makro geschrieben. Es soll an einer TabellenPosition vier Zeilen einfügen, diese dann in einer bestimmten Zelle mit einem Buchstaben ausfüllen und am Ende der Tabelle wieder vier Zeilen löschen. Das war bis hier hin alles kein Problem! Geschrieben hatte ich es für die Zelle B1. Nun möchte ich aber, dass das Makro an einer beliebigen Stelle innerhalb der Tabelle, die durch die aktuelle Cursorposition definiert ist, ausgeführt wird. Hat jemand eine Idee, wie diese variablen Positionen im Makro zu benennen sind.

Sub vierZeilen()
'
' vierZeilen Makro
' Fügt vier Zeilen ein, füllt in Spalte B in den neuen Zeilen "r" aus und löscht am Ende der Tabelle vier Zeilen.
'
' Tastenkombination: Strg+Umschalt+V
'
    Range("A4:AG7").Select
    Selection.Copy
    Selection.Insert Shift:=xlDown
    Range("B4").Select
    Application.CutCopyMode = False
    ActiveCell.FormulaR1C1 = "r"
    Range("B5").Select
    ActiveCell.FormulaR1C1 = "r"
    Range("B6").Select
    ActiveCell.FormulaR1C1 = "r"
    Range("B7").Select
    ActiveCell.FormulaR1C1 = "r"
    Range("A6:A7").Select
    Selection.AutoFill Destination:=Range("A6:A106"), Type:=xlFillDefault
    Range("A6:A106").Select
    Rows("103:106").Select
    Selection.Delete Shift:=xlUp
    Range("B4").Select
End Sub••••ˇˇˇˇ

Danke und liebe Grüße aus Stuttgart

Thomas

7 Antworten

0 Punkte
Beantwortet von m-o Profi (21.8k Punkte)
Hallo Thomas,

die aktuelle Zellposition bekommst ja über ActiveCell. Aber ich weiß nicht, wie dein Makro abhängig von der Position des Cursors aussehen soll.

Bei deinem Makro ist ja egal, ob der Curosor in B1, D5 oder ZZ999 steht.

Du kopierst ja zuerst den Bereich A4:AG7 und fügst ihn dann ab Zeile 8 wieder ein. Dies geschieht ja unabhängig von der Cursorposition - oder?

Mir ist nicht klar, wie das Einfügen des Buchstaben r für den Bereich B4 bis B8 und das Ausfüllen A6 bis A106 mit der Zelle B1 zusammenhängt. Und das Löschen der letzten 4 Zeilen dürfte wohl auch variabel sein, oder?

Gruß

M.O.
0 Punkte
Beantwortet von thomas0711 Einsteiger_in (19 Punkte)
Hallo M.O.,

ich habe das Makro nochmal von allem Ballast befreit, damit es übersichtlicher bleibt. Ich habe die Aufzeichnung in Zeile "B" begonnen. Und zwar habe ich die Zeilen 7 bis 10 markiert, kopiert und mit "einfügen Zellen" an gleicher Stelle eingefügt. Dadurch wurde das "w" in Zelle "B11" kopiert. Ich mache das deshalb so, damit sämtliche Formeln, die in der Originaltabelle vorhanden sind (also hier nicht!) kopiert werden. Von "B7" bis "B10" wird dann "r" geschrieben. So weit, so gut. Gehe ich nun aber mit dem Cursor in eine andere Zelle (z.B. in "B18") und führe dort das Makro aus, wird das Ergebnis wieder an die gleiche Stelle geschrieben, in der der Cursor stand, als das Makro aufgezeichnet wurde. Meine Frage lautet, können die festen Zellbezüge so benannt werden, dass das Makro immer von dort ausgeführt wird, wo sich der Cursor gerade befindet. Ist nun ganz schön ausführlich geworden. Hier findest du einen link zu einer Testtabelle

https://DieBirke.synology.me:5001/d/f/oRUa3aQ6effCXEZQspkxfiFbtv4tW4D3

LG

Thomas
0 Punkte
Beantwortet von thomas0711 Einsteiger_in (19 Punkte)
Hier kommt das Makro:

Sub ZeilenEinfügen()
'
' ZeilenEinfügen Makro
' Fügt Zeilen ein, schreibt "r" in die neuen Zeilen in der Spalte B
'
' Tastenkombination: Strg+Umschalt+W
'
    Rows("7:10").Select
    Selection.Copy
    Selection.Insert Shift:=xlDown
    Range("B7").Select
    Application.CutCopyMode = False
    ActiveCell.FormulaR1C1 = "r"
    Range("B8").Select
    ActiveCell.FormulaR1C1 = "r"
    Range("B9").Select
    ActiveCell.FormulaR1C1 = "r"
    Range("B10").Select
    ActiveCell.FormulaR1C1 = "r"
    Range("B11").Select
End Sub
0 Punkte
Beantwortet von m-o Profi (21.8k Punkte)

Hallo Thomas,

deine Testtabelle kann ich hier leider nicht öffnen (gesperrt). Du könntest sie hier noch einmal im Forum hochladen (ansonsten kann ich sie mir erst heute abend zu Hause ansehen). Eine Anleitung dazu findest du hier: Klick mich!

Du fängst in B7 an und kopierst die Zeilen 7 bis 10. Bedeutet das, dass wenn der Cursor z.B. in Zelle B18 steht die Zeilen 18 bis 21 kopiert und eingefügt werden sollen und ab ab B19 die r eingefügt werden sollen?

Gruß

M.O.

0 Punkte
Beantwortet von thomas0711 Einsteiger_in (19 Punkte)

Hallo M.O.

genau so soll das Makro arbeiten. Die Tabelle lade ich jetzt hier hoch.https://supportnet.de/forum/?qa=blob&qa_blobid=2521016769721451298

LG aus Stuttgart

Thomas

0 Punkte
Beantwortet von m-o Profi (21.8k Punkte)

Hallo Thomas,

schau mal, ob das so funktioniert, wie du willst:

Sub Zeileneinfuegen_neu()
Dim intZeile As Integer

'Zeilen selektieren, aktuelle Zeile und drei weitere Zeilen
With Rows(ActiveCell.Row & ":" & ActiveCell.Row + 3)
   .Copy                   'Kopieren
   .Insert Shift:=xlDown   'Zeilen einfügen
End With

Application.CutCopyMode = False

'Buchstaben r einfügen
For intZeile = ActiveCell.Row To ActiveCell.Row + 3
   Cells(intZeile, ActiveCell.Column) = "r"
Next intZeile

End Sub

Gruß

M.O.

0 Punkte
Beantwortet von thomas0711 Einsteiger_in (19 Punkte)
Hallo M.O.,

großartig, herzlichen Dank!

LG aus Stuttgart

Thomas
...