Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1408to1412
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
Diagramm mit Makro erstellen
21.02.2015 10:53:40
Claude
Hallo Zusammen,
kann mir bitte jemand sagen, wo mein Fehler ist, dass mir das Diagramm ständig als neues Tabellenblatt ausgespukt wird, anstatt es im Tabellenblatt zu platzieren?
Sub DiagrammErstellen()
Dim Dia As ChartObject
Dim m_abgas As Integer
Dim m_abgas_Min As Integer
Dim m_abgas_Max As Integer
With Sheets("tbl_Zieltabelle")
On Error Resume Next
.ChartObjects.Delete
m_abgas_Min = Application.WorksheetFunction.Min(Range("B4:B" & m_abgas))
m_abgas_May = Application.WorksheetFunction.Max(Range("B4:B" & m_abgas))
Set Dia = .ChartsObjects.Add(150, 10, 500, 300)
Dia.Name = "Abgasprofil"
m_abgas = .Range("B4").End(xlDown).Row
.Range("B4:B" & m_abgas).Copy
.ChartObjects("Abgasprofil").Activate
ActiveChart.SeriesCollection.Paste Rowcol:=xlColumns, SerieLabels:=False, CategoryLabels:=False, _
_
Replace:=True, NewSeries:=False
Application.CutCopyMode = False
ActiveChart.Location xlLocationAsObject
With ActiveChart
.ChartType = xlXYScatterSmooth
.HasLegend = False
.HasTitle = False
.ChartTitle = True
.ChartTitle.Text = Dia.Name
End With
With ActiveChart.Axes(xlValue)
.MinimumScale = m_abgas_Min
.MaximumScale = m_abgas_Max
.MajourUnit = 500
End With
End With
End Sub

Ich komme hier nicht weiter und habe das Gefühl mich im Kreis zu drehen....
Großes Danke!!! :)
Claude

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

Betreff
Datum
Anwender
Anzeige
AW: Diagramm mit Makro erstellen
21.02.2015 14:48:33
Beverly
Hi Claude,
1. benutze Option Excplicit, dann wird dir angezeigt, dass eine Variable nicht deklariert ist, und zwar m_abgas_May
2. du beziehst dich hier Range("B4:B" & m_abgas) auf die Variable, weist ihr aber erst weiter unten im Code einen Wert zu, in der Zeile: m_abgas = .Range("B4").End(xlDown).Row
3. entferne On Error Resume Next, dann siehst du, wo dein Code überall hängenbleibt
Option Explicit
Sub DiagrammErstellen()
Dim m_abgas As Integer
Dim m_abgas_Min As Integer
Dim m_abgas_Max As Integer
With Sheets("tbl_Zieltabelle")
If .ChartObjects.Count > 0 Then .ChartObjects.Delete
m_abgas = .Range("B4").End(xlDown).Row
m_abgas_Min = Application.WorksheetFunction.Min(Range("B4:B" & m_abgas))
m_abgas_Max = Application.WorksheetFunction.Max(Range("B4:B" & m_abgas))
With .ChartObjects.Add(150, 10, 500, 300)
.Name = "Abgasprofil"
With .Chart
.SetSourceData Source:=Sheets("tbl_Zieltabelle").UsedRange.Offset(2, 2)
.SetSourceData Source:=Sheets("tbl_Zieltabelle").Range("B4:B" & m_abgas)
.ChartType = xlXYScatterSmooth
.HasLegend = False
.HasTitle = True
.ChartTitle.Text = .Parent.Name
With .Axes(xlValue)
.MinimumScale = m_abgas_Min
.MaximumScale = m_abgas_Max
.MajourUnit = 500
End With
End With
End With
End With
End Sub


Anzeige
AW: Diagramm mit Makro erstellen
21.02.2015 16:27:52
Claude
Es funktioniert!
Danke, Karin:)
ich war schon kurz vorm Verzweifeln..
zwei Fragen haben sich aber eben aufgetan:
was bedeutet in dieser spalte das Offset(2,2)?
With .Chart
.SetSourceData Source:=Sheets("tbl_Zieltabelle").UsedRange.Offset(2, 2)
Und mir ist aufgefallen, dass wenn ich in eine Zelle klicke, die Tabellen verschwinden.
Kann ich diese vorm Verschwinden schützen, wenn ich mein Tabellenblatt schütze? oder wird dann auch mein Makro verhindert?
Ich wünsche einen schönen Nachmittag :)
Claude

