2016-04-15 32 views
1

Ich benutze VBA in Word, um ein SmartForm zu erstellen, wo der Benutzer ein Kontrollkästchen aktivieren kann, um bestimmte Informationen anzuzeigen, die ich mit einem Lesezeichen versehen habe das Namensformat „TEXT_BUTANE“ActiveX Checkbox ruft Sub auf, um alle Lesezeichen durchzuschleifen und bedingte Aktionen auszuführen (für bestimmte Gruppen)

Da jedes Produkt (Butan/Propan/ETHANE) mehrere Lesezeichen in dem Dokument haben will ich sie „TEXT_BUTANE1“ „TEXT_BUTANE2“ etc

Also würde ich dann wie ich Namensgebung zu Schleife durch alle Lesezeichen und Ausblenden/Anzeigen von Abschnitten im Dokument, abhängig davon, zu welcher Gruppe es gehört, dh alle Lesezeichen, die mit "TEXT_BUT" beginnen, würden als eine Gruppe betrachtet, die kollektiv ausgeblendet wäre (oder s hown wenn aktiviert)

ich einen Compiler-Fehler bekommen „Weiter ohne For“ aber von dem, was ich die Syntax sehen richtig ist

Es funktionierte vor dem LoopThroughBookmarks Sub erstellen, aber ich brauche so etwas wie dies so ich kann/zeigen verbergen mehrere Abschnitte des Dokuments

Jede Hilfe sehr geschätzt werden würde

Private Sub CHECK_BUTANE_Click() 

Dim vw As Word.View 
Dim bChecked As Boolean 
Dim bkm As Word.Bookmark 

'turned on non-printing characters individually so that 
'not displaying Hidden text does not affect these settings. 
Set vw = Application.ActiveWindow.View 
If vw.ShowAll = True Then  'if TRUE then SHOW following 
    vw.ShowParagraphs = True 
    vw.ShowObjectAnchors = True 
    vw.ShowTabs = True 
    vw.ShowHyphens = True 
    vw.ShowOptionalBreaks = True 
    vw.ShowSpaces = True 
End If 
vw.ShowAll = False   'if FALSE then HIDE following 
vw.ShowHiddenText = False 
bChecked = Me.CHECK_BUTANE.Value 
           'if CHECKED 
If bChecked Then 
    Call LoopThroughBookmarks("BUT", True) 'then TRUE so loop through bookmarks passing PRODUCT 
Else 
    Call LoopThroughBookmarks("BUT", False) 'then FALSE so loop through bookmarks passing PRODUCT 
End If 
End Sub 


Public Sub LoopThroughBookmarks(product As String, bChecked As Boolean) 

Dim bkm As Bookmark 
Dim strMarks() As String 
Dim intCount As Integer 
Dim checkString As String 
Dim bkmName As String 


checkString = "CHECK_" + product  'CHECK_BUT or CHECK_PRO or CHECK_MET 

If ActiveDocument.Bookmarks.Count > 0 Then 
    ReDim strMarks(ActiveDocument.Bookmarks.Count - 1) 
    intCount = 0 
    For Each bkm In ActiveDocument.Bookmarks   'Set bkm to be current Bookmark 
     bkmName = Left$(bkm.Name, 9)     'taking first 9 chars for bkm comparison 
     If bkmName = checkString Then    'if TRUE 
      bkm.Range.Font.Hidden = Not bChecked  'then hidden is false 
     Else           'is FALSE 
      bkm.Range.Font.Hidden = bChecked   'so stay visibility 
    Next bkm 
End If 

End Sub 
+0

Hallo @Cindy Meister vereinfachen ich wirklich zu schätzen Deine vorherige Antwort, die mich dazu gebracht hat! Jetzt frage ich mich nur, ob Sie in der Lage sind, mit dieser Revision zu helfen, mehrere Abschnitte anzuzeigen/auszublenden? :-) –

Antwort

0

Sie sind wahrscheinlich, dass Fehler bekommen, weil Sie eine End If unmittelbar vor demfehlen 0 in diesem Teil des Codes:

If bkmName = checkString Then    'if TRUE 
     bkm.Range.Font.Hidden = Not bChecked  'then hidden is false 
    Else           'is FALSE 
     bkm.Range.Font.Hidden = bChecked   'so stay visibility 
Next bkm 

Als weitere Beobachtung, könnten Sie wahrscheinlich diesen Teil des Codes

bChecked = Me.CHECK_BUTANE.Value 
           'if CHECKED 
If bChecked Then 
    Call LoopThroughBookmarks("BUT", True) 'then TRUE so loop through bookmarks passing PRODUCT 
Else 
    Call LoopThroughBookmarks("BUT", False) 'then FALSE so loop through bookmarks passing PRODUCT 

zu

Call LoopThroughBookmarks("BUT",Me.CHECK_BUTANE.Value) 
+0

Danke! Diese Syntax war nicht in dem Beispiel enthalten, das ich verfolgte .. also danke für die Klarstellung :) Leider funktioniert die von Ihnen vorgeschlagene Vereinfachung nicht in meinem Code, ich habe es ein paar Wege versucht (entweder bChecked übergeben, oder Me.CHECK_BUTANE.Value) aber lassen Sie das Programm weder kompilieren –

+0

Nur lesen Sie Ihren Kommentar Ich fragte mich, ob Sie gerade die "Vereinfachung" (das zweite Bit) getan und nicht das fehlende Ende If (das erste Bit) hinzugefügt? –

+0

FWIW als ich hier die End If-Zeile hinzugefügt habe, ist der Kompilierungsfehler verschwunden. –