Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  Excel
  Diagramm: Achsen skalieren

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:  Diagramm: Achsen skalieren (22907 mal gelesen)
stefga
Mitglied



Sehen Sie sich das Profil von stefga an!   Senden Sie eine Private Message an stefga  Schreiben Sie einen Gästebucheintrag für stefga

Beiträge: 138
Registriert: 17.05.2007

Excel97

erstellt am: 25. Feb. 2009 17:32    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


Diagramm1.xls.txt

 
Hallo,

ich habe ein Diagramm mit 2 y-Achsen erstellt. Nun möchte ich, dass die gemeinsame x-Achse beide y-Achsen bei "0" schneidet. Gleichzeitig soll die Skalierung beider Y-Achsen dynamisch sein, d.h. wenn sich der max. Wert z.B. von 90 auf 200 ändert, soll sich die Skalierung automatisch anpassen. Zu diesem Zweck setzt man ja normalerweise bei "Achse formatieren-Skalierung" das Häkchen vor Kleinst-/Größtwert, dann paßt sich die Skalierung automatisch an. Nur ist es dann bei mir so, dass die x-Achse nicht beide Achsen bei 0 schneidet (siehe Beispielmappe erstes Diagramm). Es gibt noch die Möglichkeit "Größenachse x schneidet bei" einzustellen. Aber obwohl ich hier bei beiden Y-Achsen "0" eingebe, schneiden nicht beide Achsen bei 0.

Und gleich noch ein zweites Problem: die x-Achse soll sich ebenfalls dynamisch ändern. Da der Haken bei "Achse formatieren-Skalierung" gesetzt ist funktioniert das auch. Aber die Skalierung der Achse wird von Excel immer etwas größer gewählt, als der max. x-Wert. Z.B. wenn xmax=4 --> Skalierung geht bis 4,5. Wenn xmax=50 --> Skalierung geht bis 60. Kann man Excel beibiegen, dass die Skalieung nur exakt bis 4 bzw. 50 gehen soll?

------------------
Gruß
Stefan

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Thomas Harmening
Moderator
Arbeiter ツ




Sehen Sie sich das Profil von Thomas Harmening an!   Senden Sie eine Private Message an Thomas Harmening  Schreiben Sie einen Gästebucheintrag für Thomas Harmening

Beiträge: 2897
Registriert: 06.07.2001

Das Innerste geäussert
und aufs Äusserste verinnerlicht

erstellt am: 25. Feb. 2009 21:25    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für stefga 10 Unities + Antwort hilfreich

   
Zitat:
Nur ist es dann bei mir so, dass die x-Achse nicht beide Achsen bei 0 schneidet (siehe Beispielmappe erstes Diagramm). Es gibt noch die Möglichkeit "Größenachse x schneidet bei" einzustellen. Aber obwohl ich hier bei beiden Y-Achsen "0" eingebe, schneiden nicht beide Achsen bei 0.
Irgendwie hat sich auch die 2te Y-Achse sich auch noch nicht ersten Y-Achse vorgestellt, bzw. sich untereinander Bekannt gemacht, darum kommen sie auch nicht auf einen gemeinsamen Nenner, äh Null...
- Will sagen, beide Achsen wissen von einander nichts ;)

Somit braucht es Hilfe von Aussen.
Formeln scheiden IMHOIn my humble oppinion (Meiner Meinung nach) aus, bleibt nur Vba übrig.

Grob: Wie gehe ich vor.

Makroaufzeichnung Starten, Y1-Achse auf Auto Stellen, Y2 Achse min/Max Werte verändern.
Die Aufzeichnung beenden.
Ein wenig in den Code reinblicken, mir F8 schrittweisse ablaufen lassen,
lesen verstehen und ausprobieren,
grübeln, wie komme ich an die Y2.MinimumScale, Y2.MaximumScale Werte heran...
wenn herausgefunden, diese Werte in Variablen schreiben, Y2min, und Y2max
Nun noch eine mathematische Neuskalierung der Y1 Werte anhand der Y2 Werte
Zurückschrieben der Werte in die Y1-Achse...

Untenstehend ein VBA wie es funktioniert - ist bezogen auf deine Mappe/Diagramm.
nur die Berechnung der Neuskalierung Der Y1 Achse mache ich nicht ;-)
Weihnachten war schon und bis Ostern ist es noch eine Weile ;-)
-Obwohl für Ostern gilt ja eher wer suchet der Findet ;)

Egal - Deswegen stehen da Dummy-Werte

Das ist dann eine Arbeit die du machen müsstest, die Neuskalierung der Werte.

Ich habe bis auf das Ausdokumentierte nichts gross an der Makroaufzeichnung geändert,
Nur die Select Anweisung, die braucht man hier nicht.

...und einige Deklarationen wie die Achsen Auszusehen haben, Würde ich auch noch rauswerfen ;)

Hoffe irgendwie geholfen zu haben ,)

Code:
Sub Makro1()

'Y1
ActiveSheet.ChartObjects("Diagramm 3").Activate
    With ActiveChart.Axes(xlValue)                
        .MinimumScaleIsAuto = True
        .MaximumScaleIsAuto = True
        .MinorUnitIsAuto = True
        .MajorUnitIsAuto = True
        .Crosses = xlAutomatic
        .ReversePlotOrder = False
        .ScaleType = xlLinear
        .DisplayUnit = xlNone
        Y1min = .MinimumScale 'bevor wir hier rausgehen, holen wie noch schnell die min-Max Werte ;-
        Y1max = .MaximumScale '
    End With
   
