Excel VBA:删除和添加允许用户编辑';动态的

Excel VBA:删除和添加允许用户编辑';动态的,excel,vba,Excel,Vba,将工作表上的表添加到AllowEditRanges时遇到问题。我知道这样添加它的语法:ActiveSheet.Protection.AllowEditRanges.add Title:=“Range1”,Range:=Range(“Table1353”),但我会定期创建新工作表,每个工作表都有一个表。我需要它抓住工作表上的表格并添加它。不确定下面的代码是否是执行此操作的方法,但我在代码行ActiveSheet.Protection.AllowEditRanges.Add Title:=“Tabl

将工作表上的表添加到AllowEditRanges时遇到问题。我知道这样添加它的语法:
ActiveSheet.Protection.AllowEditRanges.add Title:=“Range1”,Range:=Range(“Table1353”)
,但我会定期创建新工作表,每个工作表都有一个表。我需要它抓住工作表上的表格并添加它。不确定下面的代码是否是执行此操作的方法,但我在代码行
ActiveSheet.Protection.AllowEditRanges.Add Title:=“TableSort”,Range:=.DataBodyRange
-“未设置对象变量和块变量”。请提供任何指导

Sub AddNewAER()

Dim aer As AllowEditRange
Dim tbl As ListObject
Dim sh As Worksheet
Set sh = ThisWorkbook.ActiveSheet

On Error Resume Next
On Error GoTo 0
For Each aer In ActiveSheet.Protection.AllowEditRanges
aer.Delete
Next aer


With tbl
ActiveSheet.Protection.AllowEditRanges.Add Title:="TableSort", Range:=.DataBodyRange
End With

End Sub

tbl
在使用前声明为ListObject,但不声明为
Set
。因此出现了错误

Set tbl=ActiveSheet.ListObjects(“Table1”)
before with语句

而且

tbl
本身就是ListObject,因此
tbl.ListObject
将不起作用

这样做:

带tbl
ActiveSheet.Protection.AllowEditRanges.Add标题:=“表排序”,范围:=.DataCodeRange

结束,谢谢。我通过代码进行了更新,但在第
ActiveSheet.Protection.AllowEditRanges.addtitle:=“TableSort”,Range:=.DataBodyRange
行中仍然出现调试错误。我试图避免调用表名。我不想每次创建新表时都更改宏。我应该为每一个陈述做一个分析吗?我试过了,但还是在那一行出现了调试错误。谢谢。因为工作表中只有一个表,所以可以使用
Set tbl=ActiveSheet.ListObjects(1)