Страница: 1 |
Страница: 1 |
Вопрос: Application-defined or object-defined error
Добавлено: 26.08.04 20:57
Автор вопроса: Poli
Помогите, пожалйста исправить ошибку. Рунается на :
Range(Cells(g, 2), Cells(g, 3)).Copy Worksheets(1).Range(Cells(q, 5), Cells(q, 6))
Range(Cells(g, fc)).Copy Worksheets(1).Range(Cells(q, 7))
Копирую ячейки с одного листа(второго) в другой. Переменная g, q, fc - Integer. g = ActiveCell.Row Второго листа, For q = 3 To (w - a), где (w - a) - границы рассматриваемого диапазона в строка, fс - соответствующая колонка второго листа.
Ответы
Всего ответов: 13
Номер ответа: 1
Автор ответа:
danik
Вопросов: 2
Ответов: 2
Профиль | | #1
Добавлено: 26.08.04 21:32
попробуй что-то в этом роде
Sub two()
x = 1
q = 10
With Worksheets(1)
.Range(.Cells(x, 1), .Cells(x, 5)).Copy
End With
With Worksheets(2)
.Range(.Cells(q, 1), .Cells(q, 5)).Select
End With
Worksheets(2).Paste
Номер ответа: 2
Автор ответа:
Poli
Вопросов: 6
Ответов: 6
Профиль | | #2
Добавлено: 26.08.04 23:29
не помогает =(
Пишу x = ActiveCell.Row
For q = x To (w - a)
Worksheets(1).Select
Cells(q, 8).Select
R = ActiveCell.Value
Worksheets("кописорт".Select
Range(Cells(a, zc), Cells(w, zc)).Select
'MsgBox a
'MsgBox zc
'MsgBox w
'MsgBox zc
Set l = Range(Cells(a, zc), Cells(w, zc)).Find(What:=R, LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByColumns)
If Not (l Is Nothing) Then
l.Select
g = ActiveCell.Row
With Worksheets("кописорт"
.Range(.Cells(g, 2), .Cells(g, 3)).Copy
End With
With Worksheets(1)
.Range(.Cells(q, 5), .Cells(q, 6)).Select End With
Worksheets(1).Paste
With Worksheets("кописорт"
.Range(.Cells(g, fc)).Copy
End With
With Worksheets(1)
.Range(.Cells(q, 7)).Select
End With
Worksheets(1).Paste
End If
Next
Пишет мне ошибку "Метод Select из класса Range завершен не верно" на строке .Range(.Cells(q, 5), .Cells(q, 6)).Select
а на строке .Range(.Cells(g, fc)).Copy первая ошибка
Номер ответа: 3
Автор ответа:
danik
Вопросов: 2
Ответов: 2
Профиль | | #3
Добавлено: 27.08.04 11:09
опиши словами условие задачи и что надо сделать.
так легче будет понять.
Номер ответа: 4
Автор ответа:
mc-black
ICQ: 308-534-060
Вопросов: 20
Ответов: 1860
Web-сайт:
Профиль | | #4
Добавлено: 27.08.04 17:25
Если тебе надо копировать только значения (а не форматы, формулы, примечания и т.д.), то делай в цикле что-то типа
ThisWorkbook.Sheets("Лист1".Cells(i,j).Value = ThisWorkbook.Sheets("Лист2".Cells(i+m,j-n).Value
Работать так будет быстрее! А еще быстрее, если перед запуском выключаются автоматические вычисления Excel, а по окончании вычисления включаются:
Application.Calculation = xlCalculationManual
...
...
Application.Calculation = xlCalculationAutomatic, а то при каждом твоем шаге он будет пересчитывать суммы, средние и т.п. - все зависимые ячейки..
Номер ответа: 5
Автор ответа:
Dimakart
Вопросов: 2
Ответов: 12
Профиль | | #5
Добавлено: 27.08.04 18:49
Да действительно описать бы словами задачу. Я подозреваю что реализовать это можно намного проще.
Номер ответа: 6
Автор ответа:
Poli
Вопросов: 6
Ответов: 6
Профиль | | #6
Добавлено: 29.08.04 15:05
Условие изначально такое. Берется активная книга. В ней 3 листа. На 3-ем листе я нахожу необходимый для обработки диапазон, ссответственно номера всех начальных и конечных ячеек через Сeels(i,j). На первом листе у меня есть точно такой же по колличеству столбцов диапазон. В нем есть столбец со значениями как и на третьем листе, но в другом порядке. Мне надо взять значение с первого листа, найти в третьем и из соответствующей строки, где находится найденное значение, скопировать 2 соответствующих столбца. Их координаты тоже найдены. И так весь столбец. Изначально я хотела сделать это как описано выше. Но меня попросили теперь написать через формулу ПРОСМОТР. Здесь столкнулась с той же ошибкой. И проблемма в том, что у меня все значения ячеек выделены не через обсолютные адреса, а через Cells(a,fa) и эти a,fa находятся в самом начале. Можно ли через формулу выразить это с помощью объявления ячеек через R1C1, тогда меня интересует синтаксис
Номер ответа: 7
Автор ответа:
Poli
Вопросов: 6
Ответов: 6
Профиль | | #7
Добавлено: 29.08.04 20:11
Ругается вот на такую строчку
Range(Cells(q, 7)).FormulaR1C1 = "=LOOKUP(R" & q & "C8;'copysort'!R" & a & "C" & zc & ":R" & w & "C" & zc & ";'copysort'!R" & a & "C" & fc & ":R" & w & "C" & fc & ""
Номер ответа: 8
Автор ответа:
Poli
Вопросов: 6
Ответов: 6
Профиль | | #8
Добавлено: 29.08.04 20:30
На такой вариант не ругается
ActiveCell.FormulaR1C1 = "=LOOKUP(RC8,'copysort'!R11C8:R75C8,'copysort'!R11C7:R75C7)"
А вот как мне вместо числ поставить найденные параметры диапазона???
Номер ответа: 9
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #9
Добавлено: 29.08.04 21:31
.Range(.Cells(q, 5), .Cells(q, 6)).Select End With
А это не опечатка?
Может так?
.Range(.Cells(q, 5), .Cells(q, 6)).Select
End With
Номер ответа: 10
Автор ответа:
Dimakart
Вопросов: 2
Ответов: 12
Профиль | | #10
Добавлено: 29.08.04 22:52
У меня вот так перестало ругаться и пошло.
Cells(q, 5).FormulaR1C1 = "=LOOKUP(R" & q & "C8,'copysort'!R" _
& a & "C" & zc & ":R" & w & "C" & zc & ",'copysort'!R" _
& a & "C" & fc & ":R" & w & "C" & fc & ""
Номер ответа: 11
Автор ответа:
Dimakart
Вопросов: 2
Ответов: 12
Профиль | | #11
Добавлено: 29.08.04 23:10
запятая перед кописортом вместо точки с запятой
Номер ответа: 12
Автор ответа:
Dimakart
Вопросов: 2
Ответов: 12
Профиль | | #12
Добавлено: 29.08.04 23:25
И если указывается одна ячейка Cells(q, 7) , то зачем Range(Cells(q, 7))
Номер ответа: 13
Автор ответа:
Poli
Вопросов: 6
Ответов: 6
Профиль | | #13
Добавлено: 29.08.04 23:26
Спасибо большущее!!! Все заработало