2016-08-19 107 views
5

Mam szablon słowo z kontrolą treści zapakowane w kontrolę zawartości sekcji powtarzalnej. Muszę utworzyć przycisk, aby usunąć elementy repeater, takie jak dodanie.Usunąć powtarzający się element sekcji programowo według indeksu w makrach pliku docx?

Próbuję dowiedzieć się, jak usunąć powtarzający się element sekcji. Ale w tym przypadku - zawsze usuwam ostatni przedmiot. Ale chcę mieć możliwość usunięcia elementu wybranego przez użytkownika.

Sub delete() 
    Dim cc As ContentControl 
    Dim Index 
    Set cc = ThisDocument.SelectContentControlsByTag("ResolRepeater").Item(1) 
    With cc 
     .LockContentControl = False 
     .LockContents = False 
     .AllowInsertDeleteSection = True 

     For Index = 1 To cc.RepeatingSectionItems.Count 
     If Selection.Range.InRange(cc.RepeatingSectionItems(Index).Range) Or cc.RepeatingSectionItems(Index).Range.InRange(Selection.Range) Then 
      Exit For 
     End If 
     Next Index 

     'can't delete, get Run-Time Error '5904': "you can not change the range" 
     cc.RepeatingSectionItems(Index).Range.delete 

     'this lines always delete last element: 
     'cc.RepeatingSectionItems(Index).Range.Select 
     'Selection.Delete 

    End With 
End Sub 

word template

będę zadowolony jakiejkolwiek odpowiedzi ..

Odpowiedz

1

Można to wiele sposobów, z których jeden byłby obsłużyć zdarzenia ContentControlBeforeDeleteMSDN Link

Alternatywnie zrobić , możesz użyć bieżącego Selection.range, sprawdzić, czy zakres (włączając początek i koniec) ma kontrolę zawartości typu wdContentControlRepeatingSection, a następnie po prostu usunąć kontrolkę.

Coś (kod nie testowane):

var contentControl = Selection.Range.ContentControls; 
if (contentControl.Type == Microsoft.Office.Interop.Word.WdContentControlType) 
{ 
    contentControl.Delete(); 
} 
Powiązane problemy