powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Копирование несмежного диапазона
18 сообщений из 18, страница 1 из 1
Копирование несмежного диапазона
    #39087534
Макрос)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день, помогите сделать правильное копирование с одного листа на другой.
Код: vbnet
1.
2.
3.
4.
5.
Set r1 = Range(Cells(10, 1), Cells(9 + lr, 1))
Set r2 = Range(Cells(25 + lr, 1), Cells(24 + lr + q, 1))
Set r3 = Range(Cells(40 + lr + q, 1), Cells(39 + lr + q + w, 1))
Union(r1, r2, r3).Copy
Sheets(2).Cells(1, 1).Paste


Вылетает такая ошибка и выделяется последняя строка
Object doesn't support this property or method
...
Рейтинг: 0 / 0
Копирование несмежного диапазона
    #39087587
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сначала попробуй выполнить такое копирование хотя бы руками...
...
Рейтинг: 0 / 0
Копирование несмежного диапазона
    #39087607
Макрос)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
До вставки все работает нормально, при запуске выделяет нужный мне диапазон и копирует, руками открываю второй лист и все нормально вставляется, а вот чтобы вставлялось автоматически не получается.
Есть еще и небольшая проблема, каждый второй запуск выходит ошибка 1004
Method 'Cells' of object '_Global' failed и выделяется первая строка. Как поправить такое дело?
...
Рейтинг: 0 / 0
Копирование несмежного диапазона
    #39087641
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Макрос)руками открываю второй лист и все нормально вставляется, а вот чтобы вставлялось автоматически не получается.
Ну так запишите это действие макрорекордером.

Макрос)каждый второй запуск выходит ошибка 1004
Method 'Cells' of object '_Global' failed и выделяется первая строка. Как поправить такое дело?
Ну, наверное, никогда не ориентироваться на ActiveSheet и указывать лист явно.
...
Рейтинг: 0 / 0
Копирование несмежного диапазона
    #39087780
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У Cells нет метода Paste. Он относится к листу. Поэтому правильно будет так:
Код: vbnet
1.
2.
Union(r1, r2, r3).Copy
Sheets(2).Cells(1, 1).PasteSpecial xlPasteAll
...
Рейтинг: 0 / 0
Копирование несмежного диапазона
    #39087792
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще проще одной строкой:
Код: vbnet
1.
Union(r1, r2, r3).Copy Sheets(2).Cells(1, 1)


Первые строки кода не должны вроде как вызывать ошибок. По крайней мере именно в таком виде. Возможно, у Вас написано не так, а нечто вроде:
Код: vbnet
1.
Set r1 = Sheets(2).Range(Cells(10, 1), Cells(9 + lr, 1))

Тогда получите ошибку, если запустите код не со второго листа или из модуля другого листа.
Подробнее: Как обратиться к диапазону из VBA
...
Рейтинг: 0 / 0
Копирование несмежного диапазона
    #39087802
Макрос)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Копирование работает, но ошибка все равно появляется каждый второй раз.
...
Рейтинг: 0 / 0
Копирование несмежного диапазона
    #39087813
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лист указывайте ЯВНО.
...
Рейтинг: 0 / 0
Копирование несмежного диапазона
    #39087818
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Макрос),

Приложите файл с полным кодом. Явно что-то не так происходит ДО присвоения значения диапазону.
...
Рейтинг: 0 / 0
Копирование несмежного диапазона
    #39087835
Макрос)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
До происходит вставка из Access 3 recordset после которых стоит rs.close, затем нужно скопировать 1 столбцы 3 таблиц, выделение происходит как представлено выше, добавил Вашу строчку копирование заработало при переносе кода в excel появилась другая ошибка так же при втором запуске.
Нахождение кода макроса не принципиально можно оставить и в excel из access просто сделаю run, так наверное даже лучше будет
...
Рейтинг: 0 / 0
Копирование несмежного диапазона
    #39087838
Макрос)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Файлик забыл
...
Рейтинг: 0 / 0
Копирование несмежного диапазона
    #39087843
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Макрос)Нахождение кода макроса не принципиальноДа? Ну это Вам. Программе может быть очень принципиально.
В общем так: код с виду рабочий. Не хотите предоставлять файл и описывать пошагово что делается для появления ошибки - боритесь сами. Т.к. изначально про Access упоминания вообще не было. Если из Access к Excel обращаетесь, то обязательно указывать еще и само приложение Excel, прежде чем обращаться к его Range.
...
Рейтинг: 0 / 0
Копирование несмежного диапазона
    #39087845
Макрос)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Интересно почему в excel это не вызывает никаких ошибок, а в Access они появляются.
Код: vbnet
1.
2.
3.
4.
Set r1 = Sheets(1).Range(Sheets(1).Cells(10, 1), Sheets(1).Cells(9 + lr, 1))
Set r2 = Sheets(1).Range(Sheets(1).Cells(25 + lr, 1), Sheets(1).Cells(24 + lr + q, 1))
Set r3 = Sheets(1).Range(Sheets(1).Cells(40 + lr + q, 1), Sheets(1).Cells(39 + lr + q + w, 1))
Union(r1, r2, r3).Copy Sheets(2).Cells(1, 1)
...
Рейтинг: 0 / 0
Копирование несмежного диапазона
    #39087850
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Макрос),

Конкретно в приложенном файле ошибка может возникать при запуске со второго листа. Т.к. копируемая и вставляемые области пересекаются. Плюс объявление переменных у Вас неправильное. Вполне рабочий вариант при запуске с любого листа будет таким:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Sub new1()
Dim lr As Long, q As Long, w As Long
Dim r1 As Range, r2 As Range, r3 As Range
lr = 5
q = 2
w = 12
With Sheets(1)
    Set r1 = .Range(.Cells(10, 1), .Cells(9 + lr, 1))
    Set r2 = .Range(.Cells(25 + lr, 1), .Cells(24 + lr + q, 1))
    Set r3 = .Range(.Cells(40 + lr + q, 1), .Cells(39 + lr + q + w, 1))
End With
Union(r1, r2, r3).Copy Sheets(2).Cells(1, 1)

End Sub


Кстати, если бы послушали Akina сразу - то проблема бы ушла, т.к. в данном случае указание листа сильно влияет на выполнение кода, если его запуск может происходить с листа, на который надо перенести данные.
...
Рейтинг: 0 / 0
Копирование несмежного диапазона
    #39087929
Макрос)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за помощь, но все равно не понятно почему в Access выходит ошибка при выполнение этого кода.
...
Рейтинг: 0 / 0
Копирование несмежного диапазона
    #39087959
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Макрос)не понятно почему в Access выходит ошибка при выполнение этого кода.
При работе из Access нужно СТРОГО описывать ВЕСЬ путь до объекта.
Не может быть Cells без ссылки на конкретный Worksheet, Worksheet - без ссылки на конкретный Workbook. А про понятия ActeveCell, ActiveSheet и ThisWorkbook вообще забудьте.
Не экономьте объектные переменные.
...
Рейтинг: 0 / 0
Копирование несмежного диапазона
    #39087960
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Макрос)Спасибо за помощь, но все равно не понятно почему в Access выходит ошибка при выполнение этого кода.вам же уже ответили, что в Аксессе нет объекта Sheets, он не знает, что это такое.
Sheets есть у книги, поэтому перед Sheets необходимо ставить ссылку на книгу.
...
Рейтинг: 0 / 0
Копирование несмежного диапазона
    #39087966
Макрос)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, что то я не увидел в первый раз объяснений, теперь стало все понятно.
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Копирование несмежного диапазона
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]