Ada*_*dam 1 excel vba listobject
我可能错过了一些简单的东西,但 ListRows.Add 让我感到悲伤。这是函数:
Sub addEmployee(employeeName As String, tableToAddTo As ListObject)
Dim newRow As ListRow
Set newRow = tableToAddTo.ListRows.Add()
newRow.Range.Cells(1, 1).Value = employeeName
tableToAddTo.Sort.Apply
End Sub
Run Code Online (Sandbox Code Playgroud)
在大多数情况下,这工作得很好。但是,每当该函数在我的工作表中的某个表上运行时,调用 ListRows.Add 之后的行就永远不会执行(至少调试器是这样指示的),并且该行不会添加到表中。有什么想法/想法吗?
更新:
这是我自发帖以来学到的东西。如果我向 Sub 提供存根数据,它就可以正常工作。例如:
Sub driver()
Dim myTable As ListObject
Set myTable = getTableObject("myTableName")
Call addEmployee("myName", myTable)
End Sub
Run Code Online (Sandbox Code Playgroud)
注意:getTableObject 循环遍历工作表并返回具有匹配名称的 ListObject。
这似乎是处理调用代码的上下文的问题。在失败的情况下,公式(函数调用)已放置在各个工作表的各个单元格中。该公式包含对其他单元格中数据的引用。当其他单元格中的数据发生更改时,将调用该公式,该公式又会调用上面给出的 addEmployee Sub。这就是失败的情况。
很抱歉与问题无关,但这是由于其他原因搜索类似崩溃时在 Google 上出现的唯一 StackOverflow 帖子。这次崩溃ListRows.Add困扰了我很长一段时间,所以分享一下导致我崩溃的问题。
工作表上有一个表(例如 MySourceTable)。在我的用户窗体中,组合框的 RowSource 是该表(MySourceTable[ColName])中的一列。单击同一用户窗体上的另一个按钮时,我将新行插入ListRows.Add到该表中并导致 Excel 崩溃。如果这种情况与您的情况类似,请继续阅读。
崩溃是由 ComboBox 引起的,它仍然附加到表,并且无法处理行的插入(请注意,它仍然是实例化的,因为插入新行时我仍在用户窗体上)。经过一番痛苦之后,插入上方和下方的以下几行彻底解决了这个问题:
comboSetSelect.RowSource = ""
Set newRow = myTable.ListRows.Add
comboSetSelect.RowSource = "MySourceTable[ColName]" 'col set in properties
Run Code Online (Sandbox Code Playgroud)
这会在插入新行之前将 ComboBox 从表中分离出来,并且一旦插入完成,就会再次更新 ComboBox。此外,新插入的行的值(如果在插入后立即更新)也会显示在 ComboBox 中。
| 归档时间: |
|
| 查看次数: |
11922 次 |
| 最近记录: |