Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema Label
BildScreenshot zu Label Label-Seite mit Beispielarbeitsmappe aufrufen

VBA Auotscalefont

Betrifft: VBA Auotscalefont von: Ernst
Geschrieben am: 15.08.2014 10:11:56

Hallo zusammen

Ich möchte in einer Datei bei allen Grafiken, die auf den Blättern mit den Namen "Abb_??" eingebettet sind, die Schriften automatisch per Makro der Grafikgrösse anpassen.

For Each ws In wb.Worksheets
If InStr(1, ws.Name, "Abb_") = 1 Then
For Each chtO In ws.ChartObjects
With chtO.Chart
.ChartArea.AutoScaleFont = True
For Each ax In .Axes
If ax.HasTitle Then ax.AxisTitle.AutoScaleFont = True
ax.TickLabels.AutoScaleFont = True
Next
If .HasTitle Then .ChartTitle.AutoScaleFont = True
If .HasLegend Then .Legend.AutoScaleFont = True
End With
Next
End If
Next

Das Makro läuft durch, wählt alle Grafiken an und auf den Grafiken alle gewünschten Elemente. Aber das Attribute ".Autoscalefont" bleibt bei allen Elementen auf "Falsch". Was läuft hier schief?

Besten Dank für einen Hinweis
Ernst
PS. Weder die Datei, noch die einzelnen Blätter sind geschützt...

  

Betrifft: AW: VBA Auotscalefont von: Frank
Geschrieben am: 17.08.2014 22:57:20

Hallo Ernst,

ohne Beispielmappe ist das nicht so einfach.
Auf den ersten Blick würde ich Dir raten, doch mal die Objektansprache zu prüfen

If ax.HasTitle Then ax.AxisTitle.AutoScaleFont = True
...
 If .HasTitle Then .ChartTitle.AutoScaleFont = True
 If .HasLegend Then .Legend.AutoScaleFont = True
Vielleicht muss das ja heissen
If ax.HasTitle Then ax.Title.AutoScaleFont = True
...
 If .HasTitle Then .Title.AutoScaleFont = True
 If .HasLegend Then .Legend.AutoScaleFont = True
Scheint mir jeweils doppelt gemoppelt zu sein. Beispiel Axes: Die sprichst Du ja schon an als each ax in .Axes an. Also muss beim Objekt ax nicht mehr dazu gesagt werden, dass es um .AxisTitle geht.

Da kann ich aber auch die späte Stunde täuschen...

Grüsse, Frank


  

Betrifft: AW: VBA Auotscalefont von: Ernst
Geschrieben am: 18.08.2014 10:16:45

Hallo Frank

Besten Dank für Deinen Hinweis. Nach meinen Informationen haben aber die Objekte "Axis" und "Chart" kein Element "Title", sondern nur "Axistitle" und "Charttitle" {siehe auch http://msdn.microsoft.com/en-us/library/ff195770(v=office.14).aspx und
http://msdn.microsoft.com/en-us/library/ff837379(v=office.14).aspx }.

Zudem gibt diese Referenz auch keinen Hinweis auf die Eigenschaft ".AutoscaleFont" und ist daher nicht vollständig.

Mein Problem wird dadurch nicht behoben...

Freundliche Grüsse aus der Schweiz
Ernst


  

Betrifft: AW: VBA Auotscalefont von: Frank
Geschrieben am: 18.08.2014 22:17:09

Hoi Ernst

Wie ich schon geschrieben hatte: ohne Beispielmappe ist das nicht so einfach. Nachbauen will das sicher keiner. Auch ist der Codeausschnitt zu klein, um was sagen zu können. Weiss ich denn, ob der überhaupt durchlaufen wird?
Bei genauerer Betrachtung gibt es wohl nur das Objekt .Axes nicht:

For Each ax In .Axes

Versuch's hier doch mal mit .Axis

Grüsse
Frank


  

Betrifft: AW: VBA Auotscalefont von: Ernst
Geschrieben am: 20.08.2014 11:35:20

Hallo Frank

gut, hier kommt die anonymisierte Datei https://www.herber.de/bbs/user/92198.xlsm
Das Makro heisst AutoScale

.Axes bezeichnet die Sammlung aller Achsen, das Objekt .Axis ist eine davon.

Die Eigenschaft ".AutoScaleFont" wird immer noch nicht gesetzt...

Freundliche Grüsse aus der Schweiz
Ernst


  

Betrifft: AW: VBA Auotscalefont von: Frank
Geschrieben am: 21.08.2014 16:54:03

Hoi Ernst

Mal davon abgesehen, dass sich an der Darstellung der Achsen und Titel nichts ändert, funktioniert die Zuweisung tadellos.
Ich weiss ja nicht, wie Du das prüfst, ich rechtsklicke vor dem Durchlauf des Makros auf eine beliebige Achse eines beliebigen Diagramms in einem beliebigen... na Du weisst schon. Ich wähle 'Achse formatieren', Reiter 'Schrift' und da ist im Kästchen 'Automatisch skalieren' kein Häkchen drin. Nach dem Durchlauf des Makros mache ich das mit der gleichen Achse nochmal. Und siehe da: Das Häkchen ist drin.

Das ist bei Dir nicht so?

Grüsse
Frank


  

Betrifft: AW: VBA Auotscalefont von: Ernst Sandmeier
Geschrieben am: 24.08.2014 21:42:14

Hallo Frank

ich habe es jeweils direkt innerhalb des Makros nach einer Grafik im Direktfenster (Ctrl-G) geprüft, da ich den von Dir beschriebenen Reiter nicht gefunden habe. Bei mir (Excel 2010) sieht der "Achsen-formatieren-Dialog" nämlich wie auf dem Screen-Shot aus. Wo ist also der Reiter Schrift verschwunden?

https://www.herber.de/bbs/user/92268.jpg

Besten Dank für den Tip....
Ernst