Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1344to1348
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

Diagrammgröße unter Bedingung

Diagrammgröße unter Bedingung
07.01.2014 10:18:58
Flo
Liebe Excelgemeinde,
ich hätte ein kleines Problem, bei dem ihr mir sicherlich helfen könnt. Ich möchte auf einem Tabellenblatt die Größe von mehreren Diagrammen per VBA verändern. Wie ihr im angehängten Dokument sehen könnt, habe ich drei Diagramme in diesem Tabellenblatt mit vier, fünf und sechs Datenreihen bzw. Fragen, die ausgewertet werden sollen. Das ist die Ausgangsituation.
Im nächsten Schritt wird ein Makro (das ich hier aus Gründen der Einfachheit nicht eingebaut habe) ausgeführt, das die Zeilen löscht, wenn die betreffende Frage nicht ausgewertet werden soll. Es kann also sein, dass z.B. in Diagramm 1 nur noch eine Frage ausgewertet werden soll. Problem: Das Diagramm sieht dann verzerrt aus, da die Balken zu dick werden. Daher möchte ich die Diagrammgröße ensprechend per VBA anpassen, je nach dem, wie viele Kategorien/Fragen nach dem ausgeführten Makro noch enthalten sind.
Um es einfach zu halten, sollen für alle drei Diagramme die gleichen Regeln gelten. Beispiel:
Bei drei Fragen im Diagramm: Diagrammhöhe x und Höhe der Zeichnungsfläche x
Bei zwei Fragen im Diagramm: Diagrammhöhe y und Höhe der Zeichnungsfläche y
Bekommt das jemand für mich hin? Das wäre großartig! Meine VBA Kenntnisse sind stark limitiert, daher habe ich keine Vorarbeit leisten können.
Vielen Dank schon einmal!
Gruß Florian
https://www.herber.de/bbs/user/88704.xlsx

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Diagrammgröße unter Bedingung
07.01.2014 16:12:57
Beverly
Hi Flroian,
dein Code zum Löschen wäre schon wichtig zu kennen, zumal die Anpassung der Diagrammhöhe genau dort erfolgen muss.


AW: Diagrammgröße unter Bedingung
07.01.2014 16:50:45
Flo
Hallo Beverly,
Danke schon einmal für die Hilfe. Anbei die neue Datei.
Kurze Erklärung zum Makro: Wenn auf dem Tabellenblatt "Tabelle" die Daten zu einer Frage gelöscht werden, fehlt auf dem Tabellenblatt "Grafiken" der Bezug, da per Formel darauf zugegriffen wird. Das Makro löscht dann alle Zeilen, in der #BEZUG! steht.
Ich hoffe, du kannst was damit anfangen!
VG
Florian
https://www.herber.de/bbs/user/88709.xlsm

Anzeige
AW: Diagrammgröße unter Bedingung
07.01.2014 21:13:28
Beverly
Hi Florian,
vielleicht wäre das eine Möglichkeit - habe deinen Code entsprechend ergänzt:
Sub Zeilen_löschen()
Dim lz As Long, t As Long
Dim chrDiagramm As ChartObject
Dim lngPunkte As Long
Application.ScreenUpdating = False
lz = Cells(Rows.Count, 1).End(xlUp).Rows.Row
For t = lz To 2 Step -1
If Cells(t, 2).Text = "#BEZUG!" Then
Rows(t).Delete shift:=xlUp
End If
Next t
For Each chrDiagramm In Worksheets("Grafiken").ChartObjects
With chrDiagramm.Chart
lngPunkte = .SeriesCollection(1).Points.Count
.ChartArea.Height = 367 * lngPunkte / 6
.PlotArea.Height = 307 * lngPunkte / 6
End With
Next chrDiagramm
Application.ScreenUpdating = True
End Sub


