Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.02.2013, 11:13   #1
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию ошибка "1004" в макросе при попытке обратиться к ячейке через метод End

Excel 2007 на Win XP.
На первом листе книги находится список, занимающий 7 столбцов.
В столбце "D" имена других листов (на деле - это номера домов).
Таким образом, в книге дополнительных листов, кроме первого, столько сколько есть разных имен в столбце "D" (немного).

В макросе требуется, сканируя столбец "D", копировать всю текущую строку на лист, имя которого соответствует значению в "D<номер тек.строки>"
Макрос выглядит так:
Код:
Sub Распределение()
  Dim oCell As Range
  
  For Each oCell In Worksheets("Лист1").Range("D2:D15")
    With Worksheets("Лист1")
      .Range(.Cells(oCell.Row, 2), .Cells(oCell.Row, 6)).Copy _
        Destination:=Worksheets(oCell.Text).Range("B1").End(xlDown).Offset(1, 0)
    End With
End Sub
Если оставить Range("B1") без последующего End, то копирование происходит успешно. Разумеется, это неправильно. При каждом копировании нужно найти последнюю пустую ячейку в столбце "B". Но при показанной конструкции происходит ошибка: "Application-defined or object-defined error".

Хотелось бы понять как эту ошибку избежать.

Книга с листами и макросом прилагается.
Вложения
Тип файла: zip xls.zip (14.9 Кб, 8 просмотров)
Прик вне форума Ответить с цитированием
Старый 16.02.2013, 11:53   #2
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Вы пытаетесь вставить в ячейку, которая находится после последней строки листа.
Код:
        Destination:=Worksheets(oCell.Text).Cells(Rows.Count, "B").End(xlUp).Offset(1, 0)
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 16.02.2013, 12:10   #3
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

Спасибо за поправку.
В этом варианте ошибки нет и ячейка позиционируется как требуется.

Но некоторое недоумение осталось. "Неправильная" конструкция взята с сайта микрософта:
Цитата:
18. Выбор пустой ячейки, расположенной ниже непрерывного столбца
Для выбора ячейки, расположенной ниже непрерывного диапазона, можно использовать приведенный ниже способ.
ActiveSheet.Range("a1").End(xlDown) .Offset(1,0).Select
Впрочем, изучение VBA только началось и "сколько нам открытий чудных..." предстоит.
Прик вне форума Ответить с цитированием
Старый 16.02.2013, 13:08   #4
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Метод End - это Ctrl+стрелка: xlDown - стрелка вниз, xlUp - стрелка вверх и т.д. Попробуйте:
Если заполнены ячейки А1,А2,А3 и т.д., то Ctrl+стрелка вниз ( Range("a1").End(xlDown) ) выделит последнюю из этих ячеек. А если ячейка А2 и весь остальной столбец пустой, то Ctrl+стрелка вниз выделит последню ячейку столбца.
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
при запуске макроса ошибка 1004"Невозможно получить свойство PivotTables класса Worksheet" martinezo Microsoft Office Excel 1 04.02.2013 14:27
Ошибка "1004 нельзя установить свойство xvalues класса series" Ogeris Microsoft Office Excel 2 17.01.2013 09:53
Ошибка:является "поле" но используется как "метод" hitman47IT Помощь студентам 0 22.11.2011 20:55
обратиться к функции через " switch case " B@R@B@$HK@ Общие вопросы C/C++ 4 09.06.2009 19:15
Ошибка при использовании OlePropertyGet("Documents").OleProcedure("Add") в C++ Builder AleksP C++ Builder 7 11.04.2009 13:06