Запретить пользователю вставку строки в таблицу, кроме использования VBA - PullRequest
0 голосов
/ 23 мая 2018

Я создал таблицу для ввода данных.Однако, по мере использования пользователем, они вставляют строки в середину таблицы.Это нарушает формулу, поскольку функции были разработаны только для дальнейшей работы.Также иногда, когда пользователь добавляет строку вручную (просто вводя следующую строку после последней строки таблицы), функция заполнялась автоматически, но функция довольно часто некорректна.

Поэтому я добавил кнопку вдобавить строки в таблицу, и это работает без проблем.Теперь я хочу отключить возможность добавления строк пользователем вручную, то есть строки можно добавлять ТОЛЬКО с помощью нажатия кнопки.

Насколько я знаю, все люди предлагают использовать функцию защиты листа.Но это уберет все возможности добавления строк, в том числе и через VBA.Другие предлагают VBA, которые предотвращают вставку строк только щелчком правой кнопкой мыши на столбце строк.Мне нужно отключить все доступные пользователю способы.

Это код кнопки (если она имеет какое-либо отношение).

Sub InsertRow_Click()

Dim i As Integer

For i = 1 To 10
    ActiveSheet.ListObjects("Invoice").ListRows.Add alwaysinsert:=True
Next i

End Sub

1 Ответ

0 голосов
/ 23 мая 2018

При использовании защиты листа вы можете добавить Userinterfaceonly = true, это предотвратит вмешательство пользователя, но код VBA все равно будет работать.

Private Sub Workbook_Open()
Dim ws As Worksheet
    For Each ws In ThisWorkbook.Worksheets
        ws.Protect Password:="secret", UserInterFaceOnly:=True
    Next ws
End Sub

или если вы хотите защитить только один лист:

Private Sub Workbook_Open()
       Worksheets("YourSheetName").Protect Password:="secret", UserInterFaceOnly:=True    End Sub

Или просто снимите защиту перед запуском макроса и включите ее потом:

Sub InsertRow_Click()
ActiveSheet.Unprotect Password:="secret"
Dim i As Integer

For i = 1 To 10
    ActiveSheet.ListObjects("Invoice").ListRows.Add alwaysinsert:=True
Next i
ActiveSheet.protect Password:="secret"
End Sub

Пользовательский интерфейс и таблицы выглядят, если это не подходит

...