Striche mittles VBA ziehen

Hallo Experten,
ich habe mal wieder ein Problemchen.
muß in einer Excel Tabelle ( 8Spalten / 49 Zeilen ) Daten eintragen.
Nachdem ich das Formular ausgefüllt habe, muß ich von der ersten leeren Zelle in Spalte A
nach recht unten (H49) und von der ersten leeren Zelle in Spalte H
nach links unten (A49) einen Strich ziehen, damit nach dem Ausdruck keiner mehr was eintragen kann.
Nun könnte ich ja nach dem Ausdruck ein Lineal nehmen, aber im Zeitalter der Mikroelektronik :smile:
mit Aufzeichnen habe ich schon probiert.
Das klappt wunderbar, allerdings ist die Anfangskoordinate nicht festgelegt, da sich die Anzahl der
Eingaben in den Spalten A und H ändert.
Das Makro müßte folgendes können:

  • suche erste freie Zelle in Spalte A (das bekomme ich mit VBA hin)
  • merke dir die Zelle und zieh von dort aus einen Strich nach H49 (welche ja feststeht)
  • suche erste freie Zelle in Spalte H
  • merke dir die Zelle und zieh von dort aus einen Strich nach A49 (welche ja feststeht)
    geht das ?

Vielen Dank erstmal im Voraus
Gruß Roland

Nachdem ich das Formular ausgefüllt habe, muß ich von der
ersten leeren Zelle in Spalte A
nach recht unten (H49) und von der ersten leeren Zelle in
Spalte H
nach links unten (A49) einen Strich ziehen, damit nach dem
Ausdruck keiner mehr was eintragen kann.
Das Makro müßte folgendes können:

  • suche erste freie Zelle in Spalte A (das bekomme ich mit VBA
    hin)

Hi rst,
aktiviere die leere Stelle in A und dann folgendes Makro:
Sub linie()
ActiveSheet.Shapes.AddLine(ActiveCell.Left, ActiveCell.Top, [i50].Left, [i50].Top).Select
ActiveSheet.Shapes.AddLine(ActiveCell.Left, [i50].Top, [i50].Left, ActiveCell.Top).Select
ActiveCell.Select
End Sub

Gruß
Reinhard

Sub linie()
ActiveSheet.Shapes.AddLine(ActiveCell.Left, ActiveCell.Top,
[i50].Left, [i50].Top).Select
ActiveSheet.Shapes.AddLine(ActiveCell.Left, [i50].Top,
[i50].Left, ActiveCell.Top).Select
ActiveCell.Select
End Sub

Gruß
Reinhard

Hallo Reinhard,
besten Dank, es funktioniert super.
Aber nun mal nur so zum Verständnis:
kannst Du mir die einzelnen Teile des Makros erklären ?
was heißt [i50] ? woher weiß die Maschine die einzelnen Zellbezüge?
O Wunder über Wunder

Vielen Dank erstmal
Gruß Roland

Sub linie()
ActiveSheet.Shapes.AddLine(ActiveCell.Left, ActiveCell.Top,
[i50].Left, [i50].Top).Select
ActiveSheet.Shapes.AddLine(ActiveCell.Left, [i50].Top,
[i50].Left, ActiveCell.Top).Select
ActiveCell.Select
End Sub

besten Dank, es funktioniert super.
Aber nun mal nur so zum Verständnis:
kannst Du mir die einzelnen Teile des Makros erklären ?
was heißt [i50] ? woher weiß die Maschine die einzelnen
Zellbezüge?

Hallo Rst,
[i50] ist nur eine andere Schreibweise für Range(„i50“).
Mir .Top bzw. .Left erhält man die x bzw. y-Koordinaten des linken oberen Eckpunktes einer Zelle, bei Zelle A1 ist dies x=0 und y=0.
Der rechte untere Eckpunkt von H49 ist der linke obere Eckpunkt von I50, deshalb die I50.
.Addline(x1,y1,x2,y2) zieht dann eine Linie vom Punkt mit den Koordinaten x1/y1 zum Punkt x2/y2.
Gruß
Reinhard

Danke, das hilft mir schon weiter.
Tschüß bis vielleicht zum nächsten Mal
Grüße Roland