Anzeige
AW: Diagrammgröße unter Bedingung
08.01.2014 09:20:18
Flo
Hallo Beverly,
der Code läuft ohne Fehler durch, allerdings ist er noch ein wenig zu unflexibel. Bei drei Datenreihen pro Chart sieht es gut aus, bei nur einer Datenreihe hingegen nicht. Kann man den Code noch über If-Bedingungen so gestalten, dass man für jede Anzahl an Datenreihen eine Vorgabe macht (siehe meinen ersten Post)? Also irgendwie so:
If lngPunkte = 1 Then
.ChartArea.Height = x & .PlotArea.Height = x
If lngPunkte = 2 Then
.ChartArea.Height = y & .PlotArea.Height = y
Und eine zweite Frage: Kann man im Code noch spezifizieren, welche Diagramme genau von dem Makro betroffen sein sollen? Bisher werden ja alle angesprochen. Wenn ich aber z.B. Diagramm2 nicht dabei haben möchte, wie kann man dieses davon ausschließen?
Bin leider nicht kompetent genug, das umzusetzen... Sorry. Aber du hast mir schon einmal sehr geholfen!
Viele Grüße
Florian

Anzeige
AW: Diagrammgröße unter Bedingung
08.01.2014 09:52:06
Beverly
Hi Florian,
zu Frage 1 - nach diesem Prinzip:
   For Each chrDiagramm In Worksheets("Grafiken").ChartObjects
With chrDiagramm.Chart
lngPunkte = .SeriesCollection(1).Points.Count
Select Case lngPunkte
Case 1
'               .ChartArea.Height = ...
'               .PlotArea.Height = ...
Case 2
'               .ChartArea.Height = ...
'               .PlotArea.Height = ...
Case 3
'               .ChartArea.Height = ...
'               .PlotArea.Height = ...
End Select
End With
Die Höhen musst du selbst festlegen.
Zu Frage 2: wie legst du fest, welches Diagramm davon ausgenommen werden soll? Vom Prinzip her müsste der Code dann so aussehen:
   For Each chrDiagramm In Worksheets("Grafiken").ChartObjects
If chrDiagramm.Name  "Chart 1" Then
With chrDiagramm.Chart
lngPunkte = .SeriesCollection(1).Points.Count
Select Case lngPunkte
Case 1
'               .ChartArea.Height = ...
'               .PlotArea.Height = ...
Case 2
'               .ChartArea.Height = ...
'               .PlotArea.Height = ...
Case 3
'               .ChartArea.Height = ...
'               .PlotArea.Height = ...
End Select
End With
End If
Next chrDiagramm


Anzeige
AW: Diagrammgröße unter Bedingung
09.01.2014 11:56:21
Flo
Hallo Beverly,
ich bin dir noch eine Antwort schuldig. Mit folgendem Code habe ich es nun halbwegs elegant hinbekommen. Alle Charts werden hiermit verändert, bis auf Chart 1 und 2. Ganz so, wie ich es wollte! Sieht jetzt sehr gut aus. Vielen Dank!!!
Sub Makro2()
For Each chrDiagramm In Worksheets("Grafiken").ChartObjects
If chrDiagramm.Name  "Diagramm1" And chrDiagramm.Name  "Diagramm2" Then
With chrDiagramm.Chart
lngPunkte = .SeriesCollection(1).Points.Count
If lngPunkte = 1 Then
.ChartArea.Height = 120
.PlotArea.Top = 25
.PlotArea.Height = 70
.Legend.Top = 95
.Legend.Height = 25
End If
If lngPunkte = 2 Then
.ChartArea.Height = 160
.PlotArea.Top = 25
.PlotArea.Height = 110
.Legend.Top = 135
.Legend.Height = 25
End If
If lngPunkte = 3 Then
.ChartArea.Height = 200
.PlotArea.Top = 25
.PlotArea.Height = 150
.Legend.Top = 175
.Legend.Height = 25
End If
If lngPunkte = 4 Then
.ChartArea.Height = 240
.PlotArea.Top = 25
.PlotArea.Height = 190
.Legend.Top = 215
.Legend.Height = 25
End If
End With
End If
Next chrDiagramm
Application.ScreenUpdating = True
End Sub

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige