Office Forum
www.Office-Loesung.de
Access :: Excel :: Outlook :: PowerPoint :: Word :: Office :: Wieder Online ---> provisorisches Office Forum <-
Mehrere Abschnitte per VBA anzeigen/verstecken
zurück: Mehrere Textboxen zusammen rechnen weiter: Fehlermeldung: Argument ist nicht optional Unbeantwortete Beiträge anzeigen
Neues Thema eröffnen   Neue Antwort erstellen     Status: Antwort Facebook-Likes Diese Seite Freunden empfehlen
Zu Browser-Favoriten hinzufügen
Autor Nachricht
boris.kuehn
Blutiger MS Project Anfänger


Verfasst am:
27. Apr 2009, 15:57
Rufname: Boris

Mehrere Abschnitte per VBA anzeigen/verstecken - Mehrere Abschnitte per VBA anzeigen/verstecken

Nach oben
       Version: Office 2003

Hallo zusammen,

ich erstelle derzeit ein Word-Formular, welches den Benutzer ein Stück weit 'an der Hand nehmen' soll, sprich: Abhängig davon, welche Aktion der User über Radiobuttons am Anfang des Formulars auswählt sollen Abschnitte angezeigt oder ausgebledet werden.
Von Programmieren hab ich an sich keine Ahnung, den Code hab ich mir aus Foren, Tutorials und Blogs zusammengesammelt und angepasst... was ich über VBA weiss weiss ich aus diesem aktuellen "Projekt".

Wie dem auch sei, inzwischen wird das Ganze ZIEMLICH unhandlich und da jetzt nochmal so etwa 20 Abschnitte dazukommen verlier ich so langsam den Überblick. So sieht mein Code im Moment aus:

Code:

Private Sub SelectFunction_page1_Click()
SchutzAus
'Abschnitt 2,3,5 werden eingeblendet

With ActiveDocument.Sections(2).Range.Font
.Hidden = False
End With
With ActiveDocument.Sections(3).Range.Font
.Hidden = False
End With
With ActiveDocument.Sections(5).Range.Font
.Hidden = False
End With
'Rest wird ausgeblendet
With ActiveDocument.Sections(4).Range.Font
.Hidden = True
End With
With ActiveDocument.Sections(6).Range.Font
.Hidden = True
End With
With ActiveDocument.Sections(7).Range.Font
.Hidden = True
End With
With ActiveDocument.Sections(8).Range.Font
.Hidden = True
End With
With ActiveDocument.Sections(9).Range.Font
.Hidden = True
End With
With ActiveDocument.Sections(10).Range.Font
.Hidden = True
End With
With ActiveDocument.Sections(11).Range.Font
.Hidden = True
End With
With ActiveDocument.Sections(12).Range.Font
.Hidden = True
End With
With ActiveDocument.Sections(13).Range.Font
.Hidden = True
End With
With ActiveDocument.Sections(14).Range.Font
.Hidden = True
End With
With ActiveDocument.Sections(15).Range.Font
.Hidden = True
End With
With ActiveWindow.View
.ShowHiddenText = False
.ShowAll = False
End With
SchutzEin
End Sub


SchutzEin und SchutzAus sind zwei kleine Funktionen die den Dokumentschutz aus- und danach wieder einschalten.

Nun mein Problem: Ich hätte aus diesem Monstrum von Code gerne etwas im Stil von

Code:

Private Sub SelectFunction_page1_Click()
SchutzAus
'Abschnitt 2,3,5 werden eingeblendet

With ActiveDocument.Sections(2).Range.Font
.Hidden = False
End With

'Rest wird ausgeblendet
With ActiveDocument.Sections(4, 6-15).Range.Font
.Hidden = True
End With
With ActiveWindow.View
.ShowHiddenText = False
.ShowAll = False
End With
SchutzEin
End Sub


gemacht, bin aber... naja, zu doof dafür. Ich bin im Moment auch gerade an einer Schleifenkonstruktion am tüfteln, aber wie gesagt... ich hab keine wirkliche Ahnung was ich da mach, also geh ich nicht davon aus dass ich zu einem Ergebnis komme. Ich werde auf jeden Fall für jede Hilfe und jedes Codeschnipselchen über alle Maße dankbar sein!

Viele Grüße,

Boris
Lisa
Moderator; Word seit Word 5.0 (für DOS)