'Y2
ActiveChart.Axes(xlValue, xlSecondary).Select
    With ActiveChart.Axes(xlValue, xlSecondary)  
        .MinimumScaleIsAuto = True
        .MaximumScaleIsAuto = True
        .MinorUnitIsAuto = True
        .MajorUnitIsAuto = True
        .Crosses = xlAutomatic
        .ReversePlotOrder = False
        .ScaleType = xlLinear
        .DisplayUnit = xlNone
        ' und auch hier die Werte nicht vergessen ;-)
        Y2min = .MinimumScale
        Y2max = .MaximumScale
    End With

'es folgen nun Rechenoperationen, die Y1min/max an die Werte von Y2min/max anpassen
NeuerY1MinimWert = Rechenoperation ' von Y1min und Y2min...
NeuerY1MaximumWert = Rechenoperation ' von Y1max und Y2max...

NeuerY1MinimWert = -100  ' Dummy zum testen des Ablaufes
NeuerY1MaximumWert = 100 ' Dummy zum testen des Ablaufes

'Y1
    ActiveSheet.ChartObjects("Diagramm 3").Activate
    ActiveChart.Axes(xlValue).Select
    With ActiveChart.Axes(xlValue)
        .MinimumScale = NeuerY1MinimWert    'Zurückschreiben
        .MaximumScale = NeuerY1MaximumWert  'Zurückschreiben
        .MinorUnitIsAuto = True
        .MajorUnitIsAuto = True
        .Crosses = xlAutomatic
        .ReversePlotOrder = False
        .ScaleType = xlLinear
        .DisplayUnit = xlNone
    End With
End Sub


Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

stefga
Mitglied



Sehen Sie sich das Profil von stefga an!   Senden Sie eine Private Message an stefga  Schreiben Sie einen Gästebucheintrag für stefga

Beiträge: 138
Registriert: 17.05.2007

Excel97

erstellt am: 26. Feb. 2009 16:38    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


Diagramm2.xls.txt

 
Zunächst mal Danke für den ausführlichen VBA-Code. Ich hatte gehofft es geht auch ohne, denn von VBA hab ich soviel Ahnung wie ne Kuh vom tanzen , aber Du hast ja schon gut vorgearbeitet

Ich hab den Code mal in meine Beispielmappe reinkopiert und die Rechenoperation ergänzt. Wenn ich das Makro nun ausführe kommt immer die Fehlermeldung "Laufzeitfehler 438: Objekt unterstützt diese Methode oder Eigenschaft nicht" und zwar in der Zeile

Code:

.DisplayUnit = xlNone

Kannst Du mir vielleicht einen Tipp geben, was die Ursache dafür ist? Mit den Infos von Herrn google zu diesem Fehler komm ich leider nicht weiter. Es hängt wohl mit der von Dir angesprochenen "select Anweisung" zusammen?

Zitat:

Irgendwie hat sich auch die 2te Y-Achse sich auch noch nicht ersten Y-Achse vorgestellt, bzw. sich untereinander Bekannt gemacht, darum kommen sie auch nicht auf einen gemeinsamen Nenner, äh Null...
- Will sagen, beide Achsen wissen von einander nichts 

Die Eingabemöglichkeit "Größenachse x schneidet bei: 0" sollte aber meinem Verständnis nach  genau die Funktionalität erfüllen, die hier jetzt mühsam per VBA gebastelt wird. Es scheint aber nur solange zu funktionieren, wie mit nur einer Y-Achse gearbeitet wird und nicht mit 2 (Zumindest bei Excel97, vielleicht hat Excel bei den neueren Versionen ja dazugelernt).

------------------
Gruß
Stefan

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Thomas Harmening
Moderator
Arbeiter ツ




Sehen Sie sich das Profil von Thomas Harmening an!   Senden Sie eine Private Message an Thomas Harmening  Schreiben Sie einen Gästebucheintrag für Thomas Harmening

Beiträge: 2897
Registriert: 06.07.2001

Das Innerste geäussert
und aufs Äusserste verinnerlicht

erstellt am: 26. Feb. 2009 19:07    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für stefga 10 Unities + Antwort hilfreich


primaryandsecundary.png

 
... also deine Mappe läuft einwandfrei auf XL 2003

lasse einfach .DisplayUnit = xlNone weg, das kennt Das 97 Excel wohl noch nicht und auch Xl2003 stört es nicht wenn die zeile nicht existiert.  '.DisplayUnit = xlThousands aka Einheiten anzeigen aus dem Achsenformatiermenue

Mit der Select Anweisung hat das nicht zu zutun, die entsteht weil User ja ein Element auswählt mit Maus/Taste, das ist das Select. Da das Makro aber eh Diagramm3 Aktiv setzt und auch zwischenzeitlich im Ablauf nicht anderes Fokusiert wird, sind diese Selektanweisungen in fast allen Fällen überflüssig, irgendjemand sagte mal er kenne nur 2 Fälle wo die selectanweisung unabdingbar wäre   

  

Zitat:
Die Eingabemöglichkeit "Größenachse x schneidet bei: 0" sollte aber meinem Verständnis nach  genau die Funktionalität erfüllen, die hier jetzt mühsam per VBA gebastelt wird
Nein!
Richtig lautet es Grössenachse (X) schneidet bei    und zwar ist die X- Achse gemeint die zu Der Y - Achse gehört. das Betrifft die (PrimärAchse!) ;-)

Deine 2 Werte Reihe (Secundärachse!) hat eine eigene Y-Achse und auch eine eigene X - Achse.
auch wenn diese X-Achse die selbe Skalierung ausweist wie X- Achse aus der Primären Achse

siehe Bild 2 X und 2 Y achsen ,)


und mühsam ist was anderes    und schön das du das mit der Umskalierung per Code hinbekommen hast ;-)

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

stefga
Mitglied



Sehen Sie sich das Profil von stefga an!   Senden Sie eine Private Message an stefga  Schreiben Sie einen Gästebucheintrag für stefga

