MS-Word VBA selection ausblenden
Hallo zusammen
Ich möche in Word mit VBA folgendes Bewerkstelligen:
Ein bestimmter Bereich soll je nach Wahl von Radio Buttons aus-und wieder eingeblendet werden können. Der Bereich enthält vor allem Formularsteuerelemente.
Ich bin schon soweit, dass ich ihn löschen kann, aber ich muss ihn je nach Wahl der Radio-Buttons auch wieder einblenden könne, darum geht löschen nicht.
Es geht also um die Eigenschaft von Selection.
Hier mein Code:
Private Sub OptionButton1_Click()
'Kopierschutz auflösen
ActiveDocument.Unprotect
'Auswahltreffen und löschen
Dim rngParagraphs As Range
Set rngParagraphs = ActiveDocument.Range( _
Start:=ActiveDocument.Bookmarks("ftxt1").Range.Start, _
End:=ActiveDocument.Bookmarks("ftxt13").Range.End)
rngParagraphs.Select
Selection.Delete
'Kopierschutz erstellen
ActiveDocument.Protect wdAllowOnlyFormFields, NoReset:=True
End Sub
Private Sub OptionButton2_Click()
'Kopierschutz auflösen
ActiveDocument.Unprotect
'Auswahltreffen und löschen
Dim rngParagraphs As Range
Set rngParagraphs = ActiveDocument.Range( _
Start:=ActiveDocument.Bookmarks("ftxt1").Range.Start, _
End:=ActiveDocument.Bookmarks("ftxt13").Range.End)
rngParagraphs.Select
Selection.
'Kopierschutz erstellen
ActiveDocument.Protect wdAllowOnlyFormFields, NoReset:=True
End Sub
4 Antworten
Der schnellste und schmutzigste Weg ist, dir beim Ausblenden den Text in einer globalen Variable zu merken
sAusgeblendet = Selection.Text
und beim Einblenden wieder zurückzuschreiben
Selection.Text = sAusgeblendet
Achtung! Beim Schließen von Word geht der versteckte Text verloren, da du ihn löschst.
Speichere doch nicht die Selection, sondern nur den Inhalt, den Text. Selection.Text
Ich benötige nicht nur den Text. Die Selection beinhaltet auch Bilder und Inhaltssteuerelemente. Trotzdem habe ich es probiert und bekomme wieder denselben Fehler.
Wenn ich die Variable so definiere:
Public myselection As Selection.Text --> dann ergibt dies einen Fehler beim kompilieren, wenn ich sie als Selection definiere aber sonst überall Selection.Text verwende bekomme ich wieder denselben Fehler wie zu Beginn.
Objekte werden mit Set zugewiesen.
Set myselection = Selection
Hast du wirklich beides probiert?:
Set myselection = Selection und
myselectiontext = Selection.Text
Public myselection As Selection.Text
Das ist kein Typ, soviel ich weiß. Versuche mal Public myselection as String
Viele Dank für deine Schnelle Hilfe
Hier ist der Code wie er Zurzeit aussieht:
Public myselection As Selection
Private Sub OptionButton1_Click()
'Kopierschutz auflösen
ActiveDocument.Unprotect
'Auswahltreffen und löschen
Dim rngParagraphs As Range
Set rngParagraphs = ActiveDocument.Range( _
Start:=ActiveDocument.Bookmarks("ftxt1").Range.Start, _
End:=ActiveDocument.Bookmarks("ftxt13").Range.End)
rngParagraphs.Select
Selection = myselection
'myselection.Paste
'Kopierschutz erstellen
ActiveDocument.Protect wdAllowOnlyFormFields, NoReset:=True
End Sub
Private Sub OptionButton2_Click()
'Kopierschutz auflösen
ActiveDocument.Unprotect
'Auswahltreffen und löschen
Dim rngParagraphs As Range
Set rngParagraphs = ActiveDocument.Range( _
Start:=ActiveDocument.Bookmarks("ftxt1").Range.Start, _
End:=ActiveDocument.Bookmarks("ftxt13").Range.End)
rngParagraphs.Select
Set myselection = Selection
Selection.Delete
'Kopierschutz erstellen
ActiveDocument.Protect wdAllowOnlyFormFields, NoReset:=True
End Sub
Danke für den Tipp mit dem Set, das habe ich so abgeändert.
Selection ist ein Typ, er wird zumindest vorgeschlagen, wenn ich Ctrl+Leertaste drücke. Wenn ich String verwende bekomme ich eine andere Fehlermeldung.
OptionButton2 funktioniert jetzt.
Bei OptionButton1 habe ich folgende Fehlermeldung:
«Das angeforderte Element ist nicht in der Sammlung vorhanden.»
Ich kann dir die ganze Datei auch zur Verfügung stellen.
Beim OptionButton1 ist es doch dasselbe:
SET Selection = myselection
Eventuell auch Selection.Range(myselection). K. A. Komme mehr vom Excel-VBA. Selection ist typisch Word.
Du könntest dir übrigens den ganzen Selection-Schnick-Schnack sparen
Dim rngParagraphs As Range
Set rngParagraphs = ...
Speichere doch das Rangeobjekt einfach global ab.
Ah ne, das mit dem Rangeobjekt wird nicht klappen, da nicht der Inhalt gespeichert wird. Das ist auch das Problem bei Selection.
Selection ist die Markierung. Es bringt nichts, sich die Markierung zu merken. Du musst dir Selection.Text merken.
Jetzt hast du mich aber soweit. Ich mache es dir fertig...
Dies ergibt einen Fehler beim kompilieren.
Fehler beim Kompilieren: Unzulässige Verwendung einer Eigenschaft
Hey ich werde mal Pause machen und an etwas anderem arbeiten. Wenn du willst schicke ich dir das ganze Dokument.
Ich kriege es nicht hin. Beim Löschen wird das Bookmark mit gelöscht.
Ich habe aufgegeben. Eigentlich ist die Funktion nämlich gar nicht so wichtig und nichtmal die Neugier treibt mich noch dazu weiterzuarbeiten...
Aber hier ist der Link:
Also wenn du während der Bearbeitung des Dokuments die Finger von der Zwischenablage lässt, kannst du mit dieser arbeiten:
Private Sub OptionButton1_Click()
'Kopierschutz auflösen
If ActiveDocument.ProtectionType <> wdNoProtection Then _
ActiveDocument.Unprotect
'Auswahltreffen und einfügen
Dim rngParagraphs As Range
Set rngParagraphs = ActiveDocument.Range( _
Start:=ActiveDocument.Bookmarks("ftxt1").Range.Start, _
End:=ActiveDocument.Bookmarks("ftxt13").Range.End)
rngParagraphs.Select
Selection.Paste
Selection.Bookmarks.Add "ftxt13"
End Sub
Private Sub OptionButton2_Click()
'Kopierschutz auflösen
If ActiveDocument.ProtectionType <> wdNoProtection Then _
ActiveDocument.Unprotect
'Auswahltreffen und löschen
Dim rngParagraphs As Range
Set rngParagraphs = ActiveDocument.Range( _
Start:=ActiveDocument.Bookmarks("ftxt1").Range.Start, _
End:=ActiveDocument.Bookmarks("ftxt13").Range.End)
rngParagraphs.Select
Selection.Cut
rngParagraphs.Bookmarks.Add "ftxt1"
rngParagraphs.Bookmarks.Add "ftxt13"
End Sub
Genauso, mit diesem Code hat es funktioniert. Ich habe lediglich den Dokumentenschutz am Schluss noch hinzugefügt. Vielen Dank.
Ich kenne mich in WORD nicht so aus, aber könnte vieileicht
Selection.Hidden = True
klappen?
Evtl. muss da aber noch etwas dazwischen. In Excel lautet der Befehel:
Selection.EntireRow.Hidden = True
Vielleicht klappt auch:
rngParagraphs.Range.Hidde = True
Kann die Hilfe Dir da nicht weiter helfen?
Zurück dann natürlich mit False.
Selection.Hidden existiert nicht.
Es gibt leider keine Eigenschaft Hide, ausser für den Text aber ich muss nicht nur Text ausblenden sondern einen ganzen Bereich. (Mit Bildern)
Die Hilfe ist nicht wirklich Hilfreich bei diesem Problem.
Hier nun der Code, um Absatz 2 auszublenden, mit allen Grafiken, Buttons,...
ActiveDocument.Paragraphs(2).Range.Select
With Selection.Font
.Hidden = True
End With
Wenn Buttons und Grafiken im Absatz eingebunden sind, lassen sie sich zusammen mit dem Absatz (zumindest manuell) ausblenden:
Absatz markieren, Format, Zeichen, Ausgeblendet.
Wenns manuell geht, müsste es auch per VBA gehen. Einfach mal mit dem Recorder aufzeichnen.
Wenn ich die Grafik aber an den Seitenrand oder die Seite hefte geht es natürlich nicht.
Gute Idee, habe ich probiert.
Der Code sieht dann so aus:
Nur leider funktionierts nicht.
Es kommt folgende Fehlermeldung beim klick auf OptionButton1 oder 2:
Laufzeitfehler '91': Objektvariable oder With-Blockvariable nicht festgelegt.