Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Text in Shape ist unbearbeitbar

Forumthread: Text in Shape ist unbearbeitbar

Text in Shape ist unbearbeitbar
22.08.2020 09:05:16
Harald
Ich (VBA-Greenhorn) bin heute das 1.Mal hier und hoffe, dass mir jemand helfen kann.
Nachstehend der Code, der leider nicht das gewünschte Ergebnis liefert:
Sub Legende_bearbeitbar_einfügen()
ActiveSheet.Unprotect                     'Das Blatt muss in meiner Anwendung geschützt  _
sein
Let AktiverUser = "hk"
Let KTS = "2020-08-22"
ActiveSheet.Shapes.AddShape(msoShapeRectangularCallout, 100, 100, 136.5, 65.5).Select
Selection.ShapeRange.Name = KTS
Selection.Locked = msoFalse
Selection.Placement = xlMove
Selection.ShapeRange(1).TextFrame2.TextRange.Characters.Text = AktiverUser & ":"
ActiveSheet.Protect
End Sub
Nach meinem Verständnis sollte man den Text in diesem Shape jetzt - trotzdem das Blatt gesperrt ist - bearbeiten können.
Wenn ich den gleichen Prozess nicht per Makro sondern händisch mittels des Excel-Menüs eingebe (und bei den Eigenschaften des Shapes "Objekt sperren" und "Text sperren" deaktiviere), dann funktioniert es ja auch.
Was fehlt in meinem Makro?
"Selection.Locked = msoFalse" habe ich ja gesetzt. Ich habe in den VBA-Tutorials nichts gefunden, was explizit ein "Unlock" der Texteingabe bewirken würde :-(
DANKE im Voraus!
Harald
P.S.: Ein generelles Freigeben der Shapes für dieses Blatt geht leider nicht, weil alle anderen Shapes darauf gesperrt bleiben müssen!
Anzeige

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Text in Shape ist unbearbeitbar
22.08.2020 10:09:05
Hajo_Zi
Hallo Harald,
Du hast das Locked auf das Objekt gesetzt und nicht Tabelle.
Select, Activate usw. ist in VBA zu 99,8% nicht notwendig.
Der Cursor ist kein Hund der überall rumgeführt werden muss.
Hinweise zu select usw. Hajo-Excel.de
Hinweise zu select usw. Online-Excel.de
Hinweise zu select usw. Online-Excel.de
Der Cursor ist kein Hund, der überall rum geführt werden muss.

Anzeige
AW: Text in Shape ist unbearbeitbar
22.08.2020 11:56:34
Harald
DANKE für die stilistischen Hinweise!
Wodurch habe ich das "Locked" auf das Objekt gesetzt?
Das "Locked" wird doch durch ActiveSheet.Protect auf die Tabelle gesetzt.
Durch "Selection.Locked = msoFalse" sollte doch für das Objekt die Sperre aufgehoben sein, oder etwa nicht?
Harald
Anzeige
AW: Text in Shape ist unbearbeitbar
22.08.2020 13:07:36
Hajo_Zi
ActiveSheet.Shapes.AddShape(msoShapeRectangularCallout, 100, 100, 136.5, 65.5).Select
Gruß Hajo
AW: Text in Shape ist unbearbeitbar
22.08.2020 15:20:33
Harald
Auch wenn ich das Makro wie folgt formuliere, ist der Text der Legende nach dem Schützen des Blattes nicht bearbeitbar.
Sub Bearbeitbare_Legende()
ActiveSheet.Unprotect
Set Legende = ActiveSheet.Shapes.AddShape(msoShapeRectangularCallout, 100, 100, 136.5, 65.5) _
With Legende
.Name = "Legende"
.Locked = msoFalse  '... mit und ohne dieser Zeile'
'ist der Text nach dem Schützen des Blattes nicht bearbeitbar!
.Placement = xlMove '... sonst ist die Legende nicht bewegbar
.TextFrame2.TextRange.Characters.Text = "hk:"
End With
Set Legende = Nothing
ActiveSheet.Protect
End Sub
Ein ziemlich verzweifelter Harald
Anzeige
AW: Text in Shape ist unbearbeitbar
22.08.2020 15:31:16
Hajo_Zi
Hallo Harald,
Gut mein Tipp hat Dir nicht gefallen. Du machst Locked immer noch auf das Objekt.
Ich bin dann raus.
Gruß Hajo
AW: Text in Shape ist unbearbeitbar
22.08.2020 19:41:02
Harald
Hallo Hajo,
es mag ja sein, dass ich zu blöd für das Erstellen von Makros bin, aber wenn's so einfach ist, dann frage ich mich, warum du nicht einfach ein in meinem Sinn (sh.u.) funktionierendes Makro hier ins Forum schreibst.
Das, was du bisher geschrieben hast, löst mein Problem nicht!
Sicherheitshalber noch einmal die Anforderung:
Es soll in einem geschützten Blatt von einem User, der sonst nichts in dem Blatt darf, eine Legende eingefügt werden, die vom User bewegt und mit Text befüllt werden soll. Alle anderen Zellen, Shapes, etc. dürfen nicht veränderbar sein.
Vielleicht erbarmst du dich ja noch einmal?
lg harald
Anzeige
AW: Text in Shape ist unbearbeitbar
23.08.2020 10:03:34
Harald
Danke für deine bisherige Mühe!
... auch wenn ich deine Art zu "helfen" (einem Anfänger wie mir gegenüber) als ziemlich überheblich empfunden habe.
Aber einmal abgesehen davon, dass deine Rückmeldungen mein Problem nicht gelöst haben, haben sie mich angespornt selbst nochmals (v.a. auf englischen Seiten) zu recherchieren. Dabei bin ich zum Glück fündig geworden. Mein Problem ist damit also gelöst.
Nachstehend daher der vielleicht stilistisch nicht schöne, dafür aber funktionierende Code:
Sub Bearbeitbare_Legende()
ActiveSheet.Unprotect
Set Legende = ActiveSheet.Shapes.AddShape(msoShapeRectangularCallout, 100, 100, 136.5, 65.5) _
With Legende
.Locked = msoFalse
.DrawingObject.LockedText = False
.Name = "Legende"
.Placement = xlMove
.TextFrame2.TextRange.Characters.Text = "hk:"
End With
Set Legende = Nothing
ActiveSheet.Protect
End Sub
Die Zauberformel lautet:
.DrawingObject.LockedText = False
lg harald
Anzeige
AW: Text in Shape ist unbearbeitbar
22.08.2020 10:34:08
Luschi
Hallo Harald,
bei mir (Excel 2019) funktioniert Dein Code, allerdings würde ich ihn so schreiben:

Dim AktiverUser As String, KTS As String
Sub Legende_bearbeitbar_einf?gen()
Dim shp As Object
ActiveSheet.Unprotect      'Das Blatt muss in meiner Anwendung gesch?tzt sein
Let AktiverUser = "hk"
Let KTS = "2020-08-22"
Set shp = ActiveSheet.Shapes.AddShape(msoShapeRectangularCallout, 100, 100, 136.5, 65.5)
''auskommentierte Zeilen sind nicht erforderlich
With shp
''.Select
.Name = KTS
''.Locked = msoFalse
''.Placement = xlMove
.TextFrame2.TextRange.Characters.Text = AktiverUser & ":"
End With
ActiveSheet.Protect
Set shp = Nothing
End Sub
Gruß von Luschi
aus klein-Paris
PS: die Variablenzuweisung per 'Let' hatte ich schon jahrelang nicht mehr gesehen und schon fast vergessen. So geht es auch die Autoren des Buches: "Microsoft Excel 2019 - VBA und Makros" von Bill Jelen und Tracy Syrstad. Dort wird 'Let' nur noch im Zusammenhang mit 'Property' erwähnt und ist da auch erforderlich; statt
Let AktiverUser = "hk"
schreibt man heute
AktiverUser = "hk"
Anzeige
AW: Text in Shape ist unbearbeitbar
22.08.2020 11:47:33
Harald
DANKE für die stilistischen Hinweise!
Ich werde diese in Zukunft (versuchen zu) berücksichtigen.
Wie ich ja geschrieben habe, bin ich ein Anfänger und "lerne" über den Makro-Recorder.
Leider erfüllte das Ergebnis deines Codes nicht meine Anforderungen.
Denn ich kann den Text in der Legende im geschützten Blatt nicht bearbeiten :-(
Liebe Grüße
Harald
Anzeige
AW: Text in Shape ist unbearbeitbar
22.08.2020 11:58:09
Harald
Habe irrtümlich mein Problem als "gelöst" gekennzeichnet :-(
;

Forumthreads zu verwandten Themen

Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Infobox / Tutorial

Text in Shape bearbeiten: So funktioniert's mit Excel VBA


Schritt-für-Schritt-Anleitung

Um den Text in einem Shape mit Excel VBA zu ändern, kannst du den folgenden Code verwenden. Stelle sicher, dass das Arbeitsblatt vor der Ausführung des Makros entsperrt ist. Hier ist ein Beispiel, das die Textänderung in einem Shape demonstriert:

Sub Bearbeitbare_Legende()
    ActiveSheet.Unprotect
    Set Legende = ActiveSheet.Shapes.AddShape(msoShapeRectangularCallout, 100, 100, 136.5, 65.5)
    With Legende
        .Locked = msoFalse
        .DrawingObject.LockedText = False
        .Name = "Legende"
        .Placement = xlMove
        .TextFrame2.TextRange.Characters.Text = "Benutzer: hk"
    End With
    Set Legende = Nothing
    ActiveSheet.Protect
End Sub

Dieser Code fügt ein Shape hinzu, setzt es als bearbeitbar und schützt anschließend das Arbeitsblatt wieder.


Häufige Fehler und Lösungen

  1. Text ist nach dem Schutz nicht bearbeitbar

    • Stelle sicher, dass du .DrawingObject.LockedText = False verwendest. Dies ist entscheidend, um den Text in einem Shape in einem geschützten Blatt bearbeitbar zu machen.
  2. Shape wird nicht richtig erstellt

    • Überprüfe die Syntax von ActiveSheet.Shapes.AddShape. Achte darauf, dass die Parameter korrekt sind und dass das Shape tatsächlich erstellt wird.
  3. Locked-Eigenschaft nicht richtig gesetzt

    • Vergiss nicht, dass Locked auf das Shape und nicht auf die Tabelle gesetzt werden muss.

Alternative Methoden

Eine alternative Methode, um den Text in Shapes zu ändern, ist die Verwendung von Excel-Formeln oder das manuelle Ändern über das Kontextmenü. Du kannst auch die Shape-Eigenschaften in VBA direkt anpassen, falls du keine Makros verwenden möchtest.

Sub ShapeTextAendern()
    Dim shp As Shape
    Set shp = ActiveSheet.Shapes("Legende")
    shp.TextFrame2.TextRange.Characters.Text = "Neuer Text"
End Sub

Mit diesem Code kannst du den Text eines bereits bestehenden Shapes ändern, ohne das Arbeitsblatt erneut zu schützen.


Praktische Beispiele

Hier sind einige praktische Beispiele für die Verwendung von VBA zur Bearbeitung von Shape-Texten:

Sub Beispiel1()
    Dim shp As Shape
    Set shp = ActiveSheet.Shapes.AddShape(msoShapeOval, 50, 50, 100, 100)
    With shp
        .TextFrame2.TextRange.Characters.Text = "Kreise"
        .Locked = msoFalse
        .DrawingObject.LockedText = False
    End With
End Sub

In diesem Beispiel wird ein ovales Shape erstellt und der Text gesetzt. Achte darauf, dass du die notwendigen Eigenschaften für die Bearbeitbarkeit einstellst.


Tipps für Profis

  • Verwende With-Blöcke, um deinen Code sauberer und leserlicher zu gestalten.
  • Vermeide die Verwendung von .Select oder .Activate, um die Effizienz deines Codes zu steigern.
  • Teste deine Makros immer in einer Kopie deiner Excel-Datei, um unerwünschte Änderungen zu vermeiden.

FAQ: Häufige Fragen

1. Warum kann ich den Text in meinem Shape nicht bearbeiten?

  • Überprüfe, ob du .DrawingObject.LockedText = False in deinem VBA-Code verwendest. Dies ist wichtig, um die Texteingabe in einem Shape zu ermöglichen.

2. Wie kann ich Shapes in einem geschützten Blatt erstellen?

  • Du musst das Blatt zuerst mit ActiveSheet.Unprotect entsperren, bevor du Shapes hinzufügst. Vergiss nicht, das Blatt anschließend wieder zu schützen.

3. Gibt es eine Möglichkeit, mehrere Shapes gleichzeitig zu bearbeiten?

  • Ja, du kannst eine Schleife verwenden, um durch alle Shapes auf dem Arbeitsblatt zu iterieren und ihre Texteigenschaften zu ändern.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige