Ctrl + A,格式为表格

时间:2014-04-19 19:18:00

标签: excel vba excel-vba

我在Excel中有一个3000行到50列的数据集,从A1开始。

我录制并编辑了一个模拟以下内容的宏: Ctrl + A ,格式如表:

Dim koosrange As Range
Set koosrange = ActiveSheet.UsedRange
koosrange.Select
ActiveSheet.QueryTables("aspectsClean_1").Delete
ActiveSheet.QueryTables("aspectsClean").Delete
ActiveSheet.ListObjects.Add(xlSrcRange, koosrange, , xlNo).Name = _
    "Table1"
Range("Table1[#All]").Select
ActiveSheet.ListObjects("Table1").TableStyle = "TableStyleLight1"
ActiveSheet.ListObjects("Table1").ShowTableStyleFirstColumn = True

整个计划由3部分组成:

  1. 从* .txt
  2. 导入数据
  3. 将项目名称连接到仅适用于Col A,并将所有其他数据移动到Col B中开始
  4. 将所有数据格式化为表格(以便可以对其进行过滤等)
  5. 运行程序时,ActiveSheet.ListObjects.Add(xlSrcRange, koosrange, , xlNo).Name = _ "Table1"上发生以下错误(上一代码摘录的第6行):

    错误:A table cannot overlap a range that contains a PivotTable report, query results, protected cells or another table

1 个答案:

答案 0 :(得分:0)

继续我的评论,如果您使用录音机录制导入>从文本文件中,它将使用的方法是添加连接到文本文件的可查询对象,然后刷新它。

根据某些情况 - 我并不完全熟悉在这种情况下正在运行的不同对象 - 如果创建它们,则必须删除连接对象和可查询对象。

E.g。我刚才做的录音:

With ActiveSheet.QueryTables.Add(Connection:= _
        "TEXT;{snipped path}", Destination:=Range("$A$1"))
        .Name = "new  2"
        '+some other properties churned out removed here for conciseness
        .Refresh BackgroundQuery:=False
End With

因此,请在End With

之前添加
    If Not ActiveWorkbook.Connections(.Name) Is Nothing Then
        ActiveWorkbook.Connections(.Name).Delete
    End If
    .Delete
End With