Verfasst am:
27. Apr 2009, 16:17
Rufname:
Wohnort: Leipzig


AW: Mehrere Abschnitte per VBA anzeigen/verstecken - AW: Mehrere Abschnitte per VBA anzeigen/verstecken

Nach oben
       Version: Office 2003

Hallo Boris,

Du solltest trotzmal mal die Scheifen lernen (und den Code einrücken!), das ist viel übersichtlicher:
Code:
Private Sub SelectFunction_page1_Click()
   
    Dim i As Integer

    Call SchutzAus
    'Abschnitt 2,3,5 werden eingeblendet
    For i = 2 To 15
        Select Case i
            Case 2, 3, 5
                ActiveDocument.Sections(i).Range.Font.Hidden = False
            Case 4, 6 To 15
                ActiveDocument.Sections(i).Range.Font.Hidden = True
        End Select
    Next i   
    With ActiveWindow.View
        .ShowHiddenText = False
        .ShowAll = False
    End With
    Call SchutzEin   
End Sub

Auch die Verwendung von Call beim Aufruf von Prozeduren verbessert die Lesbarkeit.

_________________
Sei doch so nett und gib eine Rückmeldung, ob es klappt!
Gruß, Lisa

Guter Rat ist teuer!
Office-Freak
Man tut was man kann!


Verfasst am:
27. Apr 2009, 16:34
Rufname:
Wohnort: Legendäre Officeland

AW: Mehrere Abschnitte per VBA anzeigen/verstecken - AW: Mehrere Abschnitte per VBA anzeigen/verstecken

Nach oben
       Version: Office 2003

Hi Lisa,

mal eine kleine Ergänzungt, da ja Abschnitte ggf. dazukommen:

Code:
Private Sub SelectFunction_page1_Click()
   
    Dim i As Integer

    Call SchutzAus
    'Abschnitt 2,3,5 werden eingeblendet
    With ActiveDocument
      For i = 2 To .Sections.Count
          Select Case i
              Case 2, 3, 5
                  .Sections(i).Range.Font.Hidden = False
              Case Else
                  .Sections(i).Range.Font.Hidden = True
          End Select
      Next i
    End With
   
    With ActiveWindow.View
        .ShowHiddenText = False
        .ShowAll = False
    End With
    Call SchutzEin
End Sub


Jetzt muss man nur bei dem ersten "Case" die Abschnitte reinschreiben, die nicht sichtbar sein sollen. Könnte man natürlich noch weiter verfeinern...

_________________
Gruß
Office-Freak
boris.kuehn
Blutiger MS Project Anfänger


Verfasst am:
27. Apr 2009, 17:22
Rufname: Boris

AW: Mehrere Abschnitte per VBA anzeigen/verstecken - AW: Mehrere Abschnitte per VBA anzeigen/verstecken

Nach oben
       Version: Office 2003

Lisa, Office-Freak, ich danke euch! Genau das war es was ich gesucht hatte... damit werd' ich jetzt mal versuchen meinen kompletten Code (gibt noch andere Makros die genauso katastrophal aussehen) in Form zu bringen... ich werd' euch dann eine Rückmeldung geben wie es funktioniert hat, aber ich bin ziemlich sicher, dass es so hinhauen wird.

Danke, Danke, Danke!

und viele Grüße

Boris
Gast



Verfasst am:
28. Apr 2009, 16:56
Rufname:


AW: Mehrere Abschnitte per VBA anzeigen/verstecken - AW: Mehrere Abschnitte per VBA anzeigen/verstecken

Nach oben
       Version: Office 2003

Halli Hallo,

ich bins schon wieder!

Ich konnte inzwischen dank eurer Schleife meine ganzen Funktionen umbauen, das sieht jetzt schon sehr viel freundlicher aus und ist auch handlicher! Danke nochmals dafür!

Jetzt hab ich aber noch eine andere Kleinigkeit, zwar nix überlebensnotwendiges, aber vielleicht habt ihr ja trotzdem grade Muße und Lust mir weiterzuhelfen, jedes bisschen was ich hier mitbekomme hilft mir auch immer zu verstehen was ich mache und wie's funktioniert... find' ich extrem spannend, so nebenbei betrachtet!

In meinem Formular kommen einige Textmarken vor, diese hab ich eingefügt um zwischen drei 'Textbausteinen' je nach Auswahl des Users umzuschalten: Anlegen, Löschen und Ändern (Ja, es geht um so eine Art Contentformular...)

Der Code dafür schaut (mittlerweile auch mit Einrückungen und Calls!) so aus:

Code:
Private Sub Anlegen1_Click()
    Call SchutzAus
    AktionMarke1 = "am1"
    AktionMarke2 = "am2"

    Dim AktionText1 As Range
    Dim AktionText2 As Range

        Set AktionText1 = ActiveDocument.Bookmarks(AktionMarke1).Range
        Set AktionText2 = ActiveDocument.Bookmarks(AktionMarke2).Range

        AktionText1.Text = "Anlegen"
        AktionText2.Text = "Anlegen"

        ActiveDocument.Bookmarks.Add Name:=AktionMarke1, Range:=AktionText1
        ActiveDocument.Bookmarks.Add Name:=AktionMarke2, Range:=AktionText2
       
    Call SchutzEin
   
End Sub


Nun müsste ich, analog zu meinem vorherigen Problem, hier noch eine ganze Menge Textmarken zufügen, die alle das gleiche machen sollen, je nachdem was der User oben im Formular auswählt zwischen "Anlegen" "Ändern" und "Löschen" umschalten.

Hierzu nun meine Frage: Hab' ich noch andere Möglichkeiten als die oben aufgezeigte um Textmarken zu addressieren und zu verändern? Ich würde hier auch gerne wieder ein Schleifchen basteln, aber ich glaube ohne die Möglichkeit die Textmarken einfach durchzuzählen wird das nix werden... Ohnehin glaube ich dass ich in dem Fall den Ursprungscode falsch verstanden und ziemlich verwurstelt habe, aber funktionieren tut's irgendwie trotzdem...

Viele liebe Grüße

Boris
Lisa
Moderator; Word seit Word 5.0 (für DOS)


Verfasst am:
28. Apr 2009, 19:28
Rufname:
Wohnort: Leipzig

AW: Mehrere Abschnitte per VBA anzeigen/verstecken - AW: Mehrere Abschnitte per VBA anzeigen/verstecken

Nach oben
       Version: Office 2003

Hallo Boris,

ich bin nicht sicher, ob ich die Frage richtig verstanden habe. ;)
Wenn Du erreichen willst, mehrere Textmarken zu füllen, kannst Du dafür unsere im Forum allseits beliebte ReSetBookmark verwenden:
Code:
Sub ReSetBookmark(ByVal doc As Word.Document, ByVal TMName As String, ByVal TMInhalt As String)
'Recycling-Textmarke mit übernommenen Werten, geht für alle Textmarken

    Dim rng As Range
   
    If doc.Bookmarks.Exists(TMName) Then
        Set rng = doc.Bookmarks(TMName).Range
        rng.Text = TMInhalt
        doc.Bookmarks.Add name:=TMName, Range:=rng
    End If
   
    Set rng = Nothing

End Sub

Diese speicherst Du einmal in Deinem Projekt. Dann kannst Du damit beliebig viele Textmarken befüllen. Dein Beispiel könnte etwa so aussehen:
Code:
Private Sub Anlegen1_Click()

    Call SchutzAus
   
    Call ReSetBookmark(doc:=ActiveDocument, TMName:="am1", TMInhalt:="Anlegen")
    Call ReSetBookmark(ActiveDocument, "am2", "Löschen")
    Call ReSetBookmark(ActiveDocument, "am3", "Ändern")
       
    Call SchutzEin
   
End Sub

Die 3 Aufrufzeilen rufen jeweils die Prozedur auf und übergeben ihr das Dokument, den Namen der Textmarke und der Inhalt, den sie bekommen soll. Selbstverständlich kannst Du den Aufruf auch in einer Schleife machen. Wie gesagt, ich habe nicht verstanden, was Du da genau machen willst. Bitte erläutere das nochmal genauer.

_________________
Sei doch so nett und gib eine Rückmeldung, ob es klappt!
Gruß, Lisa

Guter Rat ist teuer!
Gast



Verfasst am:
29. Apr 2009, 10:57
Rufname:

AW: Mehrere Abschnitte per VBA anzeigen/verstecken - AW: Mehrere Abschnitte per VBA anzeigen/verstecken

Nach oben
       Version: Office 2003

Hallo Lisa,

erstmal vielen Dank für deine Antwort! Hier nun mein Versuch ein wenig Licht ins Dunkel zu bringen:

Ich habe im Fomular jede Menge Textmarken (am1, am2, am3, am4, ...). Diese 'korrespondieren' mit einer Auswahl die der User im Kopf des Formulares trifft "Anlegen" "Löschen" "Ändern". (es geht, wie erwähnt, um ein Contentformular für Websites).
Nun soll also der Text sämtlicher Textmarken angepasst werden, wenn der User eine andere Aktion auswählt.
Bisher habe ich das über den oben geposteten Code erledigt, funktioniert auch soweit und würde es sicher auch weiter tun. Da ich nun aber die Anzahl der zu steuernden Textmarken (von bisher 2) deutlich erhöhe, hätte ich halt gerne ein etwas effektiveres Makro, dass mir (am Besten) alle Textmarken, deren Bezeichnung mit "am" beginnt umstellt, insbesondere auch um für eine eventuelle Erweiterung des Formulars gewappnet zu sein...

Hoffentlich hab ich es diesmal etwas nachvollziehbarer ausgedrückt...

Viele liebe Grüße

Boris
Lisa
Moderator; Word seit Word 5.0 (für DOS)


Verfasst am:
29. Apr 2009, 20:15
Rufname:
Wohnort: Leipzig

AW: Mehrere Abschnitte per VBA anzeigen/verstecken - AW: Mehrere Abschnitte per VBA anzeigen/verstecken

Nach oben
       Version: Office 2003

Hallo Boris,

aha, jetzt wird es schon deutlicher. Die obige ReSetBookmark brauchst Du trotzdem. Deine Prozedur könnte dann etwa so aussehen:
Code:
Private Sub Anlegen1_Click()

    Dim bkm As Word.Bookmark
   
    Call SchutzAus
   
    For Each bkm In ActiveDocument.Bookmarks
        If Left(bkm.name, 2) = "am" Then
            Call ReSetBookmark(doc:=ActiveDocument, TMName:=bkm.name, TMInhalt:="Anlegen")
        End If
    Next bkm
       
    Call SchutzEin
   
End Sub

Es wird durch alle Bookmarks des Dokuments "geschleift". Wenn die ersten beiden Buchstaben des Namens "am" sind, wird die ReSetBookmark aufgerufen, und zwar mit dem Dokument, dem (kompletten) Namen der jeweiligen Bookmark und dem einzufüllenden Inhalt. War es so gemeint?

_________________
Sei doch so nett und gib eine Rückmeldung, ob es klappt!
Gruß, Lisa

Guter Rat ist teuer!
boris.kuehn
Blutiger MS Project Anfänger


Verfasst am:
30. Apr 2009, 09:39
Rufname: Boris

AW: Mehrere Abschnitte per VBA anzeigen/verstecken - AW: Mehrere Abschnitte per VBA anzeigen/verstecken

Nach oben
       Version: Office 2003

einen wunderschönen guten Morgen!

Ich habe das Makro gerade mal ausprobiert (in einem neuen Dokument zum testen, drum sind meine Schutzmakros rausgeflogen), und zwar sieht das Ganze bei mir jetzt so aus:

Code:
Sub ReSetBookmark(ByVal doc As Word.Document, ByVal TMName As String, ByVal TMInhalt As String)
'Recycling-Textmarke mit übernommenen Werten, geht für alle Textmarken

    Dim rng As Range
   
    If doc.Bookmarks.Exists(TMName) Then
        Set rng = doc.Bookmarks(TMName).Range
        rng.Text = TMInhalt
        doc.Bookmarks.Add Name:=TMName, Range:=rng
   
    End If
   
    Set rng = Nothing

End Sub

Private Sub markenändern()
    Dim bkm As Word.Bookmark
    For Each bkm In ActiveDocument.Bookmarks
        If Left(bkm.Name, 2) = "am" Then
            Call ReSetBookmark(doc:=ActiveDocument, TMName:=bkm.Name, TMInhalt:="Anlegen")
        End If
    Next bkm
End Sub


Aufrufen tu ichs dann hiermit:

Code:
Private Sub OptionButton1_Click()
    Call markenändern
End Sub


sollte ja theoretisch passen.... wenn ich nun auf meinen Radiobutton klicke fängt Word an zu rumoren und es erscheint die Meldung "Unzureichender Arbeitsspeicher. Sie können diesen Vorgang nicht rückgängig machen. Möchten Sie fortfahren?"
Wenn ich mich fürs Fortfahren entscheide steigt die CPU-Last auf 100% und es passiert einige Sekunden lang garnichts mehr bis dann die selbe Meldung nochmal auftaucht...

Ich bin mir nicht ganz sicher wodurch das ausgelöst wird, vermute aber mal dass die Schleife einfach durchläuft und nicht beendet wird... Ich hab' dann auch mal versucht einfach ein 'Else' einzubauen, nur geholfen hat das leider nichts...

Könnte das vielleicht damit zu tun haben, dass die Prozedur mit
Code:
If Left(bkm.name, 2) = "am" Then
IMMER etwas findet weil die linken beiden Zeichen ja nicht umbenannt werden? Müsste man da vielleicht noch in irgendeinem Schritt die Lesezeichen umbenennen und die drei aufrufenden Prozeduren entsprechend anpassen? Aber wenn ja... wie kann ich dann nur die ersten beiden Zeichen der Textmarke ändern?

So viele Fragen, so viel Text... Danke schonmal für die viele Zeit, die Ihr allein mit lesen verbringen müsst! Wink

Viele liebe Grüße

Boris
Lisa
Moderator; Word seit Word 5.0 (für DOS)


Verfasst am:
30. Apr 2009, 11:28
Rufname:
Wohnort: Leipzig

AW: Mehrere Abschnitte per VBA anzeigen/verstecken - AW: Mehrere Abschnitte per VBA anzeigen/verstecken

Nach oben
       Version: Office 2003

Hallo Boris,

nicht so viel Theorie. Tu mir einen Gefallen und probier den Code außerhalb einer Userform. Ich halte das Ereignis Optionbutton1_Click für die Ursache der Effekte.

Lös das Makro von Hand aus, also in einem normalen Modul eine normale Prozedur:
Code:
Sub Test()
   Call markenaendern
End Sub

Und bitte: möglichst keine Umlaute in Prozedurnamen, also kein "ä".
Wie sieht es dann aus?

Das Ändern der ersten beiden Buchstaben ist überflüssig, da nur einmal durch alle Bookmarks (for each) geschleift wird, dabei wird jede Bookmark nur einmal "angefasst".

Falls es zutrifft, dass der Code normal durchläuft, liegt es an Deiner Konzeption. In dem Fall deklarier eine globale Variable in der Userform, die von den OptionButtons im Click-Ereignis nur geändert wird. Im Click-Ereignis des OK-Buttons rufst Du dann abhängig von dem Wert der globalen Variable die Prozedur auf.

_________________
Sei doch so nett und gib eine Rückmeldung, ob es klappt!
Gruß, Lisa

Guter Rat ist teuer!
boris.kuehn
Blutiger MS Project Anfänger


Verfasst am:
30. Apr 2009, 16:29
Rufname: Boris

AW: Mehrere Abschnitte per VBA anzeigen/verstecken - AW: Mehrere Abschnitte per VBA anzeigen/verstecken

Nach oben
       Version: Office 2003

Hallo Lisa,

ich habe jetzt die Bezeichnung der Funktion geändert und sie von Hand ausgelöst... das Ergebnis ist dasselbe...

Die Funktion:
Code:
Private Sub markenaendern1()
    Dim bkm As Word.Bookmark
    For Each bkm In ActiveDocument.Bookmarks
        If Left(bkm.Name, 2) = "am" Then
            Call ReSetBookmark(doc:=ActiveDocument, TMName:=bkm.Name, TMInhalt:="Hurz!")
        End If
    Next bkm
End Sub


bringt den Rechner ordentlich zum rödeln und führt zur obigen Meldung, mehr passiert aber leider nicht...

Achso und ein Userform benutze ich ohnehin nicht (Die Vorgabe für mein Formular war dass auch ein paranoider Benutzer, der die Ausführung von Makros unter keinen Umständen zulässt, zumindest noch die Felder ausfüllen kann, wenn auch unkomfortabel)

Viele liebe Grüße

Boris

***Edit: Ich hab mich gerade mal für den Datei-Upload angemeldet, sicher wirds dadurch leichter nachvollziehbar, wo mein Fehler liegt!
Lisa
Moderator; Word seit Word 5.0 (für DOS)


Verfasst am:
30. Apr 2009, 17:47
Rufname:
Wohnort: Leipzig

