Sanja, Спасибо, я уже сам разобрался, в чем была ошибка. Надо было использовать GetObject(,"Excel.Application") Кстати, считаю, что эта ошибка очень поучительна, и вы все-таки, зря не дали другим ознакомиться с ней, перенеся тему туда , куда редко заглядывают.
Требуется, чтобы некий макрос книги запускался от ручной процедуры Data\RefreshAll . Понятно, что обратная задача, когда макрос запускает обновление, решается просто, но нужно именно так как спрашивается. Спасибо.
МатросНаЗебре написал: Вот вам ещё одно корявое решение, но без перебора листов.Создаёте именованный диапазон уровня книги. Тогда к ListObject можно обратиться так
Спасибо, буду знать.
Тогда пожалуй я остановлюсь на таком варианте
Код
Set lo=НайтиИПрисвоить( ИмяТаблицы)
, где ф-ция НайтиИПрисвоить ищет тот самый лист с таблицей.
Если я правильно понимаю, объект ListObject принадлежит объекту Worksheet. Поэтому он объявляется как Set lo=ws.ListObjects(loName) С другой стороны, каждый объект ListObject имеет уникальное имя в пределах одной книги, и вроде бы логичным напрашивается способ его объявления через объект Workbook. А то ведь что получается: если я знаю имя таблицы, которую хочу объявить, то мне приходится в цикле пробегать по всем листам книги, пока не натолкнусь на тот, который содержит нужное имя. Решение выглядит как то коряво.
Добрый день. Возникла задача последовательного запуска макросов из разных файлов. Сначала попробовал ее решить с помощью Application.Run, но потерпел неудачу, потому что после того, как первый из макросов завершал работу, процесс останавливался. Пришлось решать задачу с помощью скриптов VBS, где такой проблемы не возникало.
Вопрос такой: задачу принципиально нельзя решить с помощью Application.Run, или я просто чего то не так делаю?
Подробности: - Application.Run запускается в цикле For - действие макроса состоит в обновлении файла через RefreshAll и закрытии файла
Привет. Столкнулся со странным случаем. Хочу получить на странице экселя список файлов из некоторой директории. Пишу код let srs= Folder.Files( path ), rem= Table.RemoveColumns( srs, {"Content"} in rem Файлов в папке path немного, поэтому обновление в редакторе запросов идет почти мгновенно, сохраняю ссылку запроса на листе и обнаруживаю, что он начинает страшно тормозить - образно говоря, цедит по одному файлу. Наудачу, добавляю в запрос строчку let srs= Folder.Files( path ), rem= Table.RemoveColumns( srs, {"Content"}, out=Table.Skip(rem) in out - и все сразу начинает работать как положено - быстро. Причем это не зависит от того какую строку из таблицы удалять первую или последнюю - Table.RemoveLastN дает такой же результат.
Понятно, что дело не том, что из таблицы что-то удаляется, а просто в факте преобразования исходной таблицы ? У кого нибудь есть идеи, почему такое имеет место быть ? Спасибо
Интересуюсь в каком порядке выполняются запросы при команде Refresh All, если у запросов отключено фоновое выполнение. Предположим есть "Запрос 1", результат которого сохранен в таблице "Запрос_1" и есть "Запрос 2", который берет данные из таблицы "Запрос_1". Так вот, как сделать, чтобы команда Refresh All заставляла сначала выполнять "Запрос 1", затем обновлять таблицу "Запрос_1" и в конце выполнять "Запрос 2". Понятно, что задачу можно решить с помощью макроса, который будет запускать обновления в нужном порядке, но хотелось бы именно с помощью Refresh All.
Возможно. Только я там не вижу функции Table.ReorderColumns() и еще кое каких. Согласен, решение Артема на один шаг короче моего - он меняет только одну букву, а не две. Но предположим, что букв будет не три а четыре - тогда, что вы скажете ?
В конце должно остаться "В", а не "Е". А так конечно, такая замена и у меня есть. Меня смущает что даже в компатных записях, приведенных выше насчитывается порядка 7 преобразований.