AW: Diagramm mit Makro erstellen
21.02.2015 17:00:51
Beverly
Hi Claude,
befindet sich der Cursor beim Erstellen eines Diagramms in einem Zellbereich, den Excel als Wertebereich interpretieren kann, dann wird das Diagramm bereits mit 1 oder mehreren Datenreihen erstellt, je nachdem wie viele Zeilen/Spalten mit Werten gefüllt sind (Automatismus von Excel). Da du aber nur 1 Datenreihe benötigst, müsste man erst prüfen, wie viele Datenreihen das Diagramm enthält und falls mehr als eine, dann diese restlichen löschen. Einfacher ist es, dem Diagramm nach dem Erstellen nur 1 Zelle als Datenbereich zuzuweisen, denn dann wird das Diagramm auch nur mit 1 Datenreihe erstellt und man erspart sich das eventuell notwendige Löschen. Der Code an dieser Stelle ist eigentlich nicht korrekt (hatte ihn aus einem umfangreicheren "zusammengestrichen") - das sollte auf jeden Fall zum richtigen Ergebnis führen:
Sheets("tbl_Zieltabelle").Range("A1")

Was meinst du mit: "dass wenn ich in eine Zelle klicke, die Tabellen verschwinden."?


Anzeige
AW: Diagramm mit Makro erstellen
21.02.2015 17:25:38
Claude
Hallo Karin,
ach so, danke für die Erklärung. Hab ich richtig verstanden, dass das heißt, wenn ich in Spalte B und D Werte habe, dann ignoriert er die Werte in Spalte D?
Ich habe nämlich tatsächlich gerade versucht, meine Werte in B und D in diesem einen Diagramm anzeigen zu lassen, doch gemeinsam wollten sie sich das Diagramm nicht teilen...
Wobei die Werte in B bis zu einem maximalwert von 7500 gehen und die in D bis zu 500.
An welcher Stelle gebe ich den Code

Sheets("tbl_Zieltabelle").Range("A1")
ein? (sorry, ich arbeite mich seit ca.1,5Wochen in VBA ein...)
Was meinst du mit: "dass wenn ich in eine Zelle klicke, die Tabellen verschwinden."?
Ich habe nach dem Erstellen des Diagramms aus Versehen Zelle C4 z.B. angeklickt. Da ist mir das Diagramm verschwunden :-O
Ich hab es mit wiederholter Ausführung meines Makros wieder herstellen können.
Viele Grüße
Claudia

Anzeige
AW: Diagramm mit Makro erstellen
21.02.2015 17:48:10
Claude
Hallo Karin,
kannst du mir noch bitte auf die Sprünge helfen, wie ich Spalte D in das selbige Diagramm einfügen kann?
Lieben Gruß
Claudia

AW: Diagramm mit Makro erstellen
22.02.2015 07:55:04
Beverly
Hi Claudia,
die Änderung gehört an diese Stelle:
.SetSourceData Source:=Sheets("tbl_Zieltabelle").Range("A1")

Fragen:
- du erstellst ein Punkt(XY)-Diagramm. Normalerweise benötigt dieser Diagrammtyp (wie der Name schon ausdrückt) für jede Datenreihe X-Werte und Y-Werte. Fehlen die X-Werte bei der Wertezuweisung, werden automatisch die Zahlen von 1 aufwärts angenommen. Mit deinem Code weist du dem Diagramm nur Y-Werte zu, soll das tatsächlich so sein? Oder stehen deine X-Werte irgendwo in einer Spalte? Wenn ja wo?
- die Daten in Spalte D - soll das eine zweite Datenreihe sein? Soll sie auf die Sekundärachse gezeichnet werden, da sie eine andere Größenordnung als die Werte in Spalte B aufweist?


Anzeige
AW: Diagramm mit Makro erstellen
22.02.2015 17:22:09
Claude
Hallo Beverly,
danke für deine Antwort!
Zu deinen Fragen:
- du erstellst ein Punkt(XY)-Diagramm. Normalerweise benötigt dieser Diagrammtyp (wie der Name schon ausdrückt) für jede Datenreihe X-Werte und Y-Werte. Fehlen die X-Werte bei der Wertezuweisung, werden automatisch die Zahlen von 1 aufwärts angenommen. Mit deinem Code weist du dem Diagramm nur Y-Werte zu, soll das tatsächlich so sein? Oder stehen deine X-Werte irgendwo in einer Spalte? Wenn ja wo?
Bei den Werten, die ich in meinen Spalten stehen habe, handelt es sich tatsachlich um nur Y-Werte. Über die X-Achse möchte ich so zu sagen ihre "Häufigkeit" ersehen können. Daher ist es super, dass Excel, den Werten automatisch die Zahlen von 1 aufwärts zuweist. :))
- die Daten in Spalte D - soll das eine zweite Datenreihe sein? Soll sie auf die Sekundärachse gezeichnet werden, da sie eine andere Größenordnung als die Werte in Spalte B aufweist?
Ja,das wäre vielleicht eine Lösung für mein Problem!
Das ist nämlich aktuell folgendes:
Ich habe versucht in mein Diagramm mir, um längen kleinere, Y-Werte aus der D-Spalte anzeigen zu lassen.
Wenn ich das Makro separat ausführen lasse(also den Play-Button im Editor), dann habe ich zwar eine Skalierung der Y-Achse von 8000 bis ca 200 für die Werte in beiden Spalten, aber dafür eine angepasste an den maximalen Wert der da ist in Spalte B.
Wenn ich das Makro über ein anderes Makro mittels "Call" aufrufe, dann verzerrt es die Skalierung, sodass nur noch die Y-Werte bis 3000 gehen-mir also nur ein kleiner Ausschnitt gezeigt wird. =-O
Woran könnte das liegen?
Hier ist mein Code, den ich auf Grundlage deines Hinweises gestern gebastelt habe:
Option Explicit
Sub Diagramm_erstellen()
Dim m_abgas As Integer
Dim m_abgas_Min As Integer
Dim m_abgas_Max As Integer
Dim T_abgas As Integer
Dim T_abgas_Min As Integer
Dim T_abgas_Max As Integer
With Sheets("tbl_Zieltabelle")
If .ChartObjects.Count > 0 Then .ChartObjects.Delete
T_abgas = .Range("D4").End(xlDown).Row
T_abgas_Min = Application.WorksheetFunction.Min(Range("D4:D" & T_abgas))
T_abgas_Max = Application.WorksheetFunction.Max(Range("D4:D" & T_abgas))
m_abgas = .Range("B4").End(xlDown).Row
m_abgas_Min = Application.WorksheetFunction.Min(Range("B4:B" & m_abgas))
m_abgas_Max = Application.WorksheetFunction.Max(Range("B4:B" & m_abgas))
With .ChartObjects.Add(350, 25, 550, 400)
.Name = "Abgasprofil"
With .Chart
.SeriesCollection.NewSeries
.SeriesCollection(1).Values = Sheets("tbl_Zieltabelle").Range("B4:B" & m_abgas)
.ChartType = xlXYScatterSmoothNoMarkers
.HasLegend = True
.SeriesCollection(1).Name = "Abgasmassenstrom"
.SeriesCollection.NewSeries
.SeriesCollection(2).Values = Sheets("tbl_Zieltabelle").Range("D4:D" & T_abgas)
.ChartType = xlXYScatterSmoothNoMarkers
.HasLegend = True
.SeriesCollection(2).Name = "Abgastemperatur"
.HasTitle = True
With .Axes(xlValue)
.MinimumScale = m_abgas_Min
.MaximumScale = m_abgas_Max
.MajorUnit = 250
End With
With .SeriesCollection(1)
.Border.Color = RGB(0, 200, 100)
.Border.Weight = xlThick
.Border.LineStyle = xlContinuous
End With
With .SeriesCollection(2)
.Border.Color = RGB(100, 200, 100)
.Border.Weight = xlThick
.Border.LineStyle = xlContinuous
End With
End With
End With
End With
End Sub
Ganz ganz großes Danke!!
Wirklich!
Liebe Grüße
Claudia
ps. das Problem, dass meine Tabellen verschunden sind...ich weiß nicht was ich gemacht habe, aber es ist nicht mehr existent. :)

Anzeige
AW: Diagramm mit Makro erstellen
22.02.2015 17:25:42
Claude
...das Makro, das das vorig genannte anspricht ist dieses:
Private Sub Auswertung_anzeigen_Click()
Application.ScreenUpdating = False
Call Abgasprofil_kop 'Kopiert Werte aus Blatt tbl_Profil in tbl_Zieltabelle, Spalten B und D
Call Diagramm_erstellen 'erstellt Diagramm im Blatt tbl_Zieltabelle
Application.ScreenUpdating = False
Worksheets("tbl_Zieltabelle").Select
End Sub

AW: Diagramm mit Makro erstellen
23.02.2015 16:47:07
Beverly
Hi Claudia,
ich würde das Diagramm auf diese Weise erstellen:
Sub Diagramm_erstellen()
Dim m_abgas As Integer
Dim m_abgas_Min As Integer
Dim m_abgas_Max As Integer
Dim T_abgas As Integer
Dim T_abgas_Min As Integer
Dim T_abgas_Max As Integer
With Sheets("tbl_Zieltabelle")
If .ChartObjects.Count > 0 Then .ChartObjects.Delete
T_abgas = .Range("D4").End(xlDown).Row
T_abgas_Min = Application.WorksheetFunction.Min(Range("D4:D" & T_abgas))
T_abgas_Max = Application.WorksheetFunction.Max(Range("D4:D" & T_abgas))
m_abgas = .Range("B4").End(xlDown).Row
m_abgas_Min = Application.WorksheetFunction.Min(Range("B4:B" & m_abgas))
m_abgas_Max = Application.WorksheetFunction.Max(Range("B4:B" & m_abgas))
With .ChartObjects.Add(350, 25, 550, 400)
.Name = "Abgasprofil"
With .Chart
.ChartType = xlXYScatterSmoothNoMarkers
.HasLegend = True
.HasTitle = True
With .SeriesCollection.NewSeries
.Values = Sheets("tbl_Zieltabelle").Range("B4:B" & m_abgas)
.XValues = Sheets("tbl_Zieltabelle").Range("A4:A" & m_abgas)
.Name = "Abgasmassenstrom"
.Border.Color = RGB(0, 200, 100)
.Border.Weight = xlThick
.Border.LineStyle = xlContinuous
End With
With .SeriesCollection.NewSeries
.Values = Sheets("tbl_Zieltabelle").Range("D4:D" & T_abgas)
.XValues = Sheets("tbl_Zieltabelle").Range("A4:A" & m_abgas)
.Name = "Abgastemperatur"
.Border.Color = RGB(100, 200, 100)
.Border.Weight = xlThick
.Border.LineStyle = xlContinuous
' der Sekundärachse zuweisen
.AxisGroup = 2
End With
' Primärachse skalieren
With .Axes(xlValue, xlPrimary)
.MinimumScale = m_abgas_Min
.MaximumScale = m_abgas_Max
.MajorUnit = 250
End With
' Sekundärachse skalieren
With .Axes(xlValue, xlSecondary)
.MinimumScale = T_abgas_Min
.MaximumScale = T_abgas_Max
'   .MajorUnit = 5  '


Anzeige
AW: Diagramm mit Makro erstellen
24.02.2015 17:23:06
Claude
Hallo Beverly,
das klappt so perfekt!
Du bist echt eine sehr große Hilfe.
Ganz großes Dankeschön an dich!!
Liebe Grüße
Claudia :)

AW: Diagramm mit Makro erstellen
24.02.2015 17:36:05
Claude
oh, doch noch mal kurz...
ich dachte den Achsen jeweils einen Titel zuweisen zu können.
Mit
 With .Axes(xlValue, xlSecondary)
.MinimumScale = T_abgas_Min
.MaximumScale = T_abgas_Max
.AxisTitle.Characters.Text = "Temperatur [°C]"
funktioniert das nicht? gleiches für die xlPrimary :(

AW: Diagramm mit Makro erstellen
24.02.2015 18:33:30
Beverly
Hi Claudia,
die Achse hat noch keinen Titel, also kannst du dem Titel auch keine Beschriftung zuweisen.


Anzeige
AW: Diagramm mit Makro erstellen
25.02.2015 09:47:29
Claude
...ja stimmt.
das hätte ich auch mittlerweile merken können. Danke sehr, Karin!

306 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige