Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
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

Probleme mit dynamischem Diagramm-Bereich

Probleme mit dynamischem Diagramm-Bereich
21.01.2014 13:00:47
Max
Servus,
also auf Anrat schreibe ich mein Problem nochmal in einen neuen Thread.
Datei: https://www.herber.de/bbs/user/88923.xlsm
In der angehängten Datei findet ihr das Makro Zeitfenster. Hier ist bis dato nur die Textbox für die Stunden implementiert bzw versuche ich das. Der hier eingegebene Wert (man wähle z.B. 2 Stunden) wird im Hintergrund umgerechnet. Und zwar in einen Zeilenwert. Da ich also 12-sekündliche Daten habe weiß ich, dass eine Stunde 300 (5*60) Werte hat. +2 ist dies wert z_12_2. z_12_1 übergebe ich mit 2.
Diese beiden globalen Variablen möchte ich an einen Diagrammbereich übergeben, siehe Modul.
Ich habe versucht diese über
ActiveChart.SetSourceData Source:=Range("12-Sekunden!C" & z_12_1 & ":G" & z_12_2)
zu implementieren, allerdings wird weiterhin der gesamte Datenkomplex abgebildet und nicht wie von mir gewünscht C2:G602.
Ansonsten sieht man, dass die Variablen durchaus als solche vorliegen, da ich diese auf dem Tabellenblatt ablegen lasse.
Seht ihr meinen Fehler? Vielen Dank für die Hilfe!
Besten Gruß, Max

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

Betreff
Datum
Anwender
Anzeige
AW: Probleme mit dynamischem Diagramm-Bereich
21.01.2014 13:20:57
Klaus
Hallo Max,
Deine Variablen bleiben leer, darum wählt dein Range immer die gesamten Spalten aus statt den Bereich den du möchtest.
Um der Variable z_12_1 etwas zuzuweisen, schreibst du:
Range("J2") = z_12_1
Das macht allerdings ... gar nichts. Die Variable bleibt einfach leer. Um z_12_1 den Wert AUS J2 zu geben, genau anders herum:
z_12_1 = Range("J2").Value
das .Value ist optional (da Standardeigenschaft), erleichtert aber die Lesbarkeit ungemein.
Weiter unten versuchst du das gleiche mit z_12_2:
Range("J2") = z_12_2 macht wieder gar nichts, ausserdem bist du immer noch auf J2 ... J5 währe hier doch richtiger, oder? Du kommst bestimmt selbst drauf:
z_12_2 = Range("J5").Value
Weitere Kommentare:
Du bügelst mit "on Error Resume Next" die Fehler im Code weg. Das funktioniert zwar, ist aber als würdest du beim Auto die Motorkontrollleuchte mit schwarzem Tape abkleben damit du das Leuchten nicht mehr siehst.
Du benutzt sehr viele (unnötige) .select und .activate Anweisungen, der Code hat auch da noch viel Optimierungspotential.
Grüße,
Klaus M.vdT.

Anzeige
AW: Probleme mit dynamischem Diagramm-Bereich
21.01.2014 13:35:49
Max
Hallo Klaus,
vielen Dank für die Hinweise.
Aber wir haben uns denke ich noch nicht verstanden. Also, dass der Code nicht optimal ist, ist mir durchaus bewusst. Das thematisiere ich jetzt hier mal nicht weiter.
Ich möchte nicht aus Range("J2") einen Wert an z_12_1 übergeben, sondern lasse ihn mir hier nur zur Selbstkontrolle ausgeben. Diese Zeilen kommen also später weg.
Ich schreibe im Formular Zeitfenster z_12_2 einen Wert zu, welcher die Zeile darstellen soll bis zu welchem mein Diagramm dargestellt werden soll. Also in meinen Augen ist der richtige Zahlenwert hier unter z_12_2 gespeichert, nur kann ich diesen im Diagramm nicht richtig übergeben.
Vielen Dank!

Anzeige
Workaround?
21.01.2014 13:52:25
Klaus
Hallo Max,
ich hab jetzt erst die Userform gesehen! Ich vermute dass der Textbox-Inhalt als TEXT statt als Zahl übergeben wird, hab aber grad nicht die Zeit deinen Code zu analysieren und das zu testen.
Wenn du eine einfache Lösung möchtest, schreib den Variableninhalt der Textboxen doch einfach in eine Zelle (machst du ja jetzt schon zur Kontrolle), übernimm ihn aus der Zelle in dein Standarddiagramm-Makro (wie von mir oben vorgeschlagen) und lösche danach den Zelleninhalt wieder (range("J2").clearcontents).
Das ist zwar nicht sauber, funktioniert aber garantiert.
Grüße,
Klaus M.vdT.
(noch offen, falls jemand anders testen möchte)

Anzeige
Public Variablen...
21.01.2014 13:56:46
Case
Hallo, :-)
... müssen in ein Modul. Also lösche sie im Code der UserForm und lege sie in dein Modul ausserhalb der Sub ganz oben.
Besser wäre es allerdings ohne Public Variablen zu arbeiten. :-)
Servus
Case

AW: Public Variablen...
21.01.2014 19:26:09
Max
Danke Case!
Am Ende doch eine sehr einfache aber versteckte Lösung!
Läuft jetzt!

Mit Parameterübergabe an Sub
22.01.2014 11:51:27
Beverly
Hi Max,
ich würde es so lösen, dass ich die Paramter direkt an die Sub für das Diagramm übergebe:
Call Standarddiagramm.Standarddiagramm(z_12_1, z_12_2)
Die Sub müsste dann so aussehen (habe noch einiges verreinfacht - z.B. kann man auf Select und Activate verzichten):
Sub Standarddiagramm(z_12_1 As Double, z_12_2 As Double)
Application.ScreenUpdating = False
Dim x As Long
With Sheets("12-Sekunden")
If .ChartObjects.Count > 0 Then .ChartObjects(.ChartObjects.Count).Delete
x = Application.WorksheetFunction.Max(.Range("A:A")) 'ermitteln welcher Wert der  _
Maximalwert der Zeit ist, wichtig als Begrenzung für das Diagramm
With .Shapes.AddChart(0, 0, 0, 0).Chart
.ChartType = xlXYScatterSmoothNoMarkers           'Diagrammtyp "Punkte mit Linien ohne  _
Datenpunkte
.Parent.Left = Sheets("12-Sekunden").Range("I8").Left
.Parent.Top = Sheets("12-Sekunden").Range("I8").Top
.Parent.Width = 605
.Parent.Height = 350
.SetSourceData Source:=Sheets("12-Sekunden").Range("C" & z_12_1 & ":G" & z_12_2) ' _
Quelle
.HasTitle = True                            'hat einen Titel
.ChartTitle.Text = ("Datenbasis 12-sekündlich")
With .Axes(xlCategory)               'Abszisse
.HasTitle = True
.AxisTitle.Text = "Datum in dd:mm:yyyy"           'Achsbeschriftung
.MinimumScale = Sheets("12-Sekunden").Range("A" & z_12_1).Value 'Minimalwert
.MaximumScale = Sheets("12-Sekunden").Range("A" & z_12_2).Value 'Uebergabe des  _
Maximalwerts ueber x
End With
With .Axes(xlValue)
.HasTitle = True
'.AxisTitle.Text = ""
.MinimumScale = 0
.TickLabels.NumberFormat = "0"              'Achswerte ohne Nachkommastellen
End With
End With
End With
Application.ScreenUpdating = True
End Sub


Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige