Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Säulendiagramm mittels VBA erstellen
08.07.2013 10:10:09
Grigor
Hallo zusammen,
ich versuche anhand VBA ein Säulendiagramm aus berechneten Werten zu erstellen. Die Anzahl der Spalten mit Werten kann variieren.
Also nach Klicken auf dem Button "OK" werden die in die Userform eingegebenen Werte berechnet und nach der Tabelle exportiert. Ein Klick auf "Diagramm erstellen" soll dann aus dem Bereich (B30:B40; C30:C40; D30:D40... usw.) das Säulendiagramm erzeugen.
https://www.herber.de/bbs/user/86244.xlsm
Ich bin für jede Hilfe dankbar.
Viele Grüße
Grigor

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

Betreff
Datum
Anwender
Anzeige
AW: Säulendiagramm mittels VBA erstellen
08.07.2013 10:32:20
Klaus
Hi Grigor,
ich sehe eine Mustertabelle, in der wahllos Zahlen verteilt sind. Eine Userform existiert zwar, aber es gibt keinen Button, kein Event welches sie aufruft.
Ich muss jetzt raten, welche Zahlen wie und wohin was für ein Säulendiagramm ergeben sollen. Oder du erklärst es nochmal vernünftig!
Im Prinzip erstellst du ein Säulendiagramm so (Makrorekorder-Code)
Sub Macro1()
Range("B30:D40").Select
ActiveSheet.Shapes.AddChart.Select
ActiveChart.ChartType = xlColumnClustered
ActiveChart.SetSourceData Source:=Range("Tabelle1!$B$30:$D$40")
End Sub
etwas eleganter ginge es so:dann so:
Option Explicit
'* Module for quick creation of charts in the active worksheet
'* created: June 2013 by Klaus Meyer von der Twer (Thanks to Rudi @ herber!)
'* every feature after data-Range is optional!
Sub test()
Call MakeSingleChart(Range("B4:C12"), 1, Range("A1"), 300, 200, 10, 90, True)
Call MakeSingleChart(Range("B4:C12"), , , , , , , False)
Call MakeSingleChart(Range("B4:C12"))
End Sub
Sub MakeSingleChart( _
rngData As Range, _
Optional TypeChart As Integer, _
Optional rngTopLeftCell As Variant, _
Optional iHeight As Variant, _
Optional iWidth As Variant, _
Optional iScaleMin As Variant, _
Optional iScaleMax As Variant, _
Optional bNoLegend As Boolean)
'rngData = Range of Data
'TypeChart 1=Line, 2=Pie, 3=Column, 4=ColumnStacked, 5=ColumStacked100, none=Line
'rngTopLeftCell = Move Chart's top left corner to THIS cell, places in mid-screen if not  _
choosen
'iHeight and iWidth = Height/Width in Pixels, uses standard if not choosen
'iScaleMin and iScaleMax = FIX X-Axis to this value. If not choosen, chart will autoscale
'bNoLegend = if TRUE, Legend is removed. If FALSE or not choosen, Legend stays in the chart
On Error GoTo hell
'rngTopLeftCell hast to be a valid RANGE, iHeight a valid INTEGER and so on
'  Declaration has to be VARIANT to enable the ISMISSING feature. In case of wrong usage
'  (example: set height to "hello world") it will end with ONERROR
Dim myCht As Object
Set myCht = ActiveSheet.Shapes.AddChart       'create new Chart
With myCht
With .Chart
'Chart definitions ************************************
.ChartType = xlLine    'set Line as standard
Select Case TypeChart
Case 1
Case 2
.ChartType = xlPie
Case 3
.ChartType = xlColumnClustered
Case 4
.ChartType = xlColumnStacked
Case 5
.ChartType = xlColumnStacked100
Case Else
End Select
.SetSourceData Source:=rngData
' ************************************ Chart Definitions
If bNoLegend Then .Legend.Delete           'Legend or not?
End With
'move and scale ************************************
If Not IsMissing(iScaleMax) Then .Chart.Axes(xlValue).MaximumScale = iScaleMax
If Not IsMissing(iScaleMin) Then .Chart.Axes(xlValue).MinimumScale = iScaleMin
If Not IsMissing(rngTopLeftCell) Then
.Top = rngTopLeftCell.Top
.Left = rngTopLeftCell.Left
End If
If Not IsMissing(iHeight) Then .Height = iHeight
If Not IsMissing(iWidth) Then .Width = iWidth
'************************************ move and scale
End With
GoTo heaven:
hell:
'get rid of wrong chart
myCht.Delete
'display error messge
MsgBox "could not create chart!" & vbCrLf _
& "Error Number: " & Err.Number & _
vbCrLf & "Error: " & Err.Description
heaven:
End Sub
Den Bereich des Diagramms kannst du im Call angeben. Wie der Zustande kommt (aus deiner Userform) weisst nur du.
Grüße,
Klaus M.vdT.

Anzeige
AW: Säulendiagramm mittels VBA erstellen
08.07.2013 12:08:41
Grigor
Hallo Klaus,
ich habe mal jetzt das Diagramm ,das ich brauche, manuell erstellt. Wäre gut, wenn man es in VBA programieren kann..
Ich hoffe damit ist klarer geworden, was ich genau in Sicht habe.. Wenn nicht versuche ich es nochmal zu erklären.
https://www.herber.de/bbs/user/86249.xlsm
Gruß
Grigor

AW: Säulendiagramm mittels VBA erstellen
08.07.2013 12:28:38
Klaus
Hi,
nein, es ist leider nicht klarer geworden.
Du zeigst ein Diagramm über den Bereich B1:C6, ich sehe keinerlei Verbindungen mehr zu irgendeiner Userform.
Erstell das Diagramm doch einfach per Hand und lass dabei den Makrorekorder laufen.
Grigor, ich kann jetzt natürlich VERMUTEN dass du variable Diagramme möchtest, über verschiedene Bereiche (und nich immer nur B1:C6) ... aber Aufgrund einer VERMUTUNG werde ich hier keine Lösung präsentieren. Es bleibt deine Aufgabe, eine FRAGE zu stellen die dann beantwortet werden kann.
Grüße,
Klaus M.vdT.

Anzeige
AW: Säulendiagramm mittels VBA erstellen
08.07.2013 12:43:12
Grigor
ich habe es noch am anfang gestagt, aber egal ich sage es nochmal. Das diagramm so wie es jetzt aussieht muss nach Knopfdruck ("Diagramm erstellen" - siehe Userform) erzeugt werden. Es müssen keine variable Diagramme erstellt werden, sondern nur ein einziges Diagramm (siehe Tabellenblatt) mit gestapelten Säulen.
Sorry für die Unklarheiten bis jetzt..
Danke schon mal.
Viele Grüße
Grigor

Rekorder?
08.07.2013 12:47:12
Klaus
Hallo Grigor,
dann rekordere doch die gesamte Diagrammerstellung und lege sie auf den Knopf, wo ist das Problem?
Grüße,
Klaus M.vdT.

AW: Rekorder?
08.07.2013 13:00:13
Grigor
Hallo Klaus,
kein Problem, es funktioniert. Danke
Viele Grüße
Grigor
Anzeige

308 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige