На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
Друзья! С Днём Защитника Отечества!
msm.ru
! Организуем VBA-FAQ! Если у Вас есть предложения, выскажитесь здесь: Пишем FAQ, интересно Ваше мнение
Популярные разделы FAQ:    user posted image Общие вопросы    user posted image Особенности VBA-кода    user posted image Оптимизация VBA-кода    user posted image Полезные ссылки

1. Старайтесь при создании темы указывать в заголовке или теле сообщения название офисного приложения и (желательно при работе с Office 95/97/2000) его версию. Это значительно сократит количество промежуточных вопросов.
2. Формулируйте вопросы как можно конкретнее, вспоминая (хотя бы иногда) о правилах ВЕЛИКОГО И МОГУЧЕГО РУССКОГО ЯЗЫКА, и не забывая, что краткость - сестра таланта.
3. Не забывайте использовать теги [сode=vba] ...текст программы... [/code] для выделения текста программы подсветкой!
4. Темы с просьбой выполнить какую-либо работу полностью за автора здесь не обсуждаются и переносятся в раздел ПОМОЩЬ СТУДЕНТАМ.
Модераторы: Old Bat, MIF
  
> Ошибочные действия макроса при копировании и вставке данных
    Всем добрый день. Нужна помощь. есть организация у которой есть удаленные подразделения, которые направляют в организацию ежесуточно данные на 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
      Код содержит принципиальную ошибку. Вместо того, чтобы работать с именованными объектами Excel, он работает с визуальными объектами.

      Иными словами, надо получить ссылку на диапазон-источник (Set source = Workbooks("Книга-источник.XLSX").Worksheets("лист-источник").Range("Xm:Yn")), аналогично - на диапазон-приёмник, и выполнять копирование с использованием этих ссылок (source.Copy : destination.PasteSpecial). Тогда никаких описываемых проблем не будет возникать.

      Если какой-то из диапазонов выделяется вручную, то точно так же сперва получить на него ссылку (Set xxx = Selection.Range), и уже с этой ссылкой работать.
        Вы предлагаете явное обращение к диапазону ".Range("Xm:Yn")", а я использую именованные списки, так как количество подразделений может меняться и будет изменения в диапазонах вставки. Сейчас обрабатывается 15 файлов с четырьмя листами, на которых по 2-4 именованных диапазонов копирования. Все с этим кодом работают отлично, и только в одном файле один диапазон копируется с ошибкой, но при повторном запуске макроса он копируется правильно. Не могу поймать логику не правильного копирования, так как это происходит не всегда и не я провожу обработку.
          Цитата ifirewolf@yandex.ru @
          Вы предлагаете явное обращение к диапазону ".Range("Xm:Yn")", а я использую именованные списки,

          Какая разница? к именованному списку точно так же можно обращаться, получив на него ссылку в рамках объектной модели.
          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
          0 пользователей:


          Рейтинг@Mail.ru
          [ Script execution time: 0,0198 ]   [ 16 queries used ]   [ Generated: 22.02.24, 17:01 GMT ]