Создание таблицы с использованием диапазона, импортированного из текстового файла - PullRequest
2 голосов
/ 04 февраля 2020

Я импортирую текстовый файл в Excel, а затем пытаюсь превратить этот диапазон в таблицу.

Когда вы пытаетесь создать таблицу вручную, вы получаете приглашение:

Ваш выбор перекрывает один или несколько внешних диапазонов данных. Вы хотите преобразовать выделение в таблицу и удалить все внешние соединения?

Если вы выберете Да, это сработает.

Если вы попытаетесь удалить именованный диапазон из диспетчера имен , затем, когда вы получаете окно выбора диапазона и нажимаете OK, ничего не происходит, ошибок нет, поле не go, ничего не происходит вообще. Удаление соединений также не исправляет это, но, по-видимому, именно именованный диапазон и является причиной его возникновения.

При попытке создать таблицу с помощью кода вы получите:

ошибка 1004 : Таблица не может перекрывать диапазон, который содержит отчет сводной таблицы, результаты запроса, защищенные ячейки или другую таблицу.

Sub TestNameConnDelete()
    Dim item As Variant
    For Each item In ActiveWorkbook.names
        item.Delete
    Next item

    For Each item In ActiveWorkbook.Connections
        item.Delete
    Next item
End Sub

Sub TestTableCreate()
    Dim lastrow As Long
    Dim lastcol As Long

    With ActiveSheet
        lastrow = .Cells(.rows.count, 1).End(xlUp).row
        lastcol = .Cells(1, .Columns.count).End(xlToLeft).Column

        .Range(.Cells(1, 1), .Cells(lastrow, lastcol)).Locked = False
        .ListObjects.Add xlSrcRange, .Range(.Cells(1, 1), .Cells(lastrow, lastcol)), , xlYes
    End With
End Sub

Единственное решение, которое я нашел, - это скопировать все это на другой лист как значения и составьте таблицу там. Я пробовал несколько текстовых файлов, и все они вызывают проблему.

1 Ответ

2 голосов
/ 04 февраля 2020

Похоже, вам нужно работать с QueryTable, что-то вроде

ActiveSheet.QueryTables(1).Delete

Возможно, полезный фрагмент из QueryTable.ListObject документация:

Если вы импортируете данные с помощью пользовательского интерфейса, данные из веб-запроса или текстового запроса импортируются как объект QueryTable, а все остальные внешние данные импортируются как ListObject object.

Если вы импортируете данные с использованием объектной модели, данные из веб-запроса или текстового запроса должны быть импортированы как QueryTable, тогда как все остальные внешние данные могут быть импортированы как ListObject или QueryTable.

Так что для текстовых запросов кажется, что вы застряли на удалении QueryTable, а затем на создании ListObject, как вы это делаете в настоящее время.

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