AW: Mehrere Abschnitte per VBA anzeigen/verstecken - AW: Mehrere Abschnitte per VBA anzeigen/verstecken

Nach oben
       Version: Office 2003

Hallo Boris,

im Moment ist es mir wirklich nicht klar, woher das kommt. Datei-Upload ist gut, dann seh ich mir das an. (Ich hab so eine Vermutung, will es aber wirklich erst sehen.)
Zitat:
(Die Vorgabe für mein Formular war dass auch ein paranoider Benutzer, der die Ausführung von Makros unter keinen Umständen zulässt, zumindest noch die Felder ausfüllen kann, wenn auch unkomfortabel)

Gegenfrage: Die Optionsfelder, die Du da verwendest, sind folglich ActiveX-Steuerelemente aus der Symbolleiste "Steuerelemente-Toolbox". Trifft das zu?
Diese haben einige "unerwünschte Nebenwirkungen":
  • Sie befördern die Crash-Neigung von Dokumenten stark und führen allgemein zu sehr instabilen Dokumenten.
  • Sie lösen auf jedem fremden Rechner eine Makro-Warnung aus. Falls auf dem Fremdrechner die Makro-Sicherheit auf Hoch bzw. Sehr hoch steht, werden die Makros sofort deaktiviert.
  • Das Dokument wird dann im Entwurfsmodus auf dem fremden Rechner geöffnet (WEIL es ActiveX-Elemente enthält!). Der von Dir angepeilte paranoide Nutzer muss also wenigstens wissen, dass er den Entwurfsmodus deaktivieren muss, sonst kann er beim besten Willen die OptionButtons nicht benutzen.

Aus allen drei Gründen rate ich von den ActiveX-Steuerelementen in Word-Dokumenten ab. (Die sind eigentlich nicht für Word gemacht, sondern mehr zufällig in Word verfügbar.)
Entweder man baut ein Formular ganz ohne VBA nur mit den (beschränkten) Elementen der Symbolleiste Formular (die hat ja nur Textbox, Kontrollkästchen und Dropdown). Oder man baut gleich eine gescheite Userform, in der man alle Abhängigkeiten vernünftig programmieren kann, und lässt die Variablen dann mit Click auf OK-Button ins Dokument eintragen (damit können auch Formularfelder bestückt werden).
Nach Deiner Zielstellung dürftest Du nur Elemente aus der Symbolleiste Formular verwenden, damit ein User, der die Makros deaktiviert, es trotzdem benutzen kann. Denn wenn ich dem Nutzer erst sagen muss, er soll den Entwurfsmodus ausschalten, kann ich ihm auch gleich sagen, er soll die Makros zulassen ... (Ich hör schon die Reaktionen: "Entwurfsmodus - um Himmels willen ...").

Evtl. denkst Du inzwischen über die Konzeption nochmal nach.

_________________
Sei doch so nett und gib eine Rückmeldung, ob es klappt!
Gruß, Lisa

Guter Rat ist teuer!
boris.kuehn
Blutiger MS Project Anfänger


Verfasst am:
05. Mai 2009, 11:38
Rufname: Boris

AW: Mehrere Abschnitte per VBA anzeigen/verstecken - AW: Mehrere Abschnitte per VBA anzeigen/verstecken

Nach oben
       Version: Office 2003

Halli Hallo Lisa,

zuallererst muss ich mich mal für die späte Rückmeldung entschuldigen... übers Wochenende bin ich nicht wirklich zu was gekommen, genausowenig wie gestern...

Ich hab dir mal mein Testdokument für die Textmarkenproblematik angehängt, falls dich das Formular selbst interessieren würde, kann ich dir das auch gern per PM schicken, öffentlich ausstellen würd' ich es nur ungern wollen...

Jaa, das mit der Konzeption ist so eine Sache... zuerst hiess es '...soll auch auf Rechnern laufen, auf denen keine Makros ausgeführt werden können...' also war für mich klar ich muss das Ding so fail-save wie möglich bauen, inzwischen sind wir aber übereingekommen, dass wir das Dokument und den Code (vertrauenswürdig) digital signieren, und für die wenigen User, die tatsächlich sehr hohe Sicherheitseinstellungen verwenden eben nur noch eine wirkliche Rumpf-Funktionalität übrig bleibt... Nachdem ich nun aber insgesamt schon seit Wochen (gut, nicht ausschließlich aber trotzdem) dran arbeite wollte ich es eben nicht komplett übern Haufen werfen.

