VBA listobject不会添加行

时间:2018-10-26 15:53:24

标签: excel-vba listobject excel-tables

我有一个带几张纸的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

2 个答案:

答案 0 :(得分:0)

我想我知道答案:

您正在使用Listobject作为RowSource。 这是我最近发现的危险。 像硬撞危险”

执行以下操作:在操作列表对象之前,请确保用户表单中的 ALL 元素将Rowsource设置为“”:

Me.pg1Query.RowSource = ""

因此,行源设置为空字符串。因为如果您调整表的大小,那么excel的行源就会崩溃。

操作后,您可以再次重置行源:

Me.pg1Query.RowSource = tbl.name

答案 1 :(得分:0)

晚了聚会,但是我自己的问题是我将工作表滚动区域设置为表格的尺寸,以防止用户滚动到我想隐藏的数据中。不幸的是,这阻止了将一行添加到表中。像这样的代码克服了这个问题(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