Страницы: 1
RSS
Синтаксис Range при обращении с столбцам "умной таблицы"
 
Есть умная таблица, в ней с десяток столбцов. Задача скопировать несколько столбцов в другой файл
       
Код
Windows(istochnik).Activate
        Range("Таблица1[Параметр1]").Select
        Selection.Copy
        Windows("Файл2.xlsx").Activate
        Cells(rowEmptyIndex, 5).Select
        ActiveSheet.Paste
 
Для копирования следующего столбца приходится повторять код заново. Как в одной строке с выделением диапазона
для копирования указать несколько столбцов "умной таблицы"?
Например, Range("Таблица1[Параметр1],[Параметр2]").Select.
Не могу найти синтаксис при обращении к умным таблицам. Может это невозможно?
Изменено: romkan - 01.04.2020 22:59:42 (Добавил файлы)
 
возможно
прикрепляйте файл, опишите какие столбцы скопировать
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
romkan написал: Не могу найти синтаксис при обращении к умным таблицам.
Зачем Вам эта головомойка?  Работайте с диапазонами.
 
Цитата
Не могу найти синтаксис при обращении к умным таблицам
Изучайте
https://www.thespreadsheetguru.com/blog/2014/6/20/the-vba-guide-to-listobject-excel-tables
 
Цитата
Ігор Гончаренко написал:
возможноприкрепляйте файл, опишите какие столбцы скопировать
Прикрепил файлы. Из файла Од_паспорт.xls несколько столбцов нужно скопировать в определенные столбцы файл2.xlsx
 
Код
Sub sdf()
    Excel.Range("ОД_паспорт.xls!ТаблицаТС") _
        .ListObject _
        .ListColumns("Параметр") _
        .DataBodyRange.Copy
    With Excel.Range("Файл2.xlsx!ТаблицаТМ") _
        .ListObject _
        .ListColumns("Параметр") _
        .DataBodyRange
        
        .Cells(.Count + 1).PasteSpecial
        
    End With
End Sub
Изменено: Андрей Лящук - 02.04.2020 07:41:36
 
Цитата
romkan написал:
несколько столбцов
отличное описание! конкретнее и не скажешь...
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
romkan,
Цитата
Kuzmich: Изучайте
пожалуй, самый полный полный гайд по обращению к "умным" таблицам через VBA
Давно висит в закладках  :idea:
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Ігор Гончаренко написал:
отличное описание! конкретнее и не скажешь..
Благодарю за помощь )))
Любые 2 столбца одной таблицы первого файла, в любые 2 столбца другой таблицы второго файла. Простая задача для профи, коим, я, к сожалению, не являюсь
 
Цитата
Андрей Лящук написал:
Excel.Range("ОД_паспорт.xls!ТаблицаТС")
Ошибка выдаётся на With, первый оператор обрабатывается и диапазон выделяется и копируется
Цитата
Run-time Error 1004
Method Range of Object Global failed
что неправильно задаю?

Здесь этот файл будет меняться, поэтому хотелось бы его задавать при старте процедуры через Inbox, поэтому следующий вопрос как через переменную обратиться. Нужно задать переменную как что? И как она через Inbox пройдёт?
Excel.Range("ОД_паспорт.xls!ТаблицаТС")
Изменено: romkan - 02.04.2020 17:26:59
 
1 файл должен быть открыт в том же процессе Excel, из которого выполняется код
2 имена файлов, таблиц и столбцов, естественно, должны совпадать с прописанными в коде

у вас в одном файле столбец
Код
МЭК адрес на контроллере
в другом файле
Код
МЭК адрес на
контроллере


Код
Sub sdf()
    Dim ТаблицаТС As ListObject, ТаблицаТМ As ListObject
    Set ТаблицаТС = Application.InputBox("Выберите ячейку в таблице ТаблицаТС", Type:=8).ListObject
    Set ТаблицаТМ = Application.InputBox("Выберите ячейку в таблице ТаблицаТМ", Type:=8).ListObject
    For Each map In Array( _
                          Array("Параметр"), _
                          Array("Присоединение"), _
                          Array("МЭК адрес на контроллере", _
                                "МЭК адрес на" & vbLf & "контроллере") _
                          )
        
        ТаблицаТС.ListColumns(map(0)).DataBodyRange.Copy
        With ТаблицаТМ.ListColumns(map(UBound(map))).DataBodyRange
            If RowCount = 0 Then RowCount = .Count + 1
            .Cells(RowCount).PasteSpecial
        End With
    Next    
End Sub
Изменено: Андрей Лящук - 02.04.2020 16:30:45
 
Ничего не получается, сделал по другому, не оптимально, конечно, не все задумки реализовал. Но сейчас при помощи VBA значительно упростил задачу, сейчас время поджимает, надо уже завершить работу. Потом время появится, сяду и поразбираюсь в спокойном ритме.

Цитата
Андрей Лящук написал:
Set ТаблицаТС = Application.InputBox("Выберите ячейку в таблице ТаблицаТС", Type:=8).ListObject
Здесь для выбора ячейки вызывается файл из которого видимо запускается макрос и нет возможности выбрать другой файл. Файл источника будет меняться постоянно. Задача из кучи типовых файлов заполнить один, копируя определенные столбцы
Цитата
Андрей Лящук написал:
МЭК адрес наконтроллере
Я проверял со столбцом "Присоединение", а заголовок "МЭК адрес...", правлю при открытии файла источника

Всем спасибо.
Изменено: romkan - 04.04.2020 11:11:27
Страницы: 1
Наверх