Beiträge: 138
Registriert: 17.05.2007

Excel97

erstellt am: 26. Feb. 2009 20:03    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Super jetzt funktioniert es bei mir auch.

Zitat:
...und schön das du das mit der Umskalierung per Code hinbekommen hast ;-)

..ja, ich bin auch mächtig stolz auf mich. Und wo ich jetzt schon mal blut geleckt habe versuche ich das ganze noch etwas nach meinen Vorstellungen auszugestalten.

------------------
Gruß
Stefan

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

stefga
Mitglied



Sehen Sie sich das Profil von stefga an!   Senden Sie eine Private Message an stefga  Schreiben Sie einen Gästebucheintrag für stefga

Beiträge: 138
Registriert: 17.05.2007

Excel97

erstellt am: 27. Feb. 2009 19:08    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


Diagramm3.xls.txt

 
Hallo,
ich habe an dem Makro noch etwas rumgespielt und versucht, es automatisch starten zu lassen, wenn sich ein eingegebener Wert in einer Zelle (hier B1) ändert. Hier der Code:
Code:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target = Range("B1") Then
    Application.Run "Skalierung_yAchse_anpassen"
End If
End Sub

Der funktioniert in der angehängten Testmappe auch einwandfrei. Nur wenn ich den Code in meine richtige Mappe kopiere, erhalte ich dort die Fehlermeldung "Laufzeitfehler 13: Typen unverträglich" und zwar in der Zeile

Code:

If Target = Range("B1") Then

Die richtige (fehlerverursachende) Mappe kann ich leider nicht hochladen, aber hat vielleicht trotzdem jemand eine Ahnung was diesen Fehler verursachen könnte? Andere Makros o.ä. enthält die Mappe nicht.

Des weiteren möchte ich für den automatischen start nicht nur eine einzelne Zelle (hier B1) abfragen sondern einen Bereich. Etwa in der Art:

Code:

If Target = Range("B1:C3") Then

Aber auch hier kommt der gleiche Laufzeitfehler (schon in der Testmappe). Beim Range-Befehl können doch nicht nur einzelne Zellen angegeben werden sondern auch Zellbereiche, also was mache ich falsch?

------------------
Gruß
Stefan

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

runkelruebe
Moderator
Straßen- / Tiefbau




Sehen Sie sich das Profil von runkelruebe an!   Senden Sie eine Private Message an runkelruebe  Schreiben Sie einen Gästebucheintrag für runkelruebe

Beiträge: 8075
Registriert: 09.03.2006

MS-Office 365 ProPlus x86
WIN7(x64)

erstellt am: 27. Feb. 2009 19:59    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für stefga 10 Unities + Antwort hilfreich

Hi,
hilft das mit dem Intersect? hier verwendet und hier beschrieben.
Ansonsten kann ich wie schon erwähnt ;-) nicht helfen, mein XL ist 10 Jahre jünger   
Bei mir tut es ein
Code:
If Not Intersect(Target, Range("B1:B3")) Is Nothing Then

------------------
Gruß,
runkelruebe          Herr Kann-ich-nich wohnt in der Will-ich-nich-Straße...

System-Info     Excel -Suche    RuA-Suche     FAQ-ACAD     Hilfe zu CAD.de 

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Thomas Harmening
Moderator
Arbeiter ツ




Sehen Sie sich das Profil von Thomas Harmening an!   Senden Sie eine Private Message an Thomas Harmening  Schreiben Sie einen Gästebucheintrag für Thomas Harmening

Beiträge: 2897
Registriert: 06.07.2001

Das Innerste geäussert
und aufs Äusserste verinnerlicht

erstellt am: 27. Feb. 2009 23:49    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für stefga 10 Unities + Antwort hilfreich

Beispiel mappe lauft einwandfrei, kann es dann an verbundenen Zellen liegen?

Ne Abwandlung von Rübes Vorschlag 

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("B1:B3")) Is Nothing Then Exit Sub
Skalierung_yAchse_anpassen
End Sub

@Rübe, Na jünger würde ich es so nicht bezeichnen, es war beim Facelifting ;-)

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

stefga
Mitglied



Sehen Sie sich das Profil von stefga an!   Senden Sie eine Private Message an stefga  Schreiben Sie einen Gästebucheintrag für stefga

Beiträge: 138
Registriert: 17.05.2007

Excel97

erstellt am: 28. Feb. 2009 13:14    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Zitat:
Original erstellt von runkelruebe:
hilft das mit dem Intersect?

Zitat:
Original erstellt von Thomas Harmening:
...kann es dann an verbundenen Zellen liegen?

2xTreffer versenkt. Wenn ich die verbundenen Zellen trenne läuft mein eigener code ohne Fehlermeldung und mit dem intersect kann ich auch Zellbereiche ansprechen. Da ich die Zellen aber nicht trennen will nehme ich natürlich den code von Thomas bzw. den von Rübe, die beide auch mit verbundenen Zellen funktionieren. Somit Problem gelöst, Danke und Üs.

------------------
Gruß
Stefan

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Thomas Harmening
Moderator
Arbeiter ツ




Sehen Sie sich das Profil von Thomas Harmening an!   Senden Sie eine Private Message an Thomas Harmening  Schreiben Sie einen Gästebucheintrag für Thomas Harmening

Beiträge: 2897
Registriert: 06.07.2001

Das Innerste geäussert
und aufs Äusserste verinnerlicht

erstellt am: 28. Feb. 2009 13:43    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für stefga 10 Unities + Antwort hilfreich

Auch wenn es mit Intersect funktioniert,
sind verbunden Zellen immer ein lästiges Schmakerl,
sofern diese Zellen für weitere Formeln herhalten müssen,
und daher zu vermeiden.
- Alternativ diese Zelle über Auswahl zentriert formatieren
wenn es denn unbedingt sein muss -aber ich denke immer,
Excel ist kein Präsentations Programm - rechen muss es 

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Beverly
Mitglied
Dipl.-Geologe (Rentner)


Sehen Sie sich das Profil von Beverly an!   Senden Sie eine Private Message an Berverly  Schreiben Sie einen Gästebucheintrag für Berverly

Beiträge: 394
Registriert: 11.08.2007

erstellt am: 28. Feb. 2009 14:00    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für stefga 10 Unities + Antwort hilfreich

Hi Stefan,

damit die X-Achse die Y-Achse genau in der Mitte schneidet, benötigt man kein VBA. Es reicht aus, eine zusätzliche Datenreihe  aus einem Datenpunkt für jede der beiden Y-Achsen zu erstellen, die den Wert =-MAX(B7:B11) für die primäre und =WENN(ABS(MIN(C7:C11))>MAX(C7:C11);-MIN(C7:C11);-MAX(C7:C11)) für die sekundäre Y-Achse haben.

Bei der Anpassung der X-Achse ist Excel ja leider stur  , das geht eben nur mit VBA. Dazu hier ein Code (angepasst an deine Beispielmappe und bezogen auf das obere der beiden Diagramme):

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("A7:C11")) Is Nothing Then
        If Target.Count = 1 Then ActiveSheet.ChartObjects(1).Chart.Axes(xlCategory).MaximumScale = _
            Application.WorksheetFunction.Max(Range("A7:A11"))
    End If
End Sub

------------------
Bis später,
Karin

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

stefga
Mitglied



Sehen Sie sich das Profil von stefga an!   Senden Sie eine Private Message an stefga  Schreiben Sie einen Gästebucheintrag für stefga

Beiträge: 138
Registriert: 17.05.2007

Excel97

erstellt am: 28. Feb. 2009 19:38    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


Diagramm4.xls.txt

 
Danke Beverly, das Makro für die x-Achse hilft mir weiter. Ich habe selbst auch schon dran rumgetüftelt, aber ich hatte es noch nicht am laufen. Dank Deiner Hilfe läuft es jetzt.
Die Formellösung für die Y-Achse ist wie immer sehr trickreich von Dir. In meinem Fall muss die x-Achse die beiden y-Achsen jedoch nicht unbedingt mittig schneiden, sondern nur auf der gleichen Höhe. Wenn die negativen Werte z.B. weitaus kleiner sind als die positiven dann verschenke ich bei dieser Formelvariante einen Großteil des Anzeigebereichs. Da ich für die x-Achse eh eine VBA-Lösung brauche bleibe ich deshalb auch für die y-Achse dabei (außerdem hat mich jetzt der Ehrgeiz gepackt    ). Trotzdem vielen Dank für die Formel.

@runkelrübe: Du hattest mich freundlicherweise darauf hingewiesen, dass man in Excel97 ein Diagramm möglichst nicht erst aktivieren und über ActiveChart verändern soll, sondern direkt darauf zugreifen sollte. Genau dies möchte ich tun, denn wenn ich mein Excel-Tabellenblatt (mit dem zwischenzeitlich lauffähigen Makro) kopiere läuft auf demkopierten Tabellenblatt mein Makro nicht mehr und VBA meckert immer die erste Zeile mit dem activate an (siehe Codeauszug):

Code:
'Y1
ActiveSheet.ChartObjects("Diagramm 3").Activate
    With ActiveChart.Axes(xlValue)
        .MinimumScaleIsAuto = True
        .MaximumScaleIsAuto = True
        Y1min = .MinimumScale 'min-max Werte auslesen
        Y1max = .MaximumScale
    End With

Deshalb denke/hoffe ich, dass es an dem aktivieren liegt.

Ich habe versucht das aktivieren wegzulassen und den code wie folgt abzuändern:

Code:
'Y1
ActiveSheet.ChartObjects ("Diagramm 3")
   
        ActiveSheet.ChartObjects("Diagramm 3").Chart.Axes(xlValue).MinimumScaleIsAuto = True
        ActiveSheet.ChartObjects("Diagramm 3").Chart.Axes(xlValue).MaximumScaleIsAuto = True
        Y1min = ActiveSheet.ChartObjects("Diagramm 3").Chart.Axes(xlValue).MinimumScale
        Y1max = ActiveSheet.ChartObjects("Diagramm 3").Chart.Axes(xlValue).MaximumScale
    End
aber ohne Erfolg. Könntest Du mir eventuell anhand meines Codeauszug das direkte ansprechen eines Diagramms zeigen? Ich hab schon etliche Synatxvarianten durchprobiert aber es will nicht so recht klappen und in dem von Dir genannten file QUELLE (pdf) finde ich leider auch nicht den richtigen Syntaxansatz.

PS: wieso funktioniert eigentlich der Makrostart mit dieser sub

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B5:B9")) Is Nothing Then
    Application.Run "Skalierung_yAchse_anpassen"
End If
End Sub

nur dann, wenn man in eine der Zellen B5 bis B9 einen Zahlenwert durch direkte Werteingabe ändert und nicht, wenn der Wert einer der Zellen mittels Formel neu berechnet wird (siehe Beispielmappe)?

PPS: rein interessehalber: ist der Makroname "Worksheet_Change" eigentlich obligatorisch, wenn ein Makro durch eine Eingabe im sheet gestartet werden soll? Ich hatte anfangs 2 getrennte subs für x und y Achse. Da dann logischerweise der identische Name von VBA moniert wurde wollte ich eine davon unbenennen, was aber ebenfalls moniert wurde. Deshalb habe ich gezwungenermaßen beide zusammengepackt.

------------------
Gruß
Stefan

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

