Страницы: 1
RSS
VBA - подбор параметра для диапазона ячеек
 
Всем привет,  
 
Нужно подобрать параметр для ряда ячеек. Пишу:  
 
Sub Calc_1()  
'  
   Dim Cell As Range  
   For Each Cell In Selection  
   Range(Cells(Cell.Row + 21, Cell.Column)).GoalSeek Goal:=0, ChangingCell:=Range(Cells(Cell.Row, Cell.Column))  
   Next  
'  
End Sub  
 
Выдает ошибку 1004:    
Method 'Range' of object '_Global' failed  
 
Почему? Что исправить?
 
Код можно упростить:  
 
Sub Calc_1()  
'  
Dim Cell As Range  
For Each Cell In Selection  
Cell.Offset(21, 0).GoalSeek Goal:=0, ChangingCell:=Cell  
Next  
'  
End Sub  
 
А ошибка может быть потому, что ячейка, к которой применяется метод, не зависит от ячейки, указанной в ChangingCell.
 
{quote}{login=Казанский}{date=17.09.2010 04:02}{thema=}{post}Код можно упростить:  
 
Sub Calc_1()  
'  
Dim Cell As Range  
For Each Cell In Selection  
Cell.Offset(21, 0).GoalSeek Goal:=0, ChangingCell:=Cell  
Next  
'  
End Sub  
 
А ошибка может быть потому, что ячейка, к которой применяется метод, не зависит от ячейки, указанной в ChangingCell.{/post}{/quote}  
 
Ячейки зависят. Ошибка в коде. Это точно, потому что Ваш код - работает. Хотелось бы понять, в чем разница.  
 
А такой вариант:  
 
Sub Calc_4()  
'  
Dim Cell As Range  
For Each Cell In Selection  
Cells(Cell.Row + 21, Cell.Column).GoalSeek Goal:=0, ChangingCell:=Cells(Cell.Row, Cell.Column)  
Next  
'  
End Sub  
 
С предложенным:  
 
{quote}{login=The_Prist}{date=17.09.2010 03:51}{thema=}{post}  
 
Cells(Cell.Row + 21, Cell.Column).GoalSeek Goal:=0, ChangingCell:=Cells(Cell.Row, Cell.Column){/post}{/quote}  
 
Не работает вообще. Та же Error 1004, но с примечанием "неверная ссылка".
 
Беру свои слова обратно. Работает и так  
Sub Calc_1()  
'  
Dim Cell As Range  
For Each Cell In Selection  
Cell.Offset(21, 0).GoalSeek Goal:=0, ChangingCell:=Cell  
Next  
'  
End Sub  
 
и так  
 
Sub Calc_4()  
'  
Dim Cell As Range  
For Each Cell In Selection  
Cells(Cell.Row + 21, Cell.Column).GoalSeek Goal:=0, ChangingCell:=Cells(Cell.Row, Cell.Column)  
Next  
'  
End Sub  
 
не работает только мой вариант. Хотелось бы понять, почему, чтобы не делать таких ошибок впредь
 
{quote}{login=The_Prist}{date=17.09.2010 04:45}{thema=Re: }{post}{quote}{login=}{date=17.09.2010 04:43}{thema=}{post}не работает только мой вариант. Хотелось бы понять, почему, чтобы не делать таких ошибок впредь{/post}{/quote}Т.е. мой пост Вы не читали? Я ж написал там: у Вас неверное обращение к Range. Почитайте внимательно и поймете свою ошибку.{/post}{/quote}  
 
Я читала. Однако, автоматически сгенерированный код выглядит так:    
 
Range("C49").GoalSeek Goal:=0, ChangingCell:=Range("C27")  
 
Если мои глаза меня не обманывают, то в качестве аргументов Range здесь одна ячейка. Или есть разница в ссылках А1 и R1C1?
 
{quote}{login=The_Prist}{date=17.09.2010 04:43}{thema=Re: Re: }{post}Или мы должны тут полностью рабочий вариант выложить не видя Ваших данных?{/post}{/quote} Если бы мне был интересен этот вариант, то после ответа Казанского тему можно было бы не продолжать.
 
Разница в том, что здесь аргументом Range является строка, а у Вас - объект типа Range.  
Вот так - можно:  
Range(Cells(Cell.Row + 21, Cell.Column).Address).GoalSeek  
, но очень сложно.
 
Вы просто путаете понятия:)  
А1 и R1C1 - это действительно адресация, но Range Cells это различные объекты. Зайдите в на вкладку ссылки, там есть ссылка на сайт Первые шаги.  
Диапазон можно задать  
Range("B3:C4,E5:F6").Select  
или Range(Cells(3,"B"),cells(4,3)).select  
В общем для простоты - Range это диапазон, а Cells это ячейка.
 
М-да,  
Range(Cells(Cell.Row, Cell.Column).Address)  
 
это нечто :D Индусы завидуют :)
 
Спасибо @}->--
Страницы: 1
Читают тему
Наверх