Страница: 1 | 2 |
Вопрос: Пересчет ячеек Excel
Добавлено: 22.01.08 10:46
Автор вопроса: Jasmin
Здравствуйте!
Возникла такая проблема.
В VBA есть функция пересчета всей книги (ActiveWorkbook.Calculate), пересчета определенного листа (ActiveSheet.Calculate).
Как пересчитать определенные ячейки на листе НЕ пересчитывая лист в целом ?
В Help написано: для пересчета определенных ячеек используйте Worksheets(1).Rows(2).Calculate.
Попробовала, выдает ошибку 1004 "Calculate method of Range class failed".
Попробовала так:
Range("E10:F10").Select
Set ss = Selection
For Each cl In Selection.Cells
cl.Select
cl.Calculate
Next cl
ss.Select
Ругается на cl.Calculate. Ошибка та же.
Как тогда пересчитать только выделенный диапазон ячеек ?
Спасибо за помощь.
Ответы
Всего ответов: 22
Номер ответа: 1
Автор ответа:
Pavel
Вопросов: 0
Ответов: 36
Профиль | | #1
Добавлено: 22.01.08 12:12
У меня вот так работает
Dim ss As Range
Set ss = Range("C1:C10"
ss.Calculate
End Sub
Номер ответа: 2
Автор ответа:
Pavel
Вопросов: 0
Ответов: 36
Профиль | | #2
Добавлено: 22.01.08 12:15
И вот так тоже работает
Rows(11).Calculate
End Sub
Номер ответа: 3
Автор ответа:
Jasmin
Вопросов: 23
Ответов: 417
Профиль | | #3
Добавлено: 22.01.08 12:33
Пробовала оба варианта. Ругается на Calculate
Я пишу процедуру в персональной книге. Пересчет листа запросто. А ячейки - ошибка 1004.
Номер ответа: 4
Автор ответа:
mc-black
ICQ: 308-534-060
Вопросов: 20
Ответов: 1860
Web-сайт:
Профиль | | #4
Добавлено: 22.01.08 12:59
Это потому, что ты используешь нигде не объявленные и никак не заданные объекты
Все работает, например вот так:
Range("A1:C3".Select
Selection.Calculate
End Sub
Номер ответа: 5
Автор ответа:
Jasmin
Вопросов: 23
Ответов: 417
Профиль | | #5
Добавлено: 22.01.08 13:18
Скопировала один в один пример. Поменяла только диапазон. Не работает. Ошибка - 1004
У меня Excel 2003. Может в этом проблема ? (Не бейте за глупости).
Номер ответа: 6
Автор ответа:
Jasmin
Вопросов: 23
Ответов: 417
Профиль | | #6
Добавлено: 22.01.08 13:19
Может в библиотеке метода такого нет ?
Номер ответа: 7
Автор ответа:
mc-black
ICQ: 308-534-060
Вопросов: 20
Ответов: 1860
Web-сайт:
Профиль | | #7
Добавлено: 22.01.08 13:29
Какой у вас диапазон??? И что в диапазоне находится (в смысле, есть ли внутри диапазона объединённые ячейки?) Код в студию.
P.S. У меня тоже Excel из Office 2003
Номер ответа: 8
Автор ответа:
Jasmin
Вопросов: 23
Ответов: 417
Профиль | | #8
Добавлено: 22.01.08 13:54
Объединенных ячеек нет.
Пустая книга.
На первом листе в E7=2, E8=2, E10=E7+E8. Также в H7=2, H8=1, H10=H7+H8.
Автопересчет выключен. Нужно пересчитать только ячейку H10.
В модуле пишу:
Sub Test()
Range("H10:H10".Select
Selection.Calculate
End Sub
Пробую. На выделенной строке останавливается и Ошибка 1004.
Номер ответа: 9
Автор ответа:
Pavel
Вопросов: 0
Ответов: 36
Профиль | | #9
Добавлено: 22.01.08 13:59
Метод Select не надо использывать. Это замедляет работу макрос.
Попробуйте запустить этот код на другом компьютере
Range("H10:H10".Calculate
End Sub
Номер ответа: 10
Автор ответа:
Pavel
Вопросов: 0
Ответов: 36
Профиль | | #10
Добавлено: 22.01.08 14:00
Точнее просто
Range("H10".Calculate
End Sub
Номер ответа: 11
Автор ответа:
Jasmin
Вопросов: 23
Ответов: 417
Профиль | | #11
Добавлено: 22.01.08 14:13
Sub Test()
Range("H10".Calculate
End Sub
На этом компе не получается. Ну не нравиться ему Calculate. Сейчас попробую на другом.
Номер ответа: 12
Автор ответа:
Jasmin
Вопросов: 23
Ответов: 417
Профиль | | #12
Добавлено: 22.01.08 14:17
На другом компе тоже не выходит. "1004 Метод завершен неверно"
Номер ответа: 13
Автор ответа:
Pavel
Вопросов: 0
Ответов: 36
Профиль | | #13
Добавлено: 22.01.08 14:31
А у вас в редакторе VBE (ALT+F11) какие библиотеки подключены (Tools-References...)
У меня такие:
1) Visual Basic for Application
2) Microsoft Excel 11.0 Object Library
3) OLE Automation
4) Microsoft Office 11.0 Object Library
Проверьте их наличие у себя. Ну, наверное, кроме третьей
Номер ответа: 14
Автор ответа:
Jasmin
Вопросов: 23
Ответов: 417
Профиль | | #14
Добавлено: 22.01.08 14:37
Аналогично. И даже в том же порядке.
В инете нашла
"You can set a cell's Formula to be it's formula. This forces a recalculate. Sounds wierd I know.
So do Range("a1".formula = range("a1".formula
You could run into problems if a cell has an array formula in it , but you can check for this (using r.hasArray) and use Range("a1".formulaArray=Range("a1".formulaArray on the cell instead."
Попробовала. Опять ничего.
Номер ответа: 15
Автор ответа:
Jasmin
Вопросов: 23
Ответов: 417
Профиль | | #15
Добавлено: 22.01.08 14:50
Вот случайно получилось.
Sub Test()
Range("H10".Formula = Range("H10".Formula End Sub
Только не пойму причем здесь занесение Formula в свойства ячейки как Formula. И остается открытым вопрос про Calculate (чтоб как у "нормальных людей" ?