Word- VBA- Как удалить выбранную строку в таблице и защитить первые две строки?

Следующий код успешно удаляет выделение в таблице.

If Selection.Information(wdWithInTable) Then
    Selection.Rows.Delete
End If

Кроме того, следующий код успешно предотвращает удаление первых двух строк таблицы, но удаляет их из нижней строки вверх не на основе выбора.

Dim index As Long
    For index = ActiveDocument.Tables(1).Rows.Count To 3 Step -1
        ActiveDocument.Tables(1).Rows(index).Delete
    Exit For
    Next index

Есть ли способ объединить эти два, чтобы я мог удалить любую выбранную строку, но не допустить удаления первых двух строк?


person Mohamad Bachrouche    schedule 04.12.2020    source источник
comment
Вы не можете защитить родительскую строку (что бы вы ни думали о родительской строке). Элементы управления содержимым представляют собой объекты, отличные от таблиц, и имеют разные свойства и методы.   -  person John Korchok    schedule 05.12.2020
comment
@JohnKorchok - он имеет в виду, как можно адаптировать код, чтобы удалить выбранную строку таблицы, но не разрешить удаление первой строки.   -  person Timothy Rylatt    schedule 05.12.2020
comment
Спасибо, после того как я прочитал его предыдущий пост, у меня появилась эта идея. Вы по-прежнему не можете защитить строку от удаления так же, как это можно сделать с помощью элемента управления содержимым.   -  person John Korchok    schedule 05.12.2020
comment
@JohnKorchok - Я отредактировал свой вопрос.   -  person Mohamad Bachrouche    schedule 05.12.2020


Ответы (1)


Было бы полезно, если бы вы ясно указали, чего пытаетесь достичь. Попробуйте что-нибудь вроде:

Sub Demo()
With Selection
  If .Information(wdWithInTable) = False Then Exit Sub
  If .Cells(.Cells.Count).RowIndex > 2 Then
    If .Cells(1).RowIndex < 3 Then
      .Start = .Tables(1).Rows(3).Range.Start
    End If
    .Rows.Delete
  End If
End With
End Sub
person macropod    schedule 06.12.2020
comment
Спасибо, сэр. Мои извенения. Я отредактировал свой вопрос для большей ясности. Мне действительно нужно защитить первые два ряда. Изменение вашего кода Rows(2) на Rows(3) и =1 на >=1 предотвращает удаление первых двух строк, пока я выбираю строку 1 или 2. Однако, например, если есть таблица с 5 строками и я выбираю строку 4, она удалит строки 3-4. Если я выберу строку 5, она удалит строки 3-5 и так далее. Цель состоит в том, чтобы выбрать строку 4 и удалить только строку 4. То же самое со строкой 5. Почти готово. - person Mohamad Bachrouche; 07.12.2020
comment
Еще одна вариация! Вы действительно хотите, чтобы кому-либо было сложно решить вашу проблему ... См. Измененный код. - person macropod; 08.12.2020
comment
Спасибо, сэр. Извините за путаницу! - person Mohamad Bachrouche; 08.12.2020