我有一个带有几张表的工作表,每张表都有两个表(listobjects)。我还有一个用户窗体,允许用户在表中添加、编辑、删除行。这些表是静态的,这意味着它们永远存在并且永远不会被删除,它们位于同一位置并且永远不会移动。我还以不同的方式(通过索引或通过名称)引用了这些对象,看看这是否会产生影响。
有时,当用户对任何表执行“添加”、“编辑”或“删除”操作时,我会收到 1004 运行时错误。不知道为什么,因为我知道该对象存在的事实。错误发生后,Excel 似乎失控并关闭,不保存任何已完成的工作。在下面的代码中,错误发生在tbl.ListRows.Add AlwaysInsert:=True
还有很多其他人喜欢它。
我读过一些情况,Excel 忘记了这些对象的存在,甚至忘记了表中有多少条记录。
我不确定我是否能得到 Excel 为什么这样做的答案......
我的问题是如何有效地捕获此错误,并重置以便 excel 不会关闭。
Private Sub pg1AddDoCode_Click()
Dim tbl As ListObject
Dim lrow As Integer
Set tbl = ThisWorkbook.Worksheets("Constants").ListObjects("DoCode")
tbl.ListRows.Add AlwaysInsert:=True
lrow = tbl.ListRows.count
With tbl.ListRows(lrow)
.Range(1) = UCase(Me.pg1DoCode)
.Range(2) = UCase(Me.pg1DoName)
End With
ClearValues Me.MultiPage1.Pages(1).Controls
Me.pg1AddDoCode.Enabled = True
Me.pg1EditDoCode.Enabled = False
Me.pg1DelDoCode.Enabled = False
Me.pg1Query.RowSource = tbl.Name
Set tbl = Nothing
End Sub
我想我知道答案:
您正在使用 Listobject 作为 RowSource。
这是我最近发现的危险。就像严重碰撞危险一样.
执行以下操作: 在操作列表对象之前,请确保ALL用户表单的元素将 Rowsource 设置为“”:
Me.pg1Query.RowSource = ""
因此 Rowsource 设置为空字符串。因为如果你调整表的大小,那么 Excel 就会崩溃。
操作完成后,您可以再次重置行源:
Me.pg1Query.RowSource = tbl.name
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)