Herbers Excel-Forum - das Archiv

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