VBA删除表后的行

时间:2016-06-23 16:04:24

标签: mysql excel vba excel-vba macros

我在excel 2010中有一个电子表格,其中的宏根据另一个表(表2)的大小调整表(表1)的大小,因为它们应始终具有相同的行数。表2中的行数在montly基础上发生变化。只要表2添加行,此宏就可以正常工作。如果表2正在减去行,那么我最终得到表1中不需要的公式/数据。宏我正在使用:

Sub Table 1()
    Sheet3.Unprotect Password:="password"
        ThisWorkbook.Sheets("Sheet3").ListObjects("Table 1").Resize [range]
        Sheet3.Protect Password:="password"
    End Sub

有没有办法编写宏来删除这些无关的数据(当前表之后的所有数据/公式)?我知道手动删除它们很简单,但我希望保护包含表格的选项卡,并且只允许运行宏(也会受到保护),以避免随机的人弄乱这个工作表。任何建议都表示赞赏。

谢谢! 格雷厄姆

1 个答案:

答案 0 :(得分:0)

在调整大小之前计算行数,然后在调整大小之后计算行数。然后,如果您的表变小,请删除差异行。在我的示例中,我的表名为Table1,因此您需要进行一些编辑。试试下面的内容。

CRUTER example of short resizing table issue

Sub test()

Dim rowsBefore As Integer
Dim rowsAfter As Integer
Dim rowsExtra As Integer

'get num of rows before resize
rowsBefore = Range("Table1").Rows.Count

'resize table
ThisWorkbook.Sheets("Sheet3").ListObjects("Table 1").Resize [range]

'get num of rows after resize
rowsAfter = Range("Table1").Rows.Count

'get num of rows removed / added
rowsExtra = rowsBefore - rowsAfter

'remove data if positive / removed rows
If rowsExtra > 0 Then
    Range("Table1[testColumn]")(rowsAfter + 1).Select
    Range(ActiveCell.Address, ActiveCell.Offset(1 + rowsExtra).Address).EntireRow.Delete
End If

End Sub