在excel定义的表格中删除后移动单元格

kt06eoxx  于 2023-05-30  发布在  其他
关注(0)|答案(2)|浏览(244)

我有一个问题,在Excel定义的表中移动单元格。当我有正常的数据时,只是在列标题上使用过滤器,这个函数工作正常:

If Not DeleteCells Is Nothing Then DeleteCells.Delete Shift:=xlShiftToLeft

DeleteCells是由整个工作表中要删除的单元格组成的范围。
现在我从电源查询下载数据,它变成了Excel定义的表,名称为Query1,现在当我打开删除宏时,它显示错误:

错误信息:这将不起作用,因为它将移动工作表中表格的单元格。
是否有方法恢复表的删除和移动功能?
数据看起来是这样的

假设包含数据的单元格需要清除,剩余的数据需要移动,以便保持数据的完整性,因此看起来如下所示

0yg35tkg

0yg35tkg1#

这可能是因为您试图删除移动会使表格变形的单元格。
例如,在下表中,假设我尝试删除单元格C5。

我会得到一个错误消息,因为在删除并向左移动后,表格会像下面的图像一样扭曲(这个截图是为了说明这一点而编辑的):

避免此问题的一种方法是删除整个列。

Range("C5").EntireColumn.Delete Shift:=xlShiftToLeft

这样,整个表将向左移动,这是允许的。

如果不能删除整列,则至少需要确保表中的所有单元格将被替换相同的量。例如,这也可以在我的示例中工作:

Range("C5:C7").Delete Shift:=xlShiftToLeft

如果您的工作表设置方式无法做到这一点,那么可以考虑将表格移动到其他地方,或者使用ClearContent或类似的方法来代替删除单元格。

huwehgph

huwehgph2#

好吧...我发现解决办法比我最初想的要简单。由于Excel表是一个ListObject,通过Power Query加载数据后,我只是写了一个简短的宏。取消列出表和我所有的功能,再次工作!

Code:
Sub ConvertTableToRange()
 
With ActiveSheet.ListObjects("Query1")
    .Unlist                           ' convert the table back to a range
End With

相关问题