Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA Linie anzeigen und ausblenden

Forumthread: VBA Linie anzeigen und ausblenden

VBA Linie anzeigen und ausblenden
30.03.2020 20:08:15
Simon
Hallo,
ich benötige Hilfe bei dem Ein & Ausblenden einer Linie.
Und zwar möchte ich eine gestrichelte grüne Linie von Mitte unterer Rand Zelle(x,y) bis Mitte oberer Rand Zelle(c,v) anzeigen lassen. Das ganze soll mit eine ToggleButton an und ausblendbar sein.
Die Variablen x,y,c,v können über einen Bereich (B10:BI24) variieren.
Meine erste Lösung hat eine Linie erstellt wie ich es wollte und bei togglebutton=false habe ich alle shapes löschen lassen - was mir aber leider auch meine Kommentarfelder in dem Bereich gelöscht hatte was ich wiederum nicht möchte.
Nach endlosen Versuchen sieht mein Ansatz nun so aus aber es klappt immer noch nicht. Wenn ihr eine Idee für mich habt würde mich das echt freuen.
Dim x,y,c,v As integer
Dim shp As Shape
If Togglebutton = True Then
Set shp = ActiveSheet.Shapes.AddLine(x,y,c,v)
shp.Name = "today"
shp.Fill.ForeColor.SchemeColor = 10 (bringt Fehler)
With shp
.Visible = True
.DashStyle = msoLineDash (bringt Fehler)
.ForeColor.RGB = RGB(0, 176, 80) (bringt Fehler)
End With
Else
ActiveSheet.Shapes("today").Delete (ab und zu Fehler)
End If
End Sub
Anzeige

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Linie anzeigen und ausblenden
30.03.2020 21:14:36
Rolf
Hallo Simon
Du hast nicht erklärt, wodurch die Variablen variieren können.
Ich hab mal angenommen, durch das Selektieren von 2 Zellen.
Teste mal. (der Code gehört in die Tabelle mit dem Togglebutton)
Private Sub ToggleButton1_Click()
Dim x As Integer, y As Integer, c As Integer, v As Integer
Dim Rng As Range
ToggleButton1.Caption = "Aus"
On Error Resume Next
ActiveSheet.Shapes("today").Delete
On Error GoTo 0
If ToggleButton1 = True Then
ToggleButton1.Caption = "Ein"
If Selection.Count  2 Then Exit Sub
For Each Rng In Selection
If x = 0 Then x = Rng.Left + Rng.Width / 2
If y = 0 Then y = Rng.Top + Rng.Height
c = Rng.Left + Rng.Width / 2
v = Rng.Top
Next
With ActiveSheet.Shapes.AddConnector(msoConnectorStraight, x, y, c, v)
With .Line
.Visible = msoTrue
.ForeColor.RGB = RGB(0, 176, 80)
.Transparency = 0
.Visible = msoTrue
.DashStyle = msoLineLongDash
.Weight = 1
End With
.Name = "today"
End With
End If
End Sub
Gruß Rolf
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

VBA: Linien in Excel anzeigen und ausblenden


Schritt-für-Schritt-Anleitung

  1. Erstelle ein UserForm mit einem ToggleButton: Füge einen ToggleButton in dein Excel-Arbeitsblatt ein, um die Linie anzuzeigen oder auszublenden.

  2. Code hinzufügen: Öffne den VBA-Editor (Alt + F11) und füge den folgenden Code in das entsprechende Modul ein:

    Private Sub ToggleButton1_Click()
       Dim x As Integer, y As Integer, c As Integer, v As Integer
       Dim Rng As Range
    
       ToggleButton1.Caption = "Aus"
       On Error Resume Next
       ActiveSheet.Shapes("today").Delete
       On Error GoTo 0
    
       If ToggleButton1 = True Then
           ToggleButton1.Caption = "Ein"
           If Selection.Count <> 2 Then Exit Sub
    
           For Each Rng In Selection
               If x = 0 Then x = Rng.Left + Rng.Width / 2
               If y = 0 Then y = Rng.Top + Rng.Height
               c = Rng.Left + Rng.Width / 2
               v = Rng.Top
           Next
    
           With ActiveSheet.Shapes.AddConnector(msoConnectorStraight, x, y, c, v)
               With .Line
                   .Visible = msoTrue
                   .ForeColor.RGB = RGB(0, 176, 80)
                   .DashStyle = msoLineLongDash
                   .Weight = 1
               End With
               .Name = "today"
           End With
       End If
    End Sub
  3. Variablen festlegen: Stelle sicher, dass die Variablen x, y, c, und v durch die Auswahl von zwei Zellen variieren.

  4. Testen: Wähle zwei Zellen aus und klicke auf den ToggleButton, um die gestrichelte Linie anzuzeigen oder auszublenden.


Häufige Fehler und Lösungen

  • Fehler beim Hinzufügen der Linie: Wenn du den Fehler "Shape nicht gefunden" erhältst, stelle sicher, dass die Linie korrekt benannt wird, z.B. "today".

  • Linie wird nicht angezeigt: Überprüfe, ob der ToggleButton korrekt konfiguriert ist und die Auswahl von zwei Zellen tatsächlich erfolgt ist.

  • Kommentarfelder gelöscht: Wenn beim Löschen der Linie auch andere Shapes, wie Kommentarfelder, verschwinden, verwende On Error Resume Next, um Fehler beim Löschen zu vermeiden.


Alternative Methoden

  • Excel-Drucker Einstellungen: Wenn du die gestrichelte Linie nicht drucken möchtest, gehe zu den Druckereinstellungen und entferne die Linien unter "Seitenlayout".

  • Linien manuell ausblenden: Du kannst auch manuell durch Rechtsklick auf die Linie und Auswahl von "Ausblenden" oder "Löschen" die Linie entfernen, falls der ToggleButton nicht funktioniert.


Praktische Beispiele

  1. Zwei Zellen auswählen: Wähle die Zellen B10 und B20 aus, um eine Linie zwischen diesen Zellen zu zeichnen.

  2. Ändere die Farbe: Du kannst die RGB-Werte im Code anpassen, um die Farbe der gestrichelten Linie zu ändern.

  3. Verschiedene Linienstile: Experimentiere mit unterschiedlichen Linienstilen, indem du den .DashStyle änderst, z.B. msoLineSolid für eine durchgehende Linie.


Tipps für Profis

  • Nutze die Methode ActiveSheet.Shapes.AddLine, um direkt Linien zu zeichnen, wenn du keine ToggleButtons verwenden möchtest.

  • Implementiere eine Fehlerbehandlung, um unerwartete Probleme zu vermeiden.

  • Verwende Application.ScreenUpdating = False am Anfang des Codes, um das Flackern beim Zeichnen der Linie zu minimieren, und setze es am Ende wieder auf True.


FAQ: Häufige Fragen

1. Wie entferne ich alle Linien in Excel?
Du kannst alle Linien mit folgendem Code entfernen:

For Each shp In ActiveSheet.Shapes
    If shp.Name = "today" Then shp.Delete
Next shp

2. Wie blende ich eine gestrichelte Linie in Excel aus?
Um eine gestrichelte Linie auszublenden, kannst du die .Visible-Eigenschaft auf msoFalse setzen:

ActiveSheet.Shapes("today").Visible = msoFalse

3. Kann ich die Linie drucken?
Ja, wenn die Linie sichtbar ist, wird sie auch beim Drucken berücksichtigt. Stelle sicher, dass die Druckereinstellungen korrekt 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