VBA 列表对象不会添加行



我有一个wb,它有几个表,每个表有两个表(listobject(。我还有一个用户表单,允许用户添加、编辑和删除表中的行。这些表是静态的,这意味着它们永远存在,永远不会被删除,它们位于同一位置,永远不会移动。我还以不同的方式引用了这些对象,通过索引或名称,看看这是否有区别。

有时,当用户对任何表执行Add、Edit或Delete操作时,我会得到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

聚会迟到了,但我自己的问题是,我将工作表滚动区域设置为表的尺寸,以防止用户滚动到我想要隐藏的数据中。不幸的是,这会阻止将一行添加到表中。这样的代码克服了这个问题(sWks保存工作表的名称(:

ThisWorkbook.Worksheets(sWks).ScrollArea = ""    'Unlock table scroll to add a row
With ThisWorkbook.Worksheets(sWks).ListObjects(1)
.ListRows.Add AlwaysInsert:=True
End With
'Write to the added row, then lock scroll area to table again using:
With ThisWorkbook.Worksheets(sWks)              
.ScrollArea = .ListObjects(1)
End With

我也遇到了这个问题。参考@Lucas Raphael Pianegondas的答案,下面的代码没有操纵行源,而是帮助我解决了问题:

tbl.ListRows.Add Position:=1, AlwaysInsert:=True

我还没有尝试过不同的位置。

提示最初来自这里:https://social.msdn.microsoft.com/Forums/office/en-US/6fbcfa0f-e1d0-49e9-b96d-7c390fcf61a2/method-add-of-object-listrows-failed?forum=exceldev

最新更新