【发布时间】:2015-03-21 02:47:33
【问题描述】:
在我的一个工作表中,我有一个
Private Sub BuggingVba()
那应该用一组值替换表中的数据
Dim MyTable As ListObject, myData() As Variant
Set MyTable = Me.ListObjects(1)
myData = collectMyData ' a function defined somewhere else in my workbook
这可能无关紧要,但在这样做之前,我调整了列表对象的大小 (我逐行扩展,因为如果我一次这样做,我会覆盖我的表格下方的内容切换它。)
Dim current As Integer, required As Integer, saldo As Integer
current = MyTable.DataBodyRange.Rows.Count
required = UBound(sourceData, 1) - LBound(sourceData, 1)
' current and required are size of the body, excluding the header
saldo = required - current
If required < current Then
' reduce size
Range(DestinBody.Rows(1), DestinBody.Rows(current - required)).Delete xlShiftUp
Else
' expland size
DestinBody.Rows(1).Copy
For current = current To required - 1
DestinBody.Rows(2).Insert xlShiftDown
Next saldo
End If
如果要插入任何数据,我会覆盖这些值
If required Then
Dim FullTableRange As Range
Set FullTableRange = MyTable.HeaderRowRange _
.Resize(1 + required, MyTable.HeaderRowRange.Columns.Count)
FullTableRange.Value = sourceData
End If
然后 BAM,我的 table/ListObject 不见了!为什么会发生这种情况,我该如何避免?
End Sub
【问题讨论】:
-
你试过不覆盖标题吗?
-
我想过
MyTable.DataRange = slice(1 + souceData, LBound(sourceData, 1), UBound(sourceData, 1)),@Rory,但是1. VBA 没有切片功能2. 我也必须更新我的标题。 -
那么在最后添加表格可能很容易。
-
我可以,但我应该先保存使用的排序和过滤,然后再重建它。
-
我现在通过逐个单元格更新来纠正它。这样可行。 @Rory,如果没有更好的解决方案,您认为值得将其作为解决方案输入,还是我应该删除问题?
标签: excel excel-2010 listobject vba