Die Steuerelemente sind nicht wirklich problematisch (immer von der Voraussetzung ausgehend dass die Makros ausgeführt werden können), da ich das Formular beim öffnen "initialisiere", so dass das Dokument als Seitenlayout mit aktivem Dokumentenschutz angezeigt wird... Instabilitäten konnte ich bisher (zum Glück) noch keine feststellen, ich drück' mir mal selbst die Daumen, dass das auch so bleibt...

Soviel erstmal dazu, vielen Dank auch nochmal für die ganze Zeit, die du nun schon in meine Problemchen investiert hast! Wink

Viele liebe Grüße

Boris



Textmarkentest.doc
 Beschreibung:

Download
 Dateiname:  Textmarkentest.doc
 Dateigröße:  44.5 KB
 Heruntergeladen:  74 mal

Lisa
Moderator; Word seit Word 5.0 (für DOS)


Verfasst am:
05. Mai 2009, 20:01
Rufname:
Wohnort: Leipzig

AW: Mehrere Abschnitte per VBA anzeigen/verstecken - AW: Mehrere Abschnitte per VBA anzeigen/verstecken

Nach oben
       Version: Office 2003

Hallo Boris,

ja, ich konnte den Effekt in Deinem Dokument reproduzierbar nachvollziehen. Allerdings ist mir noch nicht klar, woraus er resultiert (irgendwie vertragen sich die ActiveX-Elemente nicht mit der For-Each-Schleife über die Bookmarks, ich muss dazu erst nochmal nachdenken, im Augenblick ist es mir ein Rätsel).
Ich habe jetzt mal die Schleife anders gebaut (Zählschleife!) und auch sonst Änderungen vorgenommen. Die OptionButtons legen jetzt nur noch den Wert eines Strings fest. Der Wert des festgelegten Strings wird dann beim Click auf OK an alle Textmarken geschrieben, die mit "am" beginnen. Deine Prozeduren "markenändern" werden nicht gebraucht. (Und: bitte keine Umlaute im Prozedurnamen von VBA!!!) Es sieht so aus.
Im Modul ThisDocument
Code:
Option Explicit

Dim strInhalt As String

Private Sub CommandButton1_Click()
   
    Dim i As Long

    For i = 1 To ActiveDocument.Bookmarks.Count
        If Left$(ActiveDocument.Bookmarks(i).Name, 2) = "am" Then
            Call ReSetBookmark(doc:=ActiveDocument, TMName:=ActiveDocument.Bookmarks(i).Name, TMInhalt:=strInhalt)
        End If
    Next i

End Sub

Private Sub OptionButton1_Click()
   
    If OptionButton1.Value = True Then
        strInhalt = "Anlegen"
    End If

End Sub

Private Sub OptionButton2_Click()
   
    If OptionButton2.Value = True Then
        strInhalt = "Ändern"
    End If

End Sub

Private Sub OptionButton3_Click()
   
    If OptionButton3.Value = True Then
        strInhalt = "Löschen"
    End If

End Sub

Aller Code, der sich nicht direkt auf ThisDocument bezieht, gehört in ein normales Modul. Das betrifft die ReSetBookmark:
Code:
Option Explicit

Sub ReSetBookmark(ByVal doc As Word.Document, ByVal TMName As String, ByVal TMInhalt As String)
'Recycling-Textmarke mit übernommenen Werten, geht für alle Textmarken

    Dim rng As Range
   
    If doc.Bookmarks.Exists(TMName) Then
        Set rng = doc.Bookmarks(TMName).Range
        rng.Text = TMInhalt
        doc.Bookmarks.Add Name:=TMName, Range:=rng
'    Else
    'Do Nothing
    End If
   
    Set rng = Nothing

End Sub

Noch ein Tipp: Bitte im VBA-Editor unter Extras - Optionen im Register: Editor alle Haken setzen, besonders natürlich "Variablendeklaration erforderlich" und "Automatische Syntaxüberprüfung", "Elemente automatisch auflisten" (das sind die wichtigsten). "Variablendeklaration erforderlich" sorgt dafür, dass in jedes neue Modul automatisch Option Explicit eingefügt wird, das erleichtert die Fehlersuche erheblich.
Ich hänge das geänderte Dokument mal an.

_________________
Sei doch so nett und gib eine Rückmeldung, ob es klappt!
Gruß, Lisa

Guter Rat ist teuer!



TMTest2.doc
 Beschreibung:

Download
 Dateiname:  TMTest2.doc
 Dateigröße:  45.5 KB
 Heruntergeladen:  67 mal

Office-Freak
Man tut was man kann!


Verfasst am:
05. Mai 2009, 21:08
Rufname:
Wohnort: Legendäre Officeland


AW: Mehrere Abschnitte per VBA anzeigen/verstecken - AW: Mehrere Abschnitte per VBA anzeigen/verstecken

Nach oben
       Version: Office 2003

Hi,

nur als Erklärung:

Wenn ich ein Objektkatalog "durchlaufe" und die Objekte darin ändere (hier wird es neu gesetzt) --- setzt er ggf. das geänderte Objekt wieder in die Auflistung ein - als neues Objekt - dadurch entsteht eine Endlosschleife.

Der Klassiker ist das "Löschen" eines Objektes ... was oft nicht so funktioniert.

_________________
Gruß
Office-Freak
Neues Thema eröffnen   Neue Antwort erstellen Alle Zeiten sind
GMT + 1 Stunde

Diese Seite Freunden empfehlen

Seite 1 von 1
Gehe zu:  
Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum herunterladen

Verwandte Themen
Forum / Themen   Antworten   Autor   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge Word Serienbriefe: Word Dokument per Klick auf Button per mail versenden 3 lexi3112 2274 19. Dez 2012, 16:27
Alex3112 Word Dokument per Klick auf Button per mail versenden
Keine neuen Beiträge Word Serienbriefe: Serienbrief aus Access: bestimmte Adresse anzeigen 12 Wolfgang27 6874 26. Sep 2011, 15:15
logicalsmile Serienbrief aus Access: bestimmte Adresse anzeigen
Keine neuen Beiträge Word Serienbriefe: Excel-Tabelle per Serienbrief dynamisch in Word 0 Panix 1220 05. Jul 2011, 12:55
Panix Excel-Tabelle per Serienbrief dynamisch in Word
Keine neuen Beiträge Word Serienbriefe: Anhang (Bild) aus Access Datenbank anzeigen 3 Skubba 1815 07. Feb 2011, 16:51
Skubba Anhang (Bild) aus Access Datenbank anzeigen
Keine neuen Beiträge Word Serienbriefe: Nicht-Berücksichtigung bestimmter Abschnitte möglich? 1 Madf888 393 20. Okt 2010, 16:26
charlybrown Nicht-Berücksichtigung bestimmter Abschnitte möglich?
Keine neuen Beiträge Word Serienbriefe: Abhängig von MERGEFIELD Block anzeigen - ist das möglicht? 1 Stoxx 1607 26. Jul 2010, 14:50
Stoxx Abhängig von MERGEFIELD Block anzeigen - ist das möglicht?
Keine neuen Beiträge Word Serienbriefe: Serienbrief aus xls nur Datensätze anzeigen wenn Name gleich 0 means 1308 08. Jan 2010, 09:11
means Serienbrief aus xls nur Datensätze anzeigen wenn Name gleich
Keine neuen Beiträge Word Serienbriefe: .mdb per e-mail 2 schokomo 999 17. Apr 2009, 09:20
Gast .mdb per e-mail
Keine neuen Beiträge Word Serienbriefe: Serienbrief per Mail versenden 1 Gast 4235 26. Nov 2008, 20:45
KaDan Serienbrief per Mail versenden
Keine neuen Beiträge Word Serienbriefe: Einzelnen Datensatz aus Access 2007 in Word 2007 anzeigen 0 ermso07 3429 29. Mai 2008, 17:31
ermso07 Einzelnen Datensatz aus Access 2007 in Word 2007 anzeigen
Keine neuen Beiträge Word Serienbriefe: Vollständige Datenquelle anzeigen 4 jette 6080 18. März 2007, 01:05
jette Vollständige Datenquelle anzeigen
Keine neuen Beiträge Word Formate: 5 Vorgegebene Schriftarten per Zufallsprinzip wählen. 0 searcher1900 795 26. Feb 2007, 15:10
searcher1900 5 Vorgegebene Schriftarten per Zufallsprinzip wählen.
 

----> Diese Seite Freunden empfehlen <------ Impressum - Besuchen Sie auch: Access Tabellen