Anzeige
Archiv - Navigation
1856to1860
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Formularsteuerel.-Btn: Text formatieren

Formularsteuerel.-Btn: Text formatieren
30.11.2021 18:20:18
Peter
Hallo zusammen!
Ich habe ein Problem (und eine zweitbeste Lösung dazu) und bin auf der Suche nach einer besseren - und habe beim Ausprobieren drei seltsame Beobachtungen gemacht, die ich mit Euch teilen will.
Vielleicht kann ja jemand eine Erläuterung dazu geben.
Problem:
======
Ich möchte mit einem Formularsteuerelement-Button auf einer Seite ge'toggel't ein paar Spalten aus- und einblenden.
Dabei möchte ich auf dem Button im Wechsel zwei verschiedenen Texte anzeigen.
Jeweils drei Wingdingszeichen: , einblenden wie '' bzw. ausblenden wie '-> (siehe Beispielmappe: https://www.herber.de/bbs/user/149493.xlsm )
Aber weil 'Einfach kann jeder' :--) hätte ich gerne das Magnetband größer als die Pfeile und farbig, weil ich auch andere Buttons der Mappe (statischer Text) in dieser Weise formatiert habe).
Händisch gemacht gar kein Problem! (Aufzeichnung Makro dazu in der Mappe ganz unten)
Nach dem Überwinden zweier Hürden (s. u.) funktioniert das, aber leider verbleibt der Fokus auf dem Button, da diese Methode ihn erst selektiert, bevor sie ihn verändert.
Frage 1: Kennt jemand von Euch eine andere Methode, die dies erreicht, ohne den Button vorher zu selektieren?
Frage 2: Wie kann ich danach wieder das Sheet selektieren - ich vermute, die ursprüngliche Userselektion von Zellen ist dort noch aktiv!? Wäre wichtig.
Seltsame Beobachtungen:
=================
1. Will man den aufgezeichneten Makro noch einmal aufrufen, kommt es in der letzten Zeile zu einer seltsamen Fehlermeldung:

Sub Makro1()
ActiveSheet.Shapes.Range(Array("btnTest")).Select
Selection.Characters.Text = ">çè"
With Selection.Characters(Start:=1, Length:=1).Font
.Name = "Wingdings"
.FontStyle = "Standard"
.Size = 18
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = 53
End With
With Selection.Characters(Start:=2, Length:=2).Font
.Name = "Wingdings"
.FontStyle = "Standard"
.Size = 10
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = 1 'Erneutes Ausführen führt bei mir (Excel 2010) bei dieser Zeile zum Fehler:
'"Laufzeitfehler '1004': Schriftgrad muss zwischen 1 und 409 Punkten liegen."
' Das ist seltsam, weil "Print Selection.Characters(Start:=2, Length:=2).Font.Size" beim
'  "Debugging" im Direktfenster korrekt "10" anzeigt!?
'Fehler nicht mehr, sobald man diese Zeile oben >vor
Was hat die Fontfarbe mit Fontsize zu tun?
2. Bei den ersten beiden Methoden im Beispiel, mit denen ich nur den Text des Buttuns ändern kann (ohne Formatierungen, bzw. vielleicht doch, ich wüßte aber nicht wie) wird die Textänderung während der Makro weiterläuft nur sichtbar, wenn ich ein "Application.ScreenUpdating = True" danach einfüge, obwohl es nie auf "False" gesetzt wurde!
3. Bei den letzten beiden Versuchen mit der Methode aus dem aufgezeichneten Makro entstehen links Verzerrungen in einigen Zeilennummern! Fontgröße einer Zeilennummer, eine ist scheinbar leer, ...
Das bleibt auch, wenn der Makro fertig ist. Man muss erst den Teil der Seite wegscrollen (und zurück) oder Blatt/Mappe wechseln (und zurück), damit alles wieder richtig dargestellt wird. Auch hier hilft "Application.ScreenUpdating = True" direkt nach dem Befehl, damit die Darstellung wieder korrekt ist!
Interessant ist, dass es hier ein Darstellungsproblem mit der Fontsize gibt. Das leere Zeilennummerfeld könnte Fontsize 0 haben und gar nicht leer sein!? Ist da der Zusammenhang zu dem Fehler in Beobachtung 1?
Mich würde sehr interessieren, ob das bei moderneren Excelversionen auch so ist!
Vielen Dank schon mal für Eure Bemühungen.

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Formularsteuerel.-Btn: Text formatieren
30.11.2021 19:09:09
Nepumuk
Hallo Peter,
das läuft bei mir ohne Probleme:

Sub Makro1()
With ActiveSheet.Shapes("btnTest").TextFrame
.Characters.Text = ">çè"
.Characters.Font.Name = "Wingdings"
.Characters(Start:=1, Length:=1).Font.Color = RGB(152, 51, 0)
.Characters(Start:=2, Length:=2).Font.Color = RGB(0, 0, 0)
End With
End Sub
Gruß
Nepumuk
Shape Deselecten?
30.11.2021 20:04:29
Peter
Hallo Nepomuk,
... und noch eine Methode den Text des Buttons anzusprechen! :--)
Jetzt läuft es bei mir auch einwandfrei!

With ActiveSheet.Shapes("btnTest").TextFrame
.Characters.Text = ">çè"
'    .Characters.Font.Name = "Wingdings" 'Bei mir unnötig, da hier immer alle Character aus Wingdings sind...
With .Characters(Start:=1, Length:=1).Font
.ColorIndex = 53 'Color = RGB(152, 51, 0)
.Size = 18
End With
With .Characters(Start:=2, Length:=2).Font
.Color = &H0&
.Size = 10
End With
End With
Herzlichen Dank dafür!
Trotzdem nochmal nachgefragt, um was zu lernen:
Wenn doch mal ein Shape selected ist, wie kann man wieder den Range auf dem Tabellenblatt selecten?

ActiveSheet.Shapes.Range(Array("btnTest")).Select 'Testselect hier
ActiveSheet.Select 'Das tut es leider nicht....
ABER: wenn ich vor Aufruf obigen Makros einen komplexen Bereich markiere und dann nach Beendigung des Makros (Button ist selected) einfach "ESC" drücke, ist genau passiert, was ich suche: Button ist nicht mehr selected und die alte Rangeauswahl auf dem Blatt wieder!
Ein bisschen gegoogelt findet man die Anleitung

ActiveSheet.Shapes("btnTest").Deselect
zu benutzen - was in meinem Excel2010 aber zu einer Fehlermeldung führt (Fehler 438: Objekt unterstützt diese Methode nicht...).
Aber SendKey "ESC" möchte ich eigentlich nicht machen...
Hat jemand noch eine Idee?
Anzeige
AW: Shape Deselecten?
30.11.2021 20:28:16
Nepumuk
Hallo Peter,
so:

ActiveCell.Select
Gruß
Nepumuk
AW: Shape Deselecten?
30.11.2021 21:13:14
Peter
Fast!
Aber wenn ein Range selektiert war, nimmt er nur die .activate - ed Zelle, der Rest der Selektion ist verloren.
Noch eine Idee?
AW: Shape Deselecten?
30.11.2021 21:19:26
Peter
OK, das geht:

Dim rngSelected As Range
Set rngSelected = Selection
ActiveSheet.Shapes.Range(Array("btnTest")).Select
rngSelected.Select
Set rngSelected = Nothing
Wenn es nicht direkter geht ist da immerhin eine Lösung...
AW: Formularsteuerel.-Btn: Text formatieren
30.11.2021 21:36:21
{Boris}
Hi,
Du kannst die Buttons übrigens auch beim "Namen" (Buttons) nennen. Deklariere sie dazu als solche (die Intellisense zeigt Dir das nicht an).
Nur um das Prinzip zu zeigen:

Sub Test()
Dim bT As Button
For Each bT In Tabelle1.Buttons
bT.Characters(2, 5).Font.Name = "Wingdings"
Next bT
End Sub
VG, Boris
Anzeige
AW: Formularsteuerel.-Btn: Text formatieren
01.12.2021 08:22:28
Peter
Danke Boris, das weiß ich! Aber in diesem Fall geht es definitiv um Eigenschaften von genau diesem einen Button... da reicht mir ein "With...".
AW: Formularsteuerel.-Btn: Text formatieren
01.12.2021 09:33:29
{Boris}
Hi,
wenn Dir das bekannt ist, ist es ja gut (ich glaube, dass das sicher nicht alle wissen).
Dann versteh ich aber nicht, weshalb Du die Buttons nicht auf diese Weise ansprichst, denn damit steht Dir die IntelliSense zur Verfügung, was Vieles vereinfacht.
Aber Hauptsache es läuft jetzt bei Dir! :-)
VG, Boris

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige