Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 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
У меня вот так работает

Sub Макрос1()
Dim ss As Range
    Set ss = Range("C1:C10";)
    ss.Calculate
End Sub

Ответить

Номер ответа: 2
Автор ответа:
 Pavel



Вопросов: 0
Ответов: 36
 Профиль | | #2 Добавлено: 22.01.08 12:15
И вот так тоже работает

Sub Макрос1()
    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-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #4
Добавлено: 22.01.08 12:59
Это потому, что ты используешь нигде не объявленные и никак не заданные объекты

Все работает, например вот так:
Sub Test()
    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-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #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 не надо использывать. Это замедляет работу макрос.

Попробуйте запустить этот код на другом компьютере

Sub Test()
    Range("H10:H10";).Calculate
End Sub

Ответить

Номер ответа: 10
Автор ответа:
 Pavel



Вопросов: 0
Ответов: 36
 Профиль | | #10 Добавлено: 22.01.08 14:00
Точнее просто

Sub Test()
    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 (чтоб как у "нормальных людей";) ?

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам