首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >除非使用VBA,否则禁止用户在表中插入行。

除非使用VBA,否则禁止用户在表中插入行。
EN

Stack Overflow用户
提问于 2018-05-23 07:54:10
回答 1查看 1.5K关注 0票数 2

我已经为数据输入创建了一个表。但是,当用户使用它时,它们会在表的中间插入行。这就把公式搞砸了,因为这些函数的设计只是向前推进。此外,有时当用户手动添加行时(只需在表的最后一行之后键入下一行),函数就会自动填充,但函数经常不正确。

因此,我添加了一个按钮来将行添加到表中,这样做没有问题。现在我想禁用用户手动添加行的能力,这意味着只有单击按钮才能添加行。

据我研究,人们都建议使用保护表功能。但它将删除所有添加行的功能,包括通过VBA添加行。另一些则提供VBA,它只允许通过右键单击行列插入行。我需要禁用所有用户访问的方式。

这是按钮的代码(如果相关的话)。

代码语言:javascript
运行
复制
Sub InsertRow_Click()

Dim i As Integer

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

End Sub
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-23 09:42:14

当使用工作表保护时,您可以添加Userinterfaceonly= true,这将防止用户的干扰,但是VBA代码仍然可以工作。

代码语言:javascript
运行
复制
Private Sub Workbook_Open()
Dim ws As Worksheet
    For Each ws In ThisWorkbook.Worksheets
        ws.Protect Password:="secret", UserInterFaceOnly:=True
    Next ws
End Sub

或者你只想保护一张纸:

代码语言:javascript
运行
复制
Private Sub Workbook_Open()
       Worksheets("YourSheetName").Protect Password:="secret", UserInterFaceOnly:=True    End Sub

或者在运行宏之前先去掉保护,然后再打开它:

代码语言:javascript
运行
复制
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

用户界面和表看起来不太匹配

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50482822

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档