Excel-Diagramm mit VBA Werten füllen - User bestimmt Datenbereich

Cpt_Kamikaze

Grünschnabel
Hallo zusammen,
ich habe ein VBA Programm zur Berechnung eines Viskos gedämpften Feder Masse Systems.

Code:
'Berechnung des Weges
 	Workbooks("FederMasseSystemBenny.xls").Activate
 	Sheets("Weg").Activate
 	nCounter = 1
 	For dblT = 0 To dblGesint Step dblTint
 	Cells(nCounter, 1).Value = dblAmp * Cos(dblEigenf * dblT)
 	nCounter = nCounter + 1
 	Next

Mittels dieser Formel kann ich die Werte, die ich in einem Diagramm anzeigen möchte, errechnen und als Tabelle in Excel darstellen.
Diese Werte möchte ich nun aber noch in einem Diagramm graphisch darstellen. Das Problem hierbei ist, dass der User den Datenbereich selber bestimmen können muss!

Ich hoffe mir kann jemand sagen, wie ich diese Werte in nun in das Diagramm bekomme!

Vielen dank

Cpt. Kamikaze
 
Hi

also vom Grundprinzip geht das wie folgt:
Code:
    ActiveSheet.ChartObjects("Diagramm 1").Activate
    ActiveChart.ChartArea.Select
    ActiveChart.SetSourceData Source:=Sheets("Tabelle1").Range("A2:A8"), _
                              PlotBy:=xlColumns
    Range("A1").Select

Hope it helps
Das Orakel
 
Hallo,
sorry aber das Hilft nicht. Wenn ich den Code so übernehme setze ich die Größe der Tabelle fest. Dies tut aber der User....

Code:
 For dblT = 0 To dblGesint Step dblTint
(hier die länge der Schleife!)

Kann ich das auch irgendwie berücksichtigen

Vielen Dank

Cpt. Kamikaze
 
Hi

sorry, bin ich allerdings anderer Meinung. ;)
Wenn das eine Schleife ist, die alle möglichen Werte für das Diagramm ausgibt, dann hilft evtl. ein bischen einfache Logik.
Code:
For dblT = 0 To dblGesint Step dblTint

1) Du beginnst die Ausgabe immer in Zelle A1. Das ist schon mal der erste Wert, den Du benötigst.

2) Nachdem Deine Schleife durchlaufen ist, hat Dein Zeilenzähler einen Wert, der um 1 höher ist als die letzte Ausgabezeile. Nun kannst Du einfach die Adresse der letzten Zelle mit "Cells(nCounter - 1, 1).Address" ermitteln und erhälst so den zweiten Wert, den Du benötigst.

3) Brauchen wir nun nur noch die beiden so ermittelten Werte in die Anweisung
ActiveChart.SetSourceData Source:=Sheets("Tabelle1").Range("A2:A8"), _
PlotBy:=xlColumns
einsetzen. Das könnte jetzt etwa in der Art
szRange = "$A$1:" & Cells(nCounter - 1, 1).Address
ActiveChart.SetSourceData Source:=Sheets("Tabelle1").Range(szRange), _
PlotBy:=xlColumns

geschehen.


Gruß
Das Orakel
 
Erstmal danke für deine Hilfe... aber ich raffe es irgendwie nicht, bekomme andauernd Fehlermeldungen! (zB Laufzeitfehler, Unverträglichkeitsfehler etc...

Das ganze schaut im Moment so aus:

Code:
	'Berechnung des Weges
 	Workbooks("FederMasseSystem.xls").Activate
 	Sheets("Weg").Activate
 	nCounter = 7
 	For dblT = 0 To dblGesint Step dblTint
 	Cells(nCounter, 4).Value = dblAmp * Cos(dblEigenf * dblT)
 	Cells(nCounter, 4).Value = Round(Cells(nCounter, 4).Value, 5)
 	nCounter = nCounter + 1
 	Next
 	
    
 	
 	ActiveSheet.ChartObjects("Weg").Activate
 	ActiveChart.ChartArea.Select
 	szRange = "D7:" & Cells(nCounter - 1, 1).Address
 	ActiveChart.SetSourceData Source:=Sheets("Tabelle1").Range(szRange), _
 							  PlotBy:=xlColumns
 	Range("G7").Select

Ich kann dazu nur eins sagen *Help me please*

Achja hier
Code:
	szRange = "D7:" & Cells(nCounter - 1, 1).Address
bekomme ich einen Syntaxfehler!

Vielen Dank

Cpt. Kamikaze
 
Hmmm,

evtl mußt Du szRange noch mit "Dim szRange As String" deklarieren. Aber so Stück für Stück Diagnose ist nicht ganz einfach. Kannst Du das Excel Sheet bereitstellen ?

Gruß
Das fragende Orakel
 
So hier ist die Datei.... um einen Testlauf bezüglich des Diagramms zu machen muss beim Eingabefenster der Dämpfungskoeffizient = 0 sein!

Da das Programm noch nicht beim Öffnen der Excel Datei gestartet wird, muss es über Extras --> Makros --> Visual Basic Editorgeöffnet werden!

Vielen Dank!
 

Anhänge

  • FederMasseSystem.zip
    28,2 KB · Aufrufe: 339
Hi,

verstehe zwar nicht, was das Teil so anstellt, aber die Fehler hab ich gefunden. Der Code sollte wie folgt aussehen.

Code:
    'Berechnung des Weges
    Workbooks("FederMasseSystem.xls").Activate
    Sheets("Weg").Activate
    nCounter = 7
    For dblT = 0 To dblGesint Step dblTint
        Cells(nCounter, 4).Value = dblAmp * Cos(dblEigenf * dblT)
        Cells(nCounter, 4).Value = Round(Cells(nCounter, 4).Value, 5)
        nCounter = nCounter + 1
    Next
    szRange = "D7:D" & CStr(nCounter + 7 - 1)
    Nachdem ich besser verstanden habe, was Du möchtest, ist diese Art 
    der Festlegung der Datenreihe wesentlich verständlicher. +7 weil Du
    ja erst in Zeile 7 mit der Ausgabe anfängst.
    ActiveSheet.ChartObjects("Diagramm 1").Activate
    Das Chartobjekt wird in Deinem Sheet mit "Diagramm 1" angesprochen.
    ActiveChart.ChartArea.Select
    ActiveChart.SetSourceData Source:=Sheets("Weg").Range(szRange), _
                              PlotBy:=xlColumns
    Range("G7").Select

Tschau
Das Orakel
 
Hallo,
jetzt klappt es (endlich)!

Das ganze ist fürs Studium... Stell dir einfach vor es berechnet die Bewegungen eines Stoßdämpfers....

Vielen Dank nochmal!

Cpt. Kamikaze!
 

Neue Beiträge

Zurück