runkelruebe
Moderator
Straßen- / Tiefbau




Sehen Sie sich das Profil von runkelruebe an!   Senden Sie eine Private Message an runkelruebe  Schreiben Sie einen Gästebucheintrag für runkelruebe

Beiträge: 8075
Registriert: 09.03.2006

MS-Office 365 ProPlus x86
WIN7(x64)

erstellt am: 28. Feb. 2009 20:38    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für stefga 10 Unities + Antwort hilfreich

N'Abend Stefan,

Hmm,leider kommen wir damit wieder zu: Ich kann es nicht testen, ich habe kein XL97. Bei mir (XL2007) läuft es durch. Ich habe Deine Mappe genommen, das vorh. sheet kopiert und Zelle B5 geändert. -> Makro läuft durch [kontrolliert einfach nur durch gesetzten Haltepunkt, nicht ob es wirklich das tut, was es soll, so tief wollte ich nicht einsteigen ;-)]

Ich persönlich bin kein Freund von ActiveSheet, ich lege den Sheet-Index lieber hart fest oder nutze den Namen. Vielleicht kannst Du daraufhin irgendwie ändern (z.B. durch Übergabe des Namens an die Sub, aber auch hier: ob es daran wirklich liegt: keine Ahnung)
Wie komme ich darauf? :
Da Du ja weiter unten schreibst, "wenn der Wert einer der Zellen mittels Formel neu berechnet wird"
=> Du bist während des Ansprechen der Sub Skalierung_yAchse_anpassen() aber auch ganz bestimmt auf dem richtigen sheet?

  

Zitat:
  Könntest Du mir eventuell anhand meines Codeauszug das direkte ansprechen eines Diagramms zeigen

ich versuche es (auch direkt mal ohne ActiveSheet, aber noch fest auf Sheet(2) bezogen)
Code:
    With

Sheets(2).ChartObjects("Diagramm 3").Chart.Axes(xlValue)
        .MinimumScaleIsAuto = True
        .MaximumScaleIsAuto = True
        .MinorUnitIsAuto = True
        .MajorUnitIsAuto = True
        .Crosses = xlAutomatic
        .ReversePlotOrder = False
        .ScaleType = xlLinear
        Y1min = .MinimumScale 'min-max Werte auslesen
        Y1max = .MaximumScale
    End With


Zitat:
rein interessehalber: ist der Makroname "Worksheet_Change" eigentlich obligatorisch, wenn ein

Makro durch eine Eingabe im sheet gestartet werden soll?


Ja, das ist "ein von Excel vergebener" Name, sie reagieren auf bestimmte Ereignisse der Datei und sind somit zwingend vorgeschrieben.
Es gibt noch weitere ähnlich arbeitende: z.B.:
Private Sub Worksheet_Activate()
Private Sub Worksheet_Calculate()
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
u.s.w.

Ähnlich beim Workbook (DieseArbeitsmappe):
Private Sub Workbook_Open()
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
u.v.m.

Und das beantwortet dann vielleicht auch die Frage:   

Zitat:
  wieso funktioniert eigentlich der Makrostart mit dieser sub Worksheet_Change nur dann, wenn man in eine der Zellen B5 bis B9 einen Zahlenwert durch direkte Werteingabe ändert und nicht, wenn der Wert einer der Zellen mittels Formel neu berechnet wird (siehe Beispielmappe)?

Da könnte dann Worksheet_Calculate greifen, Achtung: gilt bei jedem neu durchrechnen, könnte die ganze Mappe ausbremsen. Um das zu umgehen siehe z.B.: http://www.herber.de/forum/archiv/820to824/t820362.htm
  
Zitat:
Ich hatte anfangs 2 getrennte subs für x und y Achse.
die dürftest Du auch weiterhin haben, das bedarf eben der Anpassung im oberen Teil: Beispiel:
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B5:B9")) Is Nothing Then
    Application.Run "Skalierung_yAchse_anpassen"
Else
If Not Intersect(Target, Range("C5:C9")) Is Nothing Then
    MsgBox "Y2-Achse"
End If

End If
End Sub


Ich hoffe, ich konnte auch mit meinem gelifteten XL ein paar Deiner Fragen klären.
Wenn nicht: immer weiter fragen, die community ist groß, taucht schon noch wer mit Ahnung auf ;-)

------------------
Gruß,
runkelruebe          Herr Kann-ich-nich wohnt in der Will-ich-nich-Straße...

System-Info     Excel -Suche    RuA-Suche     FAQ-ACAD     Hilfe zu CAD.de 

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Thomas Harmening
Moderator
Arbeiter ツ




Sehen Sie sich das Profil von Thomas Harmening an!   Senden Sie eine Private Message an Thomas Harmening  Schreiben Sie einen Gästebucheintrag für Thomas Harmening

Beiträge: 2897
Registriert: 06.07.2001

Das Innerste geäussert
und aufs Äusserste verinnerlicht

erstellt am: 28. Feb. 2009 21:55    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für stefga 10 Unities + Antwort hilfreich

 
Zitat:
Original erstellt von stefga:
Genau dies möchte ich tun, denn wenn ich mein Excel-Tabellenblatt (mit dem zwischenzeitlich lauffähigen Makro) kopiere läuft auf demkopierten Tabellenblatt mein Makro nicht mehr und VBA meckert immer die erste Zeile mit dem activate an (siehe Codeauszug):
Code:
ActiveSheet.ChartObjects("Diagramm 3").Activate


hmm, lass mich raten... durch das kopieren hat das Diagramm nun eine andere Bezeichnung bekommen?
Und das Script will ja Diagramm 3 aktivieren?

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Beverly
Mitglied
Dipl.-Geologe (Rentner)


