【发布时间】:2019-03-31 10:14:51
【问题描述】:
我有一个带有几张纸的 wb,每张都有两张表(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
【问题讨论】:
-
我测试了您的代码,但根本没有收到该错误。它适用于这个有限的示例。
-
我也不总是明白。这是非常随机的。该代码工作了一段时间,然后突然出现 1004 错误。就像对象不存在一样。非常令人沮丧。
-
我相信你需要创建一个行对象。将 addedRow 调暗为 ListRow,然后设置 addedRow = tbl.ListRows.Add AlwaysInsert:=True,然后使用 addedRow 操作范围
-
@brad 我的回答解决了这个问题吗?
-
@LucasRaphaelPianegonda ...是的!我给自己一些时间来测试更多。但是自从应用您的解决方案后,我没有遇到任何问题
标签: excel vba listobject excel-tables