Попытка создать таблицу выдает ошибку 1004 после копирования и вставки - PullRequest
0 голосов
/ 20 марта 2019

У меня есть рабочая книга (A), которая вызывает другую (B), копирует значения из wb B и вставляет значения в wb A (нет таблицы, нет формул; только данные).

ActiveWorkbook.Sheets("Sheet1").Range("A1:F" & lonTempWBLastRow).Copy shtNewMonth.Range("A1") 

Затем я пытаюсь создать таблицу с:

Set NewMonthTable = wbPDRC.ListObjects.Add(xlSrcRange, Range("A1:F" & lonTempWBLastRow), , xlYes)

но получите ошибку 1004: таблица не может перекрывать диапазон, который содержит сводную таблицу, результаты запроса, защищенные ячейки или другую таблицу. Я удаляю именованный диапазон с листа, так что это не проблема именованного диапазона. Там нет сводки, результатов запроса, защищенных ячеек или таблицы. Я даже попытался запустить цикл при выводе из списка всех таблиц на листе, но цикл немедленно завершается, так как он не видит таблицу на листе. Я также попытался сначала запустить код таблицы на wb B, а затем перенести его в виде значений VS таблицы, но я получаю ту же ошибку на этом листе, пытаясь таким образом. Если я попытаюсь создать таблицу в Excel без VBA, диалоговое окно «Формат таблицы» останется на месте после нажатия «ОК» несколько раз. В wb B есть соединение, которое я удаляю с помощью кода перед передачей данных и после вставки в wb A проверило, что соединения там нет. Идеи?

Ответы [ 2 ]

0 голосов
/ 21 марта 2019

Чтобы сделать эту работу, мне нужно было создать поддельную пустую таблицу, как только лист был создан, а затем вставить в него данные.

0 голосов
/ 20 марта 2019

Я предполагаю, что проблема в том, что таблица уже существует, поэтому создавать новую не нормально.Попробуйте этот фрагмент кода, заменив «Table1» на имя вашей таблицы:

Option Explicit

Public Sub TestMe()

    Dim newTable As Object
    Dim someRange As Range

    With ThisWorkbook.Worksheets(1)
        Set someRange = .Range("A1:F" & 10)
        If Not TableExists("Table1", .Cells.Parent) Then
            Set newTable = .ListObjects.Add(xlSrcRange, someRange, , xlYes)
        End If
    End With

End Sub

Public Function TableExists(tableName As String, ws As Worksheet) As Boolean

    On Error GoTo TableExists_Error
    If ws.ListObjects(tableName).Name = vbNullString Then
    End If
    TableExists = True

    On Error GoTo 0
    Exit Function

TableExists_Error:
    TableExists = False

End Function

Или просто откройте новый файл Excel и запустите его.Диапазон A1:F10 будет отформатирован.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...