0
votes

Je ne peux pas modifier le texte dans le contrôle de contenu en raison du texte de l'espace réservé

J'ai un contrôle de contenu texte riche appelé TestContent code>. Exemple:

 Entrez la description de l'image ici Dans mon code, le sous Runexample code> initialisé la plage de ladite commande de contenu et écrit l'exemple de texte à l'extrémité de la plage en utilisant addtext code> SUB: P>

Option Explicit
Dim TestContentRange As Word.Range

Sub RunExample()
    Set TestContentRange = ActiveDocument.SelectContentControlsByTitle("TestContent")(1).Range
    TestContentRange.Text = "!"
    AddText "Hello World"
End Sub


Sub AddText(TextBit As String)
    Dim SlaveRange As Word.Range
    Set SlaveRange = TestContentRange
    SlaveRange.Collapse Direction:=wdCollapseEnd
    SlaveRange.Text = TextBit
End Sub


0 commentaires

3 Réponses :


0
votes

Ma compréhension de votre question est que vous souhaitez remplacer ou ajouter au texte d'un contrôle de contenu, en fonction du texte existant dans le contrôle.

Pour vérifier si un contrôle de contenu contient toujours son texte de placement comparer simplement la plage de contrôles.Text à sa propriété PlaceholderText. Pour ce faire, votre routine AddTtext doit fonctionner avec la commande de contenu réelle non seulement sa plage. P>

Sub RunExample()
  AddTextToContentControl ActiveDocument, "Test Content", "Hello World"
End Sub

Sub AddTextToContentControl(WorkDoc As Document, CCTitle As String, TextToAdd As String)
  Dim ctrl As ContentControl
  Set ctrl = GetContentControlByTitle(WorkDoc, CCTitle)
  If Not ctrl Is Nothing Then
    If ctrl.Range.Text = ctrl.PlaceholderText Then
      'replace the placeholder text
      ctrl.Range.Text = TextToAdd
    Else
      'add to the existing text
      ctrl.Range.Text = ctrl.Range.Text & " " & TextToAdd
    End If
  End If
End Sub

Function GetContentControlByTitle(SearchDoc As Document, CCTitle As String) As ContentControl
  Dim ctrl As ContentControl
  For Each ctrl In SearchDoc.ContentControls
    If ctrl.Title = CCTitle Then
      Set GetContentControlByTitle = ctrl
      Exit For
    End If
  Next
End Function


0 commentaires

0
votes

Parce que vous effondrez la gamme, la macro tente d'ajouter votre texte au texte par défaut dans le CC, qui n'est pas possible. Il suffit de sortir cette ligne: xxx

puis il fonctionne comme prévu et remplace la valeur par défaut.


2 commentaires

Je voulais mon addtext Subroutin pour ajouter des données à la fin de la plage de la commande de contenu, ne le remplace pas.


Mais dans votre question, vous avez proposé de vérifier si le CC était vide d'abord avant d'ajouter du texte. Pourquoi voudriez-vous ajouter du texte au texte de l'espace réservé par défaut?



0
votes

Je suggère quelque chose qui utilise. :

' This assumes there is at least one CC titled "TestContent"
With ActiveDocument.SelectContentControlsByTitle("TestContent")(1)
  If .ShowingPlaceholderText Then
    .Range.Text = "Hello World"
  Else
    .Range.InsertAfter "Hello World"
  End If
End With


0 commentaires