Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1792to1796
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Dynamisches Diagramm

Dynamisches Diagramm
18.11.2020 16:41:02
Gerald
Hallo,
ich habe im Archiv folgendes zum Thema "Dynamisches Diagramm" gefunden:
"Auf Schaltflächendruck soll das bestehende Diagramm - falls vorhanden - gelöscht und ein neues erstellt werden. Die Anzahl der Spalten und Zeilen soll dynamisch sein."
Lösung: Den nachstehenden Code in ein Standardmodul eingeben, einer Schaltfläche zuweisen und starten.
  • Sub CreateAndDelete()
    Dim cht As Chart
    On Error Resume Next
    ActiveSheet.ChartObjects(1).Delete
    On Error GoTo 0
    Set cht = Charts.Add
    cht.ChartType = xlColumnClustered
    cht.SetSourceData Source:=Sheets("Tabelle1").Range("A1").CurrentRegion
    cht.Location Where:=xlLocationAsObject, Name:="Tabelle1"
    Range("A1").Select
    End Sub
    


  • Die Beispielmappe gibt es hier:
    https://www.herber.de/mailing/Diagramm_dynamisch_erstellen.htm
    Das funktioniert auch soweit Super.
    Vorraussetzung: Die Tabelle und das Diagramm ist auf einem Blatt, und es befindet sich nur ein Diagramm dort.
    Aber was mache ich wenn ich auf einem Tabellenblatt 2 oder mehr Diagramme habe?
    Wie kann ich in dem Code mein "Diagramm3" unterbringen, so das er nur dieses löscht und wieder erzeugt dynamisch?
    Und was muss ich ergänzen, um die Tabelle auf Sheet(1) zu belassen und das Diagramm auf Sheet(2).
    Wäre Super wenn mir jemand helfen könnte.

    22
    Beiträge zum Forumthread
    Beiträge zu diesem Forumthread

    Betreff
    Datum
    Anwender
    Anzeige
    AW: Dynamisches Diagramm
    18.11.2020 17:15:55
    ralf_b
    ActiveSheet.ChartObjects(1).Delete 'erstes Objekt der Liste
    chartobjects ist eine Liste. In der kannst du suchen oder mittels ChartObjects(diagramm-name ) auf dein bestimmtes Objekt zugreifen.
    AW: Dynamisches Diagramm
    18.11.2020 17:37:31
    Gerald
    Hi Ralf,
    ich habe mal den Code angepasst in der von Dir beschriebenen Zeile:
  • Sheets(2).ChartObjects(Diagramm1).Delete

  • Statt ActiveSheet habe ich auf Sheet(2) verwiesen und mein Diagramm Namen eingegeben.
    Bekomme aber den Fehler: Anwendungs- oder Object definerterfehler
    Meine Beispielmappe habe ich mal hochgeladen.
    https://www.herber.de/bbs/user/141677.xlsm
    Gruß Gerald
    Anzeige
    AW: Dynamisches Diagramm
    18.11.2020 17:39:19
    ralf_b
    das könnte es schon sein.
    Sheets(2).ChartObjects(Diagramm1).Delete
    der name ist ein text also ""
    Sheets(2).ChartObjects("Diagramm1").Delete
    AW: Dynamisches Diagramm
    18.11.2020 17:49:01
    Gerald
    Danke Dir,
    habe den Namen "Diagramm 1" in Anführungszeichen gesetzt und schon tut es der Code, aber nur einmal.
    Er kopiert beim aufrufen das Diagramm von Sheet(2) auf Sheet(1) wo die Tabelle steht.
  • 
    Sub CreateAndDelete()
    Dim cht As Chart
    On Error Resume Next
    Sheets(2).ChartObjects("Diagramm 1").Delete
    On Error GoTo 0
    Set cht = Charts.Add
    cht.ChartType = xlColumnClustered
    cht.SetSourceData Source:=Sheets("Tabelle1").Range("B8").CurrentRegion
    cht.Location Where:=xlLocationAsObject, Name:="Tabelle1"
    Range("B8").Select
    End Sub
    

  • Was ist jetzt noch falsch?
    Anzeige
    update
    18.11.2020 17:45:00
    ralf_b
    die fettmarkierten Bereiche sind zu beachten
    einmal ein Leerzeichen und das andere ist der Ort wo das Chart eingefügt werden soll.
    Sub CreateAndDelete()
    Dim cht As Chart
    On Error Resume Next
    Sheets(2).ChartObjects("Diagramm 1").Delete
    On Error GoTo 0
    Set cht = Charts.Add
    cht.ChartType = xlColumnClustered
    cht.SetSourceData Source:=Sheets("Tabelle1").Range("B8").CurrentRegion
    cht.Location Where:=xlLocationAsObject, Name:="Tabelle2"
    Range("B8").Select
    End Sub
    

    AW: update
    18.11.2020 17:51:53
    Gerald
    Danke, das war es. Jetzt funktioniert es.
    Werde jetzt nochmal probieren mit mehreren Diagrammen.
    Anzeige
    AW: update
    18.11.2020 17:57:07
    Gerald
    Funktioniert soweit, auch mit mehreren Diagrammen.
    Ein Problem gibt es aber noch:
    Wenn ich den Code ausführe wird das neue Diagramm immer in der Mitte von Sheet(2) erstellt.
    Es sollte aber den gleichen Platz haben wie vorher.
    Kann man das auch im Code einstellen?
    AW: update
    18.11.2020 18:22:54
    Gerald
    Hallo ralf,
    habe was gefunden, was auch ganz gut funktioniert.
  • 
    Sub CreateAndDelete()
    Dim cht As Chart
    On Error Resume Next
    Sheets(2).ChartObjects("Diagramm 1").Delete
    On Error GoTo 0
    Set cht = Charts.Add
    cht.ChartType = xlColumnClustered
    cht.SetSourceData Source:=Sheets("Tabelle1").Range("B8").CurrentRegion
    cht.Location Where:=xlLocationAsObject, Name:="Tabelle2"
    Range("B8").Select
    'Diagramm_positionieren
    Sheets(2).ChartObjects("Diagramm 1").Activate
    Sheets(2).ChartObjects("Diagramm 1").Left = Range("B6").Left
    Sheets(2).ChartObjects("Diagramm 1").Top = Range("B6").Top
    Sheets(2).ChartObjects("Diagramm 1").Height = 200
    Sheets(2).ChartObjects("Diagramm 1").Width = 300
    End Sub
    

  • Noch einfacher wäre es natürlich, wenn ich in Excel irgendwo rauslesen könnte an welcher X und Y Position mein Diagramm momentan steht und welche Größe es hat.
    Anzeige
    AW: update
    18.11.2020 18:27:10
    ralf_b
    Echt jetzt?
    das stellt dich vor Probleme?
    Die top und left-Eigenschaft in je eine Variable schreiben, bevor du das alte Diagramm löschst, ist doch echt nicht so schwer. Komm, das kriegst du hin.
    AW: update
    18.11.2020 18:56:12
    Gerald
    ich werde mich morgen dran versuchen, für heute brummt der Kopf.
    Gruß
    Gerald
    AW: Dynamisches Diagramm
    18.11.2020 19:11:13
    Beverly
    Hi Gerald,
    weshalb solch ein Aufwand? Das geht völlig ohne VBA, wenn du deine Daten in eine intelligente Tabelle schreibst: dann erweitert sich das Diagramm sowohl in horizontaler als auch vertikaler Richtung der Daten.
    https://www.herber.de/bbs/user/141683.xlsm


    Anzeige
    AW: Dynamisches Diagramm
    18.11.2020 19:27:29
    Gerald
    Hi Karin
    eigentlich wollte ich Feierabend machen, aber das interessiert mich jetzt doch.
    Wie genau funktioniert das?
    Und was mir aufgefallen ist in Deinem Dynamischen Diagramm, er fügt zwar Säulen automatisch hinzu, aber wenn ich aus der Tabelle mal die letzten daten lösche muss ich manuell eingreifen um die letzten jetzt leeren Plätze im Diagramm wieder verschwinden zu lassen
    Gruß Gerald
    AW: Dynamisches Diagramm
    18.11.2020 19:45:03
    Beverly
    Hi Gerald,
    sobald Spalten hinzugefügt werden, wird eine neue Datenreihe ins Diagramm eingefügt. Werden neue Zeilen in der Tabelle hinzugefügt, dann wird die Anzahl der Säulen der bereits vorhandenen Datenreihen erhöht. Die Grundlage bildet also der Aufbau (Anzahl an Spalten und Anzahl an Zeilen) der intelligenten Tabelle. Um Daten zu löschen, muss die intelligente Tabelle um die entsprechenden Spalten/Zeilen verkleinert werden. Das geht aber ganz einfach,indem du unten rechts in der Tabelle die Ecke des Rahmens mit dem Cursor "anfasst" und entsprechend verschiebst.


    Anzeige
    AW: Dynamisches Diagramm
    18.11.2020 20:06:03
    Gerald
    Hi Karin,
    das mit der kleinen Ecke am Rahmen unten rechts habe ich gesehen.
    Aber ich versuche etwas für verschiedene Abteilungen bereitzustellen, die wachsen (also mehr Zeilen) und auch schrumpfen (weniger Zeilen).
    Da es einfach zu aufwendig ist X Abteilungen zu erklären, das wenn MA die Abt. verlassen, sie unten rechts die Ecke des Rahmens nach oben schieben müssen, suche ich ja eine Möglichkeit wo die Dynamik des Diagramms in beide Richtungen geht, also auch ohne die ecke unten rechts anfassen zu müssen.
    AW: Dynamisches Diagramm
    18.11.2020 21:00:26
    Beverly
    Hi Gerald,
    der Vorteil einer intelligenten Tabelle liegt doch m.E. klar auf der Hand: das Diagramm erweitert sich automatisch, wenn neue Mitarbeiter hinzukommen und die Anzahl der Jahre sich vergrößert. Letzteres ist doch sicher eher der Fall als dass sich die Anzahl der Jahre (Spalten) verringert. Das "Problem" tritt deshalb also normalerweise nur dann auf, wenn sich die Anzahl der MA (Zeilen) verringert. Wenn die Tabelle dazu nicht wie oben beschrieben verkleinert wird reicht es aus, wenn die betreffende Zeile im Tabellenblatt gelöscht wird - und das sollte doch jeder MA, der mit Excel arbeitet, beherrschen.


    Anzeige
    AW: Dynamisches Diagramm
    18.11.2020 21:47:20
    Gerald
    Hi Karin,
    auf der einen Seite hast Du ja Recht. Jeder sollte in der Lage sein auch manuell Hand an der Tabelle anzulegen, wenn sich die "MA" Anzahl verringert.
    Jedoch läuft das eigentliche Tool komplett über Eingabemasken ab (also Userforms) und deswegen möchte ich den eigentlichen Ablauf durch das Tool nicht unterbrechen mit dem Hinweis: "Bitte jetzt Userform schließen und die Tabelle manuell verkleinern".
    Das wäre nicht Nutzer freundlich. Und wir sprechen hier nicht von 10 Nutzern, nein das geht schon in den 3-4 stelligen Bereich.
    Meine Beispieltabelle hat nichts mit der Wirklichkeit des Tools zu tun. Es ist ein Beispiel, und mir geht es darum automatisch nach löschen einer Zeile auch das Diagramm automatisch anzupassen.
    Gruß Gerald
    Anzeige
    AW: Dynamisches Diagramm
    18.11.2020 22:41:13
    Beverly
    Hi Gerald,
    Zitat: "und mir geht es darum automatisch nach löschen einer Zeile auch das Diagramm automatisch anzupassen."
    Wie werden die Zeilen gelöscht? Indem die Zeile im Tabellenblatt gelöscht wird? Dann gibt es doch erst Recht kein Problem - ich hatte doch bereits geschrieben, dass beim Löschen einer Zeile die Tabelle sich automtisch verkleinert. Da muss niemand Hand anlegen und dazu das UserForm schließen...


    AW: Dynamisches Diagramm
    18.11.2020 23:22:19
    Gerald
    Hallo Karin,
    ich habe mich falsch ausgedrückt.
    Es gibt eine Tabelle aus der ein Diagramm entsteht.
    Mit Deiner hilfe funktioniert es, das der User weitere Daten in die Tabelle einfügen kann und das Diagramm passt sich an.
    Jetzt passiert es aber, das der User nicht die ganze Zeile löscht, sondern z.B. die Zellen die nicht mehr benötigt werden.
    Beispiel:
    User A nutzt das Tool und wird beim Anfang aufgefordert in Spalte B, Spalte E und Spalte F die benötigten Daten einzugeben. Danach springt er wieder in die Userform
    Somit entsteht eine Tabelle, aus der ein Diagramm erzeugt wird.
    Danach wird er mittels Userform durch weitere Schritte geleitet.....
    Jetzt kommt es aber vor das einige Eingaben des Users im nächsten Monat nicht mehr benötigt werden.
    Dies können aber IMMER nur Eingaben am Ende der Tabelle sein, nie irgendwo zwischendurch.
    Also kann keine Leerzelle entstehen.
    Jetzt löscht der User aber nicht die gesamte Zeile, sondern nur den Zellinhalt der letzten Zeile.
    Wenn die Zeile gelöscht wird, gibt es ja kein Problem.
    Aber es sind die Zellen, z.B. B10 und E10 sowie F10 werden gelöscht, auch dann soll das Diagramm Dynamisch angepasst werden.
    Sorry, wenn ich es falsch geschildert habe
    AW: Dynamisches Diagramm
    18.11.2020 23:39:18
    Gerald
    UPDATE:
    Entschuldige bitte, jetzt haben wir die gesamte Zeit darüber geredet wie ich möchte das es funktioniert.
    Allerdings habe ich bis jetzt nicht begriffen wie eine intelligente Tabelle erzeugt wird, so wie in der Beispieltabelle die Du mir zur Verfügung gestellt hast.
    Könntest Du mir den weg dahin beschreiben?
    Als Anfänger ist man wirklich für jede Hilfe dankbar.
    AW: Dynamisches Diagramm
    19.11.2020 00:00:42
    Beverly
    Markiere den Bereich mit deinen Daten -&gt Register: Einfügen -&gt Befehlsgruppe: Tabellen -&gt Schalter: Tabelle. Da deine Daten eine Überschrift haben musst du dann noch den Punkt "Tabelle hat Überschriften" aktivieren.


    AW: Dynamisches Diagramm
    18.11.2020 23:57:12
    Beverly
    Hi Gerald,
    wenn nur B10, E10 und F10 (und nicht die gesamte Zeile, also alle Daten in der Zeile) gelöscht werden bleibt der Wertebereich des Diagramms doch trotzdem bis Zeile 10 erhalten, weil du mit Sheets("Tabelle1").Range("B8").CurrentRegion für die Festlegung des Bereichs im Code arbeitest. Da ja in C10 und D10 noch Werte stehen, gibt dieser Befehl als Bereichsadresse B8:F10 aus - das Diagramm wird also in Wahrheit gar nicht angepasst, d.h. es wird nicht um 1 Zeile verkürzt. Weshalb also werden überhaupt nur B10, E10 und F10 geleert, wenn die Daten zum Datensatz in Zeile 10 eigentlich komplett gelöscht werden müssten, damit das Diagramm einen Datensatz weniger anzeigen kann? Du hast da irgendwie einen groben Denkfehler.


    Links zu Excel-Dialogen

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige