Live-Forum - Die aktuellen Beiträge
Datum
Titel
16.10.2025 17:40:39
16.10.2025 17:25:38
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA Linienlänge abhängig von Zellwerten -

VBA Linienlänge abhängig von Zellwerten -
05.09.2018 09:35:19
Zellwerten
Hallo liebe Forenmitglieder,
in diesem Beitrag aus 2009

https://www.herber.de/forum/archiv/ _
1108to1112/1108749_zeichnen_in_excel_abhaengig_von_daten.html

hat Christian eine ganz tolle Lösung geschrieben mit der man die Länge/Form und Winkel von  _
Linien in Abhängigkeit von Zellinhalten erstellen lassen kann.
Kann mir bitte jemand sagen, wie man den Bereich in dem das VBA Script nach Werte sucht auf die  _
_
Zeilen 1-10 beschränken kann?
Ich möchte gerne unter der Tabelle noch Werte eingeben können (Zahlen), dies geht jetzt nicht,   _
_
denn sobald unterhalb der Zeile 6 irgend etwas steht, gibt es einen Laufzeitfehler.
Vielen Dank schon vorab!
Viele Grüße
Detlef
hier das Script von ihm aus 2009:
Option Explicit
Sub DrawLines()
Dim sh As Shape, intStyle%, i&
Dim sngBeginX!, sngBeginY!, sngEndX!, sngEndY!
Dim sngLen!, sngAng!, sngWght!
Dim blnBeginArrow As Boolean, blnEndArrow As Boolean
With Sheets("Tabelle2")
For Each sh In .Shapes
If sh.Name Like "Line*" Then sh.Delete
Next
For i = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
sngBeginX = .Cells(i, 1)
sngBeginY = .Cells(i, 2)
sngLen = .Cells(i, 3)
sngAng = .Cells(i, 4) / 180 * Application.Pi
sngEndX = sngBeginX + sngLen * Cos(sngAng)
sngEndY = sngBeginY - sngLen * Sin(sngAng)
blnBeginArrow = .Cells(i, 5)
blnEndArrow = .Cells(i, 6)
sngWght = .Cells(i, 7)
intStyle = .Cells(i, 8)
Set sh = .Shapes.AddLine(sngBeginX, sngBeginY, sngEndX, sngEndY)
If blnBeginArrow Then
sh.Line.BeginArrowheadStyle = msoArrowheadTriangle
sh.Line.BeginArrowheadWidth = msoArrowheadWidthMedium
sh.Line.BeginArrowheadLength = msoArrowheadLengthMedium
End If
If blnEndArrow Then
sh.Line.EndArrowheadStyle = msoArrowheadTriangle
sh.Line.EndArrowheadWidth = msoArrowheadWidthMedium
sh.Line.EndArrowheadLength = msoArrowheadLengthMedium
End If
sh.Line.Weight = sngWght
sh.Line.DashStyle = intStyle
sh.Line.Visible = msoTrue
Next
End With
End Sub


		
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Linienlänge abhängig von Zellwerten -
05.09.2018 09:50:01
Zellwerten
Hallo Detlef,
statt
For i = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row

das
For i = 1 To 10
Gruß Werner
AW: VBA Linienlänge abhängig von Zellwerten -
05.09.2018 09:51:51
Zellwerten
Hallo
ungetestet und ohne den ganzen Code studiert zu haben...
aus         For i = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
mache       For i = 1 To 10

LG UweD
Anzeige
AW: VBA Linienlänge abhängig von Zellwerten -
05.09.2018 10:14:40
Zellwerten
Hallo Werner, Hallo Uwe,
erst einmal vielen Dank für die ultraschnelle Reaktion.
Leider habe ich dann eine Fehlermeldung:
Userbild
Ich hänge auch meine Excel datei mit an. in Tabelle1 wäre etwa der Aufbau auf dem ich weitermachen möchte, Tabelle2 funktioniert wenn ich den Originalcode von Christian verwende.
https://www.herber.de/bbs/user/123766.xlsm
Es geht um die grafische Darstellung von einem Rechteck für die Berechnung von Tunnel Beleuchtung:-)
Danke schon mal wieder vorab!
Viele Grüße aus dem Chiemgau
Detlef
Anzeige
AW: VBA Linienlänge abhängig von Zellwerten -
05.09.2018 10:37:53
Zellwerten
Hallo nochmal
du hattest geschrieben von 1 bis 10.
in 1 sind aber die Überschriften.
Datentabelle geht nur bis Zeile 6
also muss es heißen
For i = 2 To 6
LG UweD
AW: VBA Linienlänge abhängig von Zellwerten -
05.09.2018 11:07:41
Zellwerten
DANKE!
Jetzt geht es, Wahnsinn das man hier so tolle und kompetente Hilfe bekommt.
LG
Detlef
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

VBA Linienlänge abhängig von Zellwerten anpassen


Schritt-für-Schritt-Anleitung

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Füge ein neues Modul hinzu:

    • Klicke mit der rechten Maustaste im Projektfenster und wähle Einfügen > Modul.
  3. Kopiere den folgenden Code in das Modul:

    Option Explicit
    Sub DrawLines()
       Dim sh As Shape, intStyle%, i
       Dim sngBeginX!, sngBeginY!, sngEndX!, sngEndY!
       Dim sngLen!, sngAng!, sngWght!
       Dim blnBeginArrow As Boolean, blnEndArrow As Boolean
       With Sheets("Tabelle2")
           For Each sh In .Shapes
               If sh.Name Like "Line*" Then sh.Delete
           Next
           For i = 2 To 6 ' Hier auf die Zeilen 2 bis 6 beschränken
               sngBeginX = .Cells(i, 1)
               sngBeginY = .Cells(i, 2)
               sngLen = .Cells(i, 3)
               sngAng = .Cells(i, 4) / 180 * Application.Pi
               sngEndX = sngBeginX + sngLen * Cos(sngAng)
               sngEndY = sngBeginY - sngLen * Sin(sngAng)
               blnBeginArrow = .Cells(i, 5)
               blnEndArrow = .Cells(i, 6)
               sngWght = .Cells(i, 7)
               intStyle = .Cells(i, 8)
               Set sh = .Shapes.AddLine(sngBeginX, sngBeginY, sngEndX, sngEndY)
               If blnBeginArrow Then
                   sh.Line.BeginArrowheadStyle = msoArrowheadTriangle
                   sh.Line.BeginArrowheadWidth = msoArrowheadWidthMedium
                   sh.Line.BeginArrowheadLength = msoArrowheadLengthMedium
               End If
               If blnEndArrow Then
                   sh.Line.EndArrowheadStyle = msoArrowheadTriangle
                   sh.Line.EndArrowheadWidth = msoArrowheadWidthMedium
                   sh.Line.EndArrowheadLength = msoArrowheadLengthMedium
               End If
               sh.Line.Weight = sngWght
               sh.Line.DashStyle = intStyle
               sh.Line.Visible = msoTrue
           Next
       End With
    End Sub
  4. Ändere die Zeilenanzahl in der Schleife:

    • Ersetze For i = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row durch For i = 2 To 6, um den Bereich auf die Zeilen 2 bis 6 zu beschränken.
  5. Führe das Makro aus: Kehre zu Excel zurück, gehe zu Entwicklertools > Makros, wähle DrawLines und klicke auf Ausführen.


Häufige Fehler und Lösungen

  • Laufzeitfehler beim Ausführen des Makros:

    • Ursache: Der Fehler tritt auf, wenn du versuchst, über die Zeilen hinaus zu iterieren, in denen keine Daten vorhanden sind.
    • Lösung: Stelle sicher, dass in den Zeilen 2 bis 6 gültige Werte vorhanden sind und passe die Schleife entsprechend an.
  • Linien werden nicht angezeigt:

    • Ursache: Möglicherweise sind die Koordinaten für die Linien falsch.
    • Lösung: Überprüfe die Werte in den Zellen, die die Startkoordinaten (Spalte 1 und 2) und die Längen (Spalte 3) enthalten.

Alternative Methoden

Eine alternative Methode zur grafischen Darstellung von Linien ist die Nutzung von Excel-Diagrammen. Hier kannst du auch Linien basierend auf Zellwerten zeichnen, ohne VBA zu verwenden. Erstelle dazu ein Liniendiagramm und nutze die Option, um die Daten aus den relevanten Zellen zu beziehen.


Praktische Beispiele

Angenommen, du hast folgende Werte in deiner Excel-Tabelle:

A (X-Start) B (Y-Start) C (Länge) D (Winkel) E (Beginne mit Pfeil) F (Ende mit Pfeil) G (Liniengewicht) H (Stil)
10 20 15 45 TRUE FALSE 2 1
15 25 10 90 FALSE TRUE 3 2

Das oben genannte Skript erstellt Linien, die von (10, 20) nach (25, 35) und von (15, 25) nach (15, 35) zeichnen.


Tipps für Profis

  • Optimiere den Code: Verwende With-Anweisungen, um die Lesbarkeit zu verbessern und den Code effizienter zu gestalten.
  • Debugging: Nutze MsgBox oder Debug.Print, um Werte während der Ausführung des Makros zu überprüfen.
  • Fehlerbehandlung: Implementiere Fehlerbehandlungsroutinen, um unerwartete Laufzeitfehler abzufangen.

FAQ: Häufige Fragen

1. Wie kann ich die maximale Zeilenanzahl ändern?
Du kannst die Zeilenanzahl in der Schleife anpassen, indem du die Zahl in For i = 2 To 6 änderst.

2. Funktioniert dieses Skript auch in Excel 365?
Ja, das Skript funktioniert in Excel 365 und anderen Versionen, die VBA unterstützen.

3. Was mache ich, wenn ich mehr Daten habe?
Erweitere einfach den Bereich in der Schleife auf die entsprechenden Zeilen, in denen deine Daten vorhanden sind.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige