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

Diagrammtyp in VBA aus Variable abfragen

Diagrammtyp in VBA aus Variable abfragen
27.11.2014 23:13:06
Sebastian
Hallo und Moin,
ich habe ein kleines Problem und zwar würde ich gerne per VBA ein Diagramm erstellen lassen. Den Typ des Diagramms möchte ich per Variable über eine Case Anweisung selektieren lassen.
Dim VaDiagramm_Typwahl As Variant
VaDiagramm_Typwahl = xlXYScatterLinesNoMarkers 'zur Vereinfachugn direkt gefüllt.
ActiveChart.ChartType = "VaDiagramm_Typwahl"
Evtl. hat jemand einen Tip, wie ich den ChartType per variable vergeben kann.
mfg,
Sebastian

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Diagrammtyp in VBA aus Variable abfragen
28.11.2014 09:12:39
Beverly
Hi Sebastian,
den Inhalt der Variablen musst du ohne Anführungszeichen "" übergeben - so wie du es hast, ist es ein String.


AW: Diagrammtyp in VBA aus Variable abfragen
28.11.2014 11:17:45
Sebastian
Hallo Karin,
das habe ich auch schon versucht, hat nicht funktioniert. Hier mal der gesamte Code.
ub Diagramm_erstellen2() ' Sebastian
' fast Fertig! siehe unten
Dim StDiagramm_Name As String
Dim StDiagramm_xAchse_Name As String
Dim StDiagramm_yAchse_Name As String
Dim VaDiagramm_Typ As String
Dim VaDiagramm_Daten As Variant
Dim VaDiagramm_Feld As Range
Dim VaDiagramm_Typwahl As Variant
StDiagramm_Name = Worksheets("4_Diagramm").Range("B1").Value 'Diagramm_Name wird deklariert
StDiagramm_xAchse_Name = Worksheets("4_Diagramm").Range("B2").Value 'X-Achse-Name
StDiagramm_yAchse_Name = Worksheets("4_Diagramm").Range("B3").Value 'Y-Achse-Name
VaDiagramm_Typ = Worksheets("4_Diagramm").Range("B4").Value
VaDiagramm_Daten = Worksheets("4_Diagramm").Range("B5").Value
Select Case VaDiagramm_Daten 'Case-Abfrage welche Daten im Diagramm ausgezeichnet werden.
Case "Erster": Set VaDiagramm_Feld = Worksheets("2_Basisdaten").Range("A1:A17,E1:E17")
Case "Aktie in Pkt": Set VaDiagramm_Feld = Worksheets("2_Basisdaten").Range("A1:B17")
Case "Pkt in +-": Set VaDiagramm_Feld = Worksheets("2_Basisdaten").Range("A1:A17,C1:C17")
Case "% in +-": Set VaDiagramm_Feld = Worksheets("2_Basisdaten").Range("A1:A17,D1:D17")
Case "Hoch": Set VaDiagramm_Feld = Worksheets("2_Basisdaten").Range("A1:A17,F1:F17")
Case "Tief": Set VaDiagramm_Feld = Worksheets("2_Basisdaten").Range("A1:A17,G1:G17")
Case "Vortag": Set VaDiagramm_Feld = Worksheets("2_Basisdaten").Range("A1:A17,H1:H17")
Case Else: MsgBox ("Bitte Datenbereich auswählen!")
End Select
Select Case VaDiagramm_Typ 'Case-Abfrage welche Daten im Diagramm ausgezeichnet werden.
Case "Balkendiagramm": VaDiagramm_Typwahl = ActiveSheet.Shapes.AddChart2(201, xlColumnClustered).Select
Case "Säulendiagramm": VaDiagramm_Typwahl = ActiveSheet.Shapes.AddChart2(201, xlColumnClustered).Select
Case "Liniendiagramm": VaDiagramm_Typwahl = ActiveSheet.Shapes.AddChart2(240, xlXYScatterLinesNoMarkers).Select
Case "Flächendiagramm": VaDiagramm_Typwahl = ActiveSheet.Shapes.AddChart2(201, xlColumnClustered).Select
Case Else: MsgBox ("Bitte Diagrammtyp auswählen!")
End Select
If StDiagramm_Name = "Hier Diagramm Titel eintragen" Then 'Abfrage ob Diagramm-Name geändert wurde
StDiagramm_Name = InputBox("Bitte den Diagramm Titel eintragen", "Titel", "", 1, 1)
Worksheets("4_Diagramm").Range("B1").Value = StDiagramm_Name
End If
If StDiagramm_xAchse_Name = "Achsenbeschriftung X-Achse" Then 'Abfrage ob X-Achse-Name geändert wurde
StDiagramm_xAchse_Name = InputBox("Bitte Titel der X-Achse eingeben", "X-Achse", "", 1, 1)
End If
If StDiagramm_yAchse_Name = "Achsenbeschriftung Y-Achse" Then 'Abfrage ob Y-Achse-Name geändert wurde
StDiagramm_yAchse_Name = InputBox("Bitte Titel der Y-Achse eingeben", "Y-Achse", "", 1, 1)
End If
VaDiagramm_Typwahl = xlXYScatterLinesNoMarkers ' Funktioniert nicht
ActiveChart.ChartType = VaDiagramm_Typwahl
ActiveChart.SetSourceData Source:=VaDiagramm_Feld
With ActiveChart
.SeriesCollection(1).Name = "='4_Diagramm'!$B$1" 'Name des Diagramms
.SetElement (msoElementPrimaryCategoryAxisTitleAdjacentToAxis) 'X-Achse-Titel hinzufügen
.SetElement (msoElementPrimaryValueAxisTitleAdjacentToAxis) 'Y-Achse-Titel hinzufügen
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Text = StDiagramm_xAchse_Name 'Name x Achse
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Text = StDiagramm_yAchse_Name 'Name y Achse
End With
End Sub

Anzeige
AW: Diagrammtyp in VBA aus Variable abfragen
28.11.2014 11:36:59
Beverly
Hi Sebastian,
vielleicht solltet du mal deine Mappe hochladen, damit man das am Original nachvollziehen kann. Bei mir hat mein Vorschlag nämlich funktioniert (sonst hätte ich ihn schließlich auch nicht gepostet ;-)).


AW: Diagrammtyp in VBA aus Variable abfragen
28.11.2014 11:42:42
Sebastian
Sieht ein bisschen Wüsst aus, ist aber auch noch komplett im Aufbau ;) das Sub ist unter Makro3
mfg und schon mal vielen dank!
Sebastian

Anzeige
AW: Diagrammtyp in VBA aus Variable abfragen
28.11.2014 13:01:26
Beverly
Hi Sebastian,
die "" sind doch immer noch im Code - deshalb läuft er auch nicht. xlXYScatterLinesNoMarkers ist eine Enumeration, also ein Zahlenwert. Gehe mal im Einzelschrittmodus durch und stelle den Cursor auf diesen Ausdruck: es wird 75 angezeigt.
Falls es nur 1 Diagramm ist, würde ich nicht mit ActiveChart arbeiten sondern mit ActiveSheet.ChartObjects.Chart - dann muss das Diagramm nicht aktive sein bei Codeausführeung.
    VaDiagramm_Typwahl = xlXYScatterLinesNoMarkers '


Anzeige
AW: Diagrammtyp in VBA aus Variable abfragen
28.11.2014 13:40:32
Sebastian
Danke Karin! Das Klappt! Allerdings hab ich jetzt nun einen 1004 Laufzeitfehler. Vermutlich deklariere ich das in der Case-Abfrage falsch:
Case "Balkendiagramm": VaDiagramm_Typwahl = xlBarClustered
With ActiveSheet.ChartObjects(1).Chart <- Hier kommt der Fehler.
Wäre klasse, wenn du noch einen Tipp hast wäre ich sehr dankbar :)
mfg Sebastian

AW: Diagrammtyp in VBA aus Variable abfragen
28.11.2014 15:07:56
Beverly
Hi Sebastian,
kann ich leider nicht nachvollziehen.
https://www.herber.de/bbs/user/94099.xlsm
Was sagt der Debugger denn genau?


Anzeige
AW: Diagrammtyp in VBA aus Variable abfragen
28.11.2014 16:09:11
Sebastian
Hi Karin,
also ich eben deinen VBA-Code eingefügt. Habe jedoch:
VaDiagramm_Typwahl = xlXYScatterLinesNoMarkers <- rausgenommen und lasse die diagrammauswahl über die Caseanweisung laufen.
Wenn ich das Programm dann ausführe kriege ich jedoch einen Fehler in der Codezeile:
With ActiveSheet.ChartObjects(1).Chart
Laufzeitfehler 1004 - Anwendungs oder objektdefinierter Fehler.
mfg

AW: Diagrammtyp in VBA aus Variable abfragen
28.11.2014 17:16:20
Beverly
Hi Sebastian,
ich würde es so lösen:
Sub Diagramm_erstellen2()
Dim StDiagramm_Name As String
Dim StDiagramm_xAchse_Name As String
Dim StDiagramm_yAchse_Name As String
Dim VaDiagramm_Typ As String
Dim VaDiagramm_Daten As Variant
Dim VaDiagramm_Feld As Range
Dim VaDiagramm_Typwahl As Variant
StDiagramm_Name = Worksheets("4_Diagramm").Range("B1").Value 'Diagramm_Name wird deklariert
StDiagramm_xAchse_Name = Worksheets("4_Diagramm").Range("B2").Value 'X-Achse-Name
StDiagramm_yAchse_Name = Worksheets("4_Diagramm").Range("B3").Value 'Y-Achse-Name
VaDiagramm_Typ = Worksheets("4_Diagramm").Range("B4").Value
VaDiagramm_Daten = Worksheets("4_Diagramm").Range("B5").Value
Select Case VaDiagramm_Daten 'Case-Abfrage welche Daten im Diagramm ausgezeichnet werden.
Case "Erster": Set VaDiagramm_Feld = Worksheets("2_Basisdaten").Range("A1:A17,E1:E17")
Case "Aktie in Pkt": Set VaDiagramm_Feld = Worksheets("2_Basisdaten").Range("A1:B17")
Case "Pkt in +-": Set VaDiagramm_Feld = Worksheets("2_Basisdaten").Range("A1:A17,C1:C17" _
)
Case "% in +-": Set VaDiagramm_Feld = Worksheets("2_Basisdaten").Range("A1:A17,D1:D17")
Case "Hoch": Set VaDiagramm_Feld = Worksheets("2_Basisdaten").Range("A1:A17,F1:F17")
Case "Tief": Set VaDiagramm_Feld = Worksheets("2_Basisdaten").Range("A1:A17,G1:G17")
Case "Vortag": Set VaDiagramm_Feld = Worksheets("2_Basisdaten").Range("A1:A17,H1:H17")
Case Else: MsgBox ("Bitte Datenbereich auswählen!")
End Select
If StDiagramm_Name = "Hier Diagramm Titel eintragen" Then 'Abfrage ob Diagramm-Name geä _
ndert wurde
StDiagramm_Name = InputBox("Bitte den Diagramm Titel eintragen", "Titel", "", 1, 1)
Worksheets("4_Diagramm").Range("B1").Value = StDiagramm_Name
End If
If StDiagramm_xAchse_Name = "Achsenbeschriftung X-Achse" Then 'Abfrage ob X-Achse-Name geä _
ndert wurde
StDiagramm_xAchse_Name = InputBox("Bitte Titel der X-Achse eingeben", "X-Achse", "", 1,  _
1)
End If
If StDiagramm_yAchse_Name = "Achsenbeschriftung Y-Achse" Then 'Abfrage ob Y-Achse-Name geä _
ndert wurde
StDiagramm_yAchse_Name = InputBox("Bitte Titel der Y-Achse eingeben", "Y-Achse", "", 1,  _
1)
End If
' ******************** neue Variante ***************
Select Case VaDiagramm_Typ 'Case-Abfrage welche Daten im Diagramm ausgezeichnet werden.
Case "Balkendiagramm": VaDiagramm_Typwahl = xlBarClustered
Case "Säulendiagramm": VaDiagramm_Typwahl = xlColumnClustered
Case "Liniendiagramm": VaDiagramm_Typwahl = xlXYScatterLinesNoMarkers
Case "Flächendiagramm": VaDiagramm_Typwahl = xlArea
Case Else: MsgBox ("Bitte Diagrammtyp auswählen!")
End Select
' vorhandene Diagramme löschen falls vorhanden
If ActiveSheet.chartobjectcs.Count > 0 Then ActiveSheet.ChartObjects.Delete
' neues Diagramm erstellen
With ActiveSheet.Shapes.AddChart(0, 0, 0, 0).Chart
' Position und Größe festlegen
.Parent.Top = 100
.Parent.Left = 100
.Parent.Width = 350
.Parent.Height = 200
' Typ zuweisen
.ChartType = VaDiagramm_Typwahl
.SetSourceData Source:=VaDiagramm_Feld
.SeriesCollection(1).Name = "='4_Diagramm'!$B$1"    'Name des Diagramms
.SetElement (msoElementPrimaryCategoryAxisTitleAdjacentToAxis) 'X-Achse-Titel hinzufü _
gen
.SetElement (msoElementPrimaryValueAxisTitleAdjacentToAxis)     'Y-Achse-Titel hinzufü _
gen
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Text = StDiagramm_xAchse_Name    'Name x Achse
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Text = StDiagramm_yAchse_Name       'Name y Achse
End With
End Sub


Anzeige
AW: Diagrammtyp in VBA aus Variable abfragen
28.11.2014 20:01:35
Sebastian
Hmm also dein Code funktioniert nicht. Ich vermute mittlerweile, das Excel hier vllt Versionsunterschiede oder Probleme hat?
If ActiveSheet.chartobjectcs.Count > 0 Then ActiveSheet.ChartObjects.Delete
verursacht einen Laufzeitfehler 438 Object unterstützt diese Eigenschaft oder Methode nicht.
mfg

AW: Diagrammtyp in VBA aus Variable abfragen
28.11.2014 20:04:00
Sebastian
habe die Abfrage ob Chart vorhanden ist auskommentiert, dann funktioniert es wunderbar! Vielen Dank für deine Hilfe Karin. Warum der Code vorher allerdings bei dir lief, bei mir nicht, bleibt mir immer noch ein Rätsel.
Mfg

AW: Diagrammtyp in VBA aus Variable abfragen
28.11.2014 20:16:36
Beverly
Der Fehler liegt an mir - da ist ein "c" zu viel. So sollte es korrekt funktionieren:
If ActiveSheet.ChartObjects.Count > 0
Hatte die Zeile nachgeschrieben und nicht darauf geachtet, dass die Autovervollständigung die Anfangsbuchstaben nicht in Großbuchstaben umgewandelt hat - so habe ich den Fehler nicht gemerkt.


Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige