【问题标题】:VBA listobject won't add rowsVBA listobject 不会添加行
【发布时间】: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


【解决方案1】:

我想我知道答案:

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

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

Me.pg1Query.RowSource = ""

所以 Rowsource 被设置为一个空字符串。因为如果您调整作为某些东西的行源的表格的大小,excel 就会崩溃。

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

Me.pg1Query.RowSource = tbl.name

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2018-12-31
      • 2019-05-14
      • 2019-05-04
      • 2020-01-29
      • 2019-09-29
      • 2012-11-25
      • 2019-05-14
      • 1970-01-01
      • 2021-05-04
      相关资源
      最近更新 更多