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