Datenquelle eines Diagramms...

Bild

Betrifft: Datenquelle eines Diagramms... von: Achim
Geschrieben am: 17.02.2005 12:41:17

Hallo Leute,

wie kann ich die Datenquelle, also den Zellbereich der Tabelle auslesen,
aus der das Diagramm gespeist wird? ich brauch das in der Form, dass ich
den Zellbereich mit Makro markieren kann, auch wenn er sich in einer anderen
Tabelle befindet als das Diagramm.

Gruß Achim

Bild


Betrifft: AW: Datenquelle eines Diagramms... von: Norman
Geschrieben am: 17.02.2005 23:48:51

Hi Achim,

Die Bereiche findest Du über:

sub DiagrammFormelnHolen()
Dim coitem As ChartObject
Dim cgitem As ChartGroup
Dim scitem As Series
For Each coitem In thisworkbook.worksheets("MeinSheet").ChartObjects
For Each cgitem In coitem.Chart.ChartGroups
For Each scitem In cgitem.SeriesCollection
If IsReadableFormula(scitem) Then
debug.print scitem.formula
End If
Next scitem
Next cgitem
Next coitem
End Sub

' Unschöner Workaround, muss mir irgendwann mal was besseres einfallen lassen...
' Funktioniert aber
Private Function IsReadableFormula(anything) As Boolean
  On Error GoTo nopeNotReadable
  Debug.Print anything.formula
  IsReadableFormula = True
  Exit Function
nopeNotReadable:
  IsReadableFormula = False
End Function



Vielleicht reicht ja schon ein select mit der Formel, habe ich aber nicht getestet. Formatierung des Beispiel ist irgendwie hops, bekommste aber bestimmt selbst hin.

Beste Grüße
Norman


Bild


Betrifft: AW: Datenquelle eines Diagramms... von: Achim
Geschrieben am: 18.02.2005 00:19:49

Hi,

danke, aber das liefert eine Formel, die so aussieht:

=SERIES(,Tabelle1!$A$1:$A$10,Tabelle1!$B$1:$B$10,1)

Damit kann ich aber nicht den Bereich in der Tabelle markieren.
Hast du noch weitere Tipps?

Gruß Achim


Bild


Betrifft: AW: Datenquelle eines Diagramms... von: Norman
Geschrieben am: 18.02.2005 00:44:26

Hi Achim,

=SERIES(,Tabelle1!$A$1:$A$10,Tabelle1!$B$1:$B$10,1) ist doch genau das, was Du brauchst, oder etwa nicht? Tabelle1!$B$1:$B$10 ist der Datenbereich, der Dich interessiert. Du müsstest also den String scannen (z.B. mittels instr nach dem zweiten Komma suchen, das Ende wäre dann das dritte Komma, dann alles mit Mid auslesen) und dann den Bereich markieren (Range("Tabelle1!$B$1:$B$10").Select).

Beste Grüße
Norman


Bild


Betrifft: AW: Datenquelle eines Diagramms... von: Achim
Geschrieben am: 18.02.2005 12:56:01

Hi,

danke, aber das kann ich nicht, kannst du mir ein Codebeispiel geben?

Gruß Achim


Bild


Betrifft: AW: Datenquelle eines Diagramms... von: Norman
Geschrieben am: 20.02.2005 23:55:36

Hi Achim,

sorry, war heut unterwegs. Mach mal folgendes, dann klappts :) Bitte in ein Modul legen und dann in Deinen eigenen Routinen GetAreaFromSeries mit der Formel aufrufen. Test() erläutert, was Du dann noch machen musst. Pass auch bitte auf beim Kopieren des Codes, irgendwie landet hier hinter jedem exit ein Zeilenumbruf. Exit
Function muss natürlich zusammenstehen.
Gruß
Norman
Option Explicit
Sub test()
 Dim s As String
 s = "=SERIES(,Tabelle1!$A$1:$A$10,Tabelle1!$B$1:$B$10,1)"
 Dim res As String
 Dim resTable As String
 res = GetAreaFromSeries(s, resTable)
 Debug.Print res
 If Len(res) > 0 Then
   If Len(resTable) > 0 Then Sheets(resTable).Activate
   Range(res).Activate
 End If
End Sub


Function GetAreaFromSeries(s As String, ByRef resTable As String) As String
 GetAreaFromSeries = ""
 resTable = ""
 Dim pos As Long
 
 ' Das erste Komma suchen
 pos = InStr(s, ",")
 If pos <= 0 Then Exit 
Function ' Irgendwas ist hier faul...
 
 ' Jetzt das 2. Komma holen
 pos = InStr(pos, s, ",")
 If pos <= 0 Then Exit 
Function ' Irgendwas ist hier faul...
 
 ' Ab pos + 1 ist der gesuchte Teil, jetzt brauchen wir auch noch das Ende
 Dim endPos As Long
 endPos = InStr(pos + 1, s, ",") ' Bitte hinter dem zuletzt gefundenen Komma anfange
 If endPos <= 0 Then Exit 
Function ' Irgendwas ist hier faul...
 
 Dim res As String
 ' ok, jetzt haben wir alles
 res = Mid(s, pos + 1, endPos - pos - 1)
 
 ' Wenn ein Ausrufezeichen im Ergebnis vorhanden ist, dann holen wir auch noch die Tabelle
 pos = InStr(res, "!")
 If pos > 1 Then
  resTable = Left(res, pos - 1)
 End If
 
 ' Wennns die Daten aus ner anderen Datei kommen hast Du allerdings ein Problem :)
 GetAreaFromSeries = res
 
 ' Fertig
End Function



Bild


Betrifft: AW: Datenquelle eines Diagramms... von: Reinhard
Geschrieben am: 21.02.2005 00:06:36

Hi Norman,
kann die Zeilenumbrüche nicht nachvollziehen.
Gruß
Reinhard

Option Explicit
Sub test()
 Dim s As String
 s = "=SERIES(,Tabelle1!$A$1:$A$10,Tabelle1!$B$1:$B$10,1)"
 Dim res As String
 Dim resTable As String
 res = GetAreaFromSeries(s, resTable)
 Debug.Print res
 If Len(res) > 0 Then
   If Len(resTable) > 0 Then Sheets(resTable).Activate
   Range(res).Activate
 End If
End Sub

Function GetAreaFromSeries(s As String, ByRef resTable As String) As String
 GetAreaFromSeries = ""
 resTable = ""
 Dim pos As Long
 ' Das erste Komma suchen
 pos = InStr(s, ",")
 If pos <= 0 Then Exit Function
  ' Jetzt das 2. Komma holen
 pos = InStr(pos, s, ",")
 If pos <= 0 Then Exit Function
  ' Ab pos + 1 ist der gesuchte Teil, jetzt brauchen wir auch noch das Ende
 Dim endPos As Long
 endPos = InStr(pos + 1, s, ",") ' Bitte hinter dem zuletzt gefundenen Komma anfange
 If endPos <= 0 Then Exit Function
  Dim res As String
 ' ok, jetzt haben wir alles
 res = Mid(s, pos + 1, endPos - pos - 1)
  ' Wenn ein Ausrufezeichen im Ergebnis vorhanden ist, dann holen wir auch noch die Tabelle
 pos = InStr(res, "!")
 If pos > 1 Then
  resTable = Left(res, pos - 1)
 End If
  ' Wennns die Daten aus ner anderen Datei kommen hast Du allerdings ein Problem :)
 GetAreaFromSeries = res
  ' Fertig
End Function



Bild


Betrifft: AW: Datenquelle eines Diagramms... von: Norman
Geschrieben am: 21.02.2005 00:45:47

Hi Reinhard,

bei mir waren auch keine drin, sah so aus wie bei Dir. Vielleicht liegts ja an meinem Firefox.

Gruß
Norman


Bild


Betrifft: OT Habe Mozilla 1.7 o.w.T. von: Reinhard
Geschrieben am: 21.02.2005 00:50:32




 Bild

Beiträge aus den Excel-Beispielen zum Thema "Solver über VBA starten? Hilferuf an Nepumuk"