Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[35.173.48.18] |
|
Сообщ.
#1
,
|
|
|
Всем добрый день. Нужна помощь. есть организация у которой есть удаленные подразделения, которые направляют в организацию ежесуточно данные на 8 утра и 8 вечера. Сведения направляются книгами Excel, состоящими из нескольких листов, у всех подразделений одинаковая форма книг. Разработал макрос который открывает файл нужного подразделения, копирует из него данные и вставляет в обобщенный файл формуемый на 8 утра или 8 вечера. Для определения области копирования и вставки использую именованные списки.
Проблема - код для всех подразделений одинаковый, но только в одном подразделении и только с одного листа книги иногда происходит ошибка. Копируемая область состоит из 2-х строк? но макрос вставляет только одну, хотя в копируемом файле заполнены обе строки. При повторном запуске макроса вставка происходит правильно. Что это, глюк Excel? Часть макроса вставки и копирования данных: Windows("ПЧ1.xlsm").Activate 'активация окна строевки ПЧ1 Application.Goto Sheets("ЧПО, ВПО, ДПО").Range("ВПО_ПЧ1_на_20ч") 'перейти (выделить) именованный диапазон ячеек ПЧ1 на 20 часов на листе "ЧПО, ВПО, ДПО" Selection.Copy 'копировать именованный диапазон ' Windows("Отряд.xlsm").Activate 'активация окна строевки отряда Application.Goto Sheets("ЧПО, ВПО, ДПО").Range("ВПО_ПЧ1_ОФПС") 'перейти (выделить) именованный диапазон ячеек ПЧ1 в файле отряда на листе "ЧПО, ВПО, ДПО" Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False 'в выделенный именованный диапазон вставить скопированную область из ПЧ1 |
Сообщ.
#2
,
|
|
|
Код содержит принципиальную ошибку. Вместо того, чтобы работать с именованными объектами Excel, он работает с визуальными объектами.
Иными словами, надо получить ссылку на диапазон-источник (Set source = Workbooks("Книга-источник.XLSX").Worksheets("лист-источник").Range("Xm:Yn")), аналогично - на диапазон-приёмник, и выполнять копирование с использованием этих ссылок (source.Copy : destination.PasteSpecial). Тогда никаких описываемых проблем не будет возникать. Если какой-то из диапазонов выделяется вручную, то точно так же сперва получить на него ссылку (Set xxx = Selection.Range), и уже с этой ссылкой работать. |
Сообщ.
#3
,
|
|
|
Вы предлагаете явное обращение к диапазону ".Range("Xm:Yn")", а я использую именованные списки, так как количество подразделений может меняться и будет изменения в диапазонах вставки. Сейчас обрабатывается 15 файлов с четырьмя листами, на которых по 2-4 именованных диапазонов копирования. Все с этим кодом работают отлично, и только в одном файле один диапазон копируется с ошибкой, но при повторном запуске макроса он копируется правильно. Не могу поймать логику не правильного копирования, так как это происходит не всегда и не я провожу обработку.
|
Сообщ.
#4
,
|
|
|
Цитата ifirewolf@yandex.ru @ Вы предлагаете явное обращение к диапазону ".Range("Xm:Yn")", а я использую именованные списки, Какая разница? к именованному списку точно так же можно обращаться, получив на него ссылку в рамках объектной модели. |