Sehen Sie sich das Profil von Beverly an!   Senden Sie eine Private Message an Berverly  Schreiben Sie einen Gästebucheintrag für Berverly

Beiträge: 394
Registriert: 11.08.2007

erstellt am: 28. Feb. 2009 22:43    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für stefga 10 Unities + Antwort hilfreich

Hi,

wenn sich Werte aus Formeln ergeben ist der günstigste Weg, diejenigen Zellen im Worksheets_Change Ereignis zu überwachen, die Einfluss auf die Formel haben - in der Beispielmappe A1.

Da das Worksheet_Change Ereignis immer im aktiven Tabellenblatt ausgeführt wird, kann für die Achsenskalierung des Diagramms in diesem Fall immer ActiveSheet verwendet werden, man muss sich also nicht auf den Tabellennamen als solchen beziehen.

Es nicht immer günstig, das Diagramm direkt mit seinem Namen anzusprechen, denn wenn das Tabellenblatt kopiert wird, ändert sich der Diagrammname automatisch. Besser ist es in diesem Fall, den Diagrammindex zu verwenden anstelle des Namen (s. mein Beispiel).

Ein Teil des Codes kann weggelassen werden, denn der Markorekorder zeichnet auch Standardeinstellungen auf. Das betrifft die folgenden Zeilen:

Code:
        .MinimumScaleIsAuto = True
        .MaximumScaleIsAuto = True
        .MinorUnitIsAuto = True
        .MajorUnitIsAuto = True
        .Crosses = xlAutomatic
        .ReversePlotOrder = False
        .ScaleType = xlLinear

------------------
Bis später,
Karin

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Beverly
Mitglied
Dipl.-Geologe (Rentner)


Sehen Sie sich das Profil von Beverly an!   Senden Sie eine Private Message an Berverly  Schreiben Sie einen Gästebucheintrag für Berverly

Beiträge: 394
Registriert: 11.08.2007

erstellt am: 28. Feb. 2009 22:47    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für stefga 10 Unities + Antwort hilfreich

Hi,

ich muss mich korrigieren - es ist nicht Zelle A1 sondern B1, die überwacht werden soll.

------------------
Bis später,
Karin

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

runkelruebe
Moderator
Straßen- / Tiefbau




Sehen Sie sich das Profil von runkelruebe an!   Senden Sie eine Private Message an runkelruebe  Schreiben Sie einen Gästebucheintrag für runkelruebe

Beiträge: 8075
Registriert: 09.03.2006

MS-Office 365 ProPlus x86
WIN7(x64)

erstellt am: 01. Mrz. 2009 09:59    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für stefga 10 Unities + Antwort hilfreich

Moin Beverly,
 
Zitat:
denn wenn das Tabellenblatt kopiert wird, ändert sich der Diagrammname automatisch

Blöde Frage, weil ich's grade so nicht nachvollziehen kann: welchen Namen meinst Du denn? Dann wohl nicht Sheets(Index).Shapes(1).Name ? Und auch nicht der, der oben im Namensfeld steht, wenn man das Diagramm anklickt? Ich steh leider grade voll auf der Leitung   Bei mir sind die beide "Chart 3"

------------------
Gruß,
runkelruebe          Herr Kann-ich-nich wohnt in der Will-ich-nich-Straße...

System-Info     Excel -Suche    RuA-Suche     FAQ-ACAD     Hilfe zu CAD.de 

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Beverly
Mitglied
Dipl.-Geologe (Rentner)


Sehen Sie sich das Profil von Beverly an!   Senden Sie eine Private Message an Berverly  Schreiben Sie einen Gästebucheintrag für Berverly

Beiträge: 394
Registriert: 11.08.2007

erstellt am: 01. Mrz. 2009 13:11    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für stefga 10 Unities + Antwort hilfreich

Hi,

ja stimmt, das hatte ich verwechselt - der Name ändert sich nur, wenn man das Diagramm innerhalb des Tabellenblattes kopiert.

------------------
Bis später,
Karin

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

runkelruebe
Moderator
Straßen- / Tiefbau




Sehen Sie sich das Profil von runkelruebe an!   Senden Sie eine Private Message an runkelruebe  Schreiben Sie einen Gästebucheintrag für runkelruebe

Beiträge: 8075
Registriert: 09.03.2006

MS-Office 365 ProPlus x86
WIN7(x64)

erstellt am: 01. Mrz. 2009 14:31    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für stefga 10 Unities + Antwort hilfreich

Und jetzt wird es spassig: Selbst dann heißen beide "Chart 3", egal wie oft ich die kopiere: immer "Chart 3" 
Das hab ich gestern schon nicht begriffen, weil ich dachte, das darf gar nicht sein....
Ein nächstes neu erstelltes heißt "Diagramm 3" jedes weitere wird "ordnungsgemäß" hochgezählt.
Kopiere ich dagegen diese neu erstellten, wird ebenfalls "normal" hochgezählt.

Was'n das jetzt schon wieder 

------------------
Gruß,
runkelruebe          Herr Kann-ich-nich wohnt in der Will-ich-nich-Straße...

System-Info     Excel -Suche    RuA-Suche     FAQ-ACAD     Hilfe zu CAD.de 

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Beverly
Mitglied
Dipl.-Geologe (Rentner)


Sehen Sie sich das Profil von Beverly an!   Senden Sie eine Private Message an Berverly  Schreiben Sie einen Gästebucheintrag für Berverly

Beiträge: 394
Registriert: 11.08.2007

erstellt am: 01. Mrz. 2009 15:15    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für stefga 10 Unities + Antwort hilfreich

das kann ich nicht nachvollziehen. Wenn in einem Tabellenblatt ohne Diagramm ein Diagramm erstellt wird, heißt es "Diagramm 1". Wird es kopiert, erhält es den Namen "Diagramm 2". Ein im selben Tabellenblatt daraufhin neu erstelltes oder kopiertes Diagramm heißt "Diagramm 3". Löscht man ein beliebiges von den vorhandenen, wird das nächste erstellte Diagramm dennoch "Diagramm 4" genannt obwohl nur noch 2 vorhanden sind. Excel zählt intern für jedes Tabellenblatt immer weiter.

------------------
Bis später,
Karin

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

stefga
Mitglied



Sehen Sie sich das Profil von stefga an!   Senden Sie eine Private Message an stefga  Schreiben Sie einen Gästebucheintrag für stefga

Beiträge: 138
Registriert: 17.05.2007

Excel97

erstellt am: 01. Mrz. 2009 15:19    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Also ich bin begeistert von den vielen Rückmeldungen und bin schon den ganzen Nachmittag am abarbeiten der vielen Tips:

Zitat:
Original erstellt von Thomas Harmening:
hmm, lass mich raten... durch das kopieren hat das Diagramm nun eine andere Bezeichnung bekommen?
Und das Script will ja Diagramm 3 aktivieren?

Nein, ausnahmsweise daneben. Auf den korrekten Diagrammnamen habe ich geachtet. In meiner richtigen Mappe bleibt der Diagrammname beim kopieren der Tabellenblätter identisch und somit muss ich im Makro den Aufrufenamen nicht ändern. In meiner hochgeladenen Beispielmappe muss ich zugeben, dass sich der Diagrammname beim kopieren des Tabellenblattes von "Diagramm 3" zu "Diagramm 1" ändert (wieso auch immer dies so ist. Vermutlich fängt Excel bei einem neuen Tabellenblatt mit der Diagrammnummerierung wieder bei 1 an? Aber dann müßte sich eigentlich auch in meiner Haupmappe der Name beim kopieren des Blattes ändern. Dies bringt mich zu der Frage, ob man den Diagrammnamen im Bedarfsfall auch selbst beeinflussen kann? Vermutlich gehts mit VBA;) , aber ich schweife ab...und hätte Beverlys Beitrag zum Diagrammindex auch gleich lesen sollen). Aber auch wenn ich in der Beispielmappe den Diagrammnamen im Makro in "Diagramm 1" ändere, läuft das Makro auf diesem Blatt nicht (bzw. es kommt immer ein Laufzeitfehler und eben die Zeile mit dem activate wird im VBA editor gelb markiert). Ich habe zwischenzeitlich aber festgestellt, wenn ich die Mappe nach dem kopieren eines Tabellenblattes zuerst speichere und dann erst das Makro laufen lasse funktioniert es! (warum auch immer, der Diagrammname ist jedenfalls vor und nach dem speichern der selbe). Noch besser ist es aber, wenn ich wie gedacht auf das aktivieren des Diagramms verzichte. Wenn ich, wie von rübe gezeigt, auf das activechart verzichte funktioniert es nähmlich (auch ohne vorheriges Speichern) einwandfrei. Wenn ich dann noch das activesheet wieder einfüge (damit es auf allen Tabellenblättern läuft) und den Diagrammnamen dank Beverlys Tip durch den Index ersetzte kommt folgendes raus:

Code:

With ActiveSheet.ChartObjects(1).Chart.Axes(xlValue)
        .MinimumScaleIsAuto = True
        .MaximumScaleIsAuto = True
        .MinorUnitIsAuto = True
        .MajorUnitIsAuto = True
        .Crosses = xlAutomatic
        .ReversePlotOrder = False
        .ScaleType = xlLinear
        Y1min = .MinimumScale 'min-max Werte auslesen
        Y1max = .MaximumScale
    End With

Und damit läuft es wie gewünscht!


@beverly:

Zitat:
Es nicht immer günstig, das Diagramm direkt mit seinem Namen anzusprechen, denn wenn das Tabellenblatt kopiert wird, ändert sich der Diagrammname automatisch. Besser ist es in diesem Fall, den Diagrammindex zu verwenden anstelle des Namen (s. mein Beispiel).

Woher kenne ich diesen Index (in meinem Beispiel habe ich durch ausprobieren rausgefunden das es in meinem Fall (1) war, aber was mache ich wenn ich mehrere Diagramme habe? Ich kenne bisher nur den Diagrammnamen (indem ich ihn mir per Kopf/Fußzeile anzeigen lasse, oder geht das auch komfortabler?)

Zitat:
wenn sich Werte aus Formeln ergeben ist der günstigste Weg, diejenigen Zellen im Worksheets_Change Ereignis zu überwachen, die Einfluss auf die Formel haben

Ok, aber in meinem Fall finde ich es günstiger die per Formeln erzeugte Wertetabelle, aus der das Diagramm letztendlich erzeugt wird, zu überwachen, da es mühsam/fehleranfällig ist alle Zellen zu erfassen, die Einfluss auf die Formeln haben (sind etliche Zellen bei mir). Deshalb werde ich bei gelegenheit mal noch den Tipp von rübe mit "worksheet_calculate" ausprobieren.

@all:

Zitat:
Wenn nicht: immer weiter fragen, die community ist groß, taucht schon noch wer mit Ahnung auf ;-)

...ich glaube der/die ist/sind schon lange anwesend. Danke mal wieder.

------------------
Gruß
Stefan

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Beverly
Mitglied
Dipl.-Geologe (Rentner)


Sehen Sie sich das Profil von Beverly an!   Senden Sie eine Private Message an Berverly  Schreiben Sie einen Gästebucheintrag für Berverly

Beiträge: 394
Registriert: 11.08.2007

erstellt am: 01. Mrz. 2009 15:56    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für stefga 10 Unities + Antwort hilfreich

Hi Stefan,

die Diagrammnamen kannst du dir noch auf andere Weise anzeigen lassen:

1. Rechtsklick auf das Diagramm -> Diagrammfenster. Da steht dann der Diagrammname einschließlich Arbeitsmappen- und Tabellenname
2. Diagramm bei gedrückter Shift-Taste markieren, dann wird der Name links oben im Namensfenster angezeigt wo sonst nur "Diagrammfläc...." zu sehen ist.

 

Zitat:
Deshalb werde ich bei gelegenheit mal noch den Tipp von rübe mit "worksheet_calculate" ausprobieren.

Du solltest dabei bedenken, dass bei Verwendung dieses Ereignisses die Neuberechnung immer ausgeführt wird, gleichgültig in welcher Formel sich ein Ergebnis ändert - also auch in anderen die nicht mit dem Diagramm verbunden sind. Wenn du sehr viele Formeln in deinem Tabellenblatt hast, bremst dies natürlich.

Um den Diagrammindex zu ermitteln kannst du diesen Code im Einzelschrittmodus ablaufen lassen
[code]Sub diagrammindex()
    Dim inDiagramm As Integer
    For inDiagramm = 1 To ActiveSheet.ChartObjects.Count
        ActiveSheet.ChartObjects(inDiagramm).Activate
        MsgBox inDiagramm
    Next inDiagramm
End Sub
[/code]

------------------
Bis später,
Karin

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

runkelruebe
Moderator
Straßen- / Tiefbau




Sehen Sie sich das Profil von runkelruebe an!   Senden Sie eine Private Message an runkelruebe  Schreiben Sie einen Gästebucheintrag für runkelruebe

Beiträge: 8075
Registriert: 09.03.2006

MS-Office 365 ProPlus x86
WIN7(x64)

erstellt am: 01. Mrz. 2009 16:07    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für stefga 10 Unities + Antwort hilfreich

@beverly
In jeder neuen Datei: Klar, das ist auch das "normale Verhalten". So hätte ich es verstanden.
Aber: in dieser Datei (Diagramm4.xls) von Stefan ist genau das eben nicht der Fall. Daher die Frage "Was'n das schon wieder"?
Ich schiebe es jetzt einfach auf Kompatibilitätsprobleme, das ist ein schönes Wort und ein guter Schuldiger 

@Stefan:

Zitat:
Woher kenne ich diesen Index (in meinem Beispiel habe ich durch ausprobieren rausgefunden das es in meinem Fall (1) war, aber was mache ich wenn ich mehrere Diagramme habe? Ich kenne bisher nur den Diagrammnamen (indem ich ihn mir per Kopf/Fußzeile anzeigen lasse, oder geht das auch komfortabler?)

Die Indexnummern werden hochgezählt, jedes neue Diagramm = neue Nummer
Die kannst Du Dir z.B. so mal ausgeben lassen (im Direktbereich, kennste den? Menü -> Ansicht -> Direktfenster)
Wenn es Dir nur um die charts geht:
Code:
Sub ChartNummern()
For a = 1 To Sheets(2).ChartObjects.Count
    Debug.Print ActiveSheet.ChartObjects(a).Name & " hat die Nummer " & a
Next a
End Sub

Wenn es Dir um shapes i.A. geht:
Code:
Sub IndexNummern()
For a = 1 To Sheets(2).Shapes.Count
    Debug.Print Sheets(2).Shapes(a).Name & " hat die Index-Nummer " & a & " und ist ein " & Sheets(2).Shapes(a).Type
Next a
End Sub

Was die Nummern des Types bedeuten, kannst Du Dir in der Objektbibliothek (F2) unter msoShapeType raussuchen (Klartext bekomme ich auf die Schnelle nicht in den Code)


Hilfreich ist auch immer das Lokalfenster:

Code:
Sub Test()
Set x = Sheets(1)
Stop
End Sub

Dann kannst Du Dir im Lokalfenster in aller Ruhe alles angucken, was sich so im Sheet(1) tummelt. Das erschlägt vielleicht anfangs ein wenig, aber mit der Zeit findet man das echt hilfreich.

Zitat:
finde ich es günstiger die per Formeln erzeugte Wertetabelle, aus der das Diagramm letztendlich erzeugt wird, zu überwachen, da es mühsam/fehleranfällig ist alle Zellen zu erfassen, die Einfluss auf die Formeln haben
Und es nicht zufällig ein Bereich dabei, der in allen betreffenden Formeln mitspielt? Denn wie oben (auch von Beverly) erwähnt, bremst das Worksheet_Calculate die ganze Mappe aus, daher auch der link zu herber, der das irgendwie umgeht. (Hab ich aber nicht getestet)

So, jetzt duftet der Kaffee, ich muß weg  ich denke Du hast für die nächsten paar Stunden wieder was zu tun ;-)

------------------
Gruß,
runkelruebe          Herr Kann-ich-nich wohnt in der Will-ich-nich-Straße...

System-Info     Excel -Suche    RuA-Suche     FAQ-ACAD     Hilfe zu CAD.de 

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

stefga
Mitglied



Sehen Sie sich das Profil von stefga an!   Senden Sie eine Private Message an stefga  Schreiben Sie einen Gästebucheintrag für stefga

Beiträge: 138
Registriert: 17.05.2007

Excel97

erstellt am: 01. Mrz. 2009 20:11    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Wie immer hilfreiche Tipps von euch beiden, Danke.

Zitat:
Original erstellt von runkelruebe:
So, jetzt duftet der Kaffee, ich muß weg

Bei mir duftet zwar kein Kaffee, aber ich muss auch weg, und gleich für ein paar Tage. Du hast also in den nächsten Tagen wieder etwas mehr Ruhe  

------------------
Gruß
Stefan

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz