MS-Word VBA selection ausblenden

4 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

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.

Woher ich das weiß:Berufserfahrung – Programmierer

Gastonn 
Beitragsersteller
 27.05.2014, 11:48

Gute Idee, habe ich probiert.

Der Code sieht dann so aus:

Dim 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
        
        myselection = Selection
        
        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 = myselection
        
    'Kopierschutz erstellen
    ActiveDocument.Protect wdAllowOnlyFormFields, NoReset:=True
    
End Sub

Nur leider funktionierts nicht.

Es kommt folgende Fehlermeldung beim klick auf OptionButton1 oder 2:

Laufzeitfehler '91': Objektvariable oder With-Blockvariable nicht festgelegt.

0
Gastonn 
Beitragsersteller
 27.05.2014, 11:53
@Gastonn

Ah sorry mein Fehler es sollte natürlich nicht Dim sondern Public heissen. Ich bekomme aber trotzdem noch dieselbe Fehlermeldung.

0
Suboptimierer  27.05.2014, 12:01
@Gastonn

Speichere doch nicht die Selection, sondern nur den Inhalt, den Text. Selection.Text

0
Gastonn 
Beitragsersteller
 27.05.2014, 12:32
@Suboptimierer

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.

0
Suboptimierer  27.05.2014, 12:37
@Gastonn

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

0
Gastonn 
Beitragsersteller
 27.05.2014, 13:05
@Suboptimierer

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.

0
Gastonn 
Beitragsersteller
 27.05.2014, 13:08
@Gastonn

Ahja die Fehlermeldung ist ein Laufzeitfehler '5941'

0
Suboptimierer  27.05.2014, 13:17
@Gastonn

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.

0
Suboptimierer  27.05.2014, 13:25
@Suboptimierer

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...

0
Gastonn 
Beitragsersteller
 27.05.2014, 13:37
@Suboptimierer

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.

0
Gastonn 
Beitragsersteller
 27.05.2014, 14:58
@Gastonn

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:

www.philippe.bplaced.net/Gutefrage/

0
Suboptimierer  27.05.2014, 15:46
@Gastonn

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
0
Gastonn 
Beitragsersteller
 02.06.2014, 11:05
@Suboptimierer

Genauso, mit diesem Code hat es funktioniert. Ich habe lediglich den Dokumentenschutz am Schluss noch hinzugefügt. Vielen Dank.

1

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.

Woher ich das weiß:Berufserfahrung – IT-Administrator (i.R.)

Gastonn 
Beitragsersteller
 27.05.2014, 11:50

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.

0

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.