Страницы: 1
RSS
Макрос цикла (подбор параметра каждой ячейки в диапозоне)
 
День добрый.  
 
Если есть пара минут, подскажите в чем ошибка в написании макроса - никак не могу понять логику и/или синтаксис VBA:  
 
Sub Макрос2()  
'  
   Dim Stavka As Range  
   Dim Itogo As Range  
   Dim Perechen_stavka As Range  
   Dim Perechen_itogo As Range  
   ' присваиваем тип переменных - все переменные типа "ячека"  
   Perechen_stavka = Range("A6:A89")  
   Perechen_itogo = Range("H6:H89")  
   Itogo = Range("H6")  
   Stavka = Range("A6")  
   ' присваиваем каждой переменной значение или диапозон  
       For Each Itogo In Perechen_itogo  
           Range(Perechen_stavka(0)).GoalSeek Goal:=0, ChangingCell:=Range(Perechen_itogo(0))  
       Exit For  
   Next  
   ' цикл -> обход каждой ячейки в диапозоне, начиная с первого значения (0 или "A6") и запуск "подбора параметра"  
End Sub  
 
Суть того, что хочу сделать проста - есть диапозон ячеек, обходя каждую из них в цикле хочу запустить подбор параметра.
 
Если переменные типа Range, то так  
Perechen_stavka = Range("A6:A89") нельзя, надо  
Set Perechen_stavka = Range("A6:A89")  
 
 
с остальным не разбирался
 
Спасибо.  
 
Нашел еще одну свою ошибку в методе GoalSeek:  
 
Sub Макрос2()  
'  
   Dim Stavka As Range  
   Dim Itogo As Range  
   Dim Perechen_stavka As Range  
   Dim Perechen_itogo As Range  
   ' присваиваем тип переменных - все переменные типа "ячейка"  
   Set Perechen_stavka = Range("A6:A89")  
   Set Perechen_itogo = Range("H6:H89")  
   ' присваиваем каждой переменной диапозон, который нужно обойти  
       For Each Itogo In Perechen_itogo  
           Range(Itogo).GoalSeek Goal:=0, ChangingCell:=Range(Stavka)  
       Exit For  
   Next  
   ' цикл -> обход каждой ячейки в диапозоне и запуск "подбора параметра"  
End Sub  
 
Но, при запуске, вылетает с ошибкой:    
Method 'Range' of object '_Global' failed
 
Почему Dim Itogo As Range?  
Ведь это элемент диапазона.
 
Т.е. надо:  
Dim Itogo As Cell?  
 
Нет, бред какой-то пишу... нет такого типа переменной как Cell... логику того, что надо написать понимаю, но как написать - не понимаю...
 
Set Perechen_stavka = Range("A6:A89")  
Где это в дальнейшем используется?  
 
Range(Itogo)...  
Itogo - это уже диапазон, и получается "масло масляное"...  
 
Range(Stavka) - где переменной Stavka присвоено значение?  
 
Для проверки правильности просто переберите циклом ячейки в диапазоне с их выделением.
 
Вот код для общего случая - прогоните его по F8:  
Sub Test()  
Dim Rng As Range, rCell As Range  
   Set Rng = Range("A1:A10")  
   For Each rCell In Rng  
       rCell.Activate  
   Next  
End Sub  
На каждом шаге цикла будет активироваться очередная ячейка. Когда убедитесь, что Ваш диапазон перебирается правильно, вместо активации ячейки, делайте с ней что нужно.
 
{quote}{login=Юрий М}{date=10.07.2012 02:10}{thema=}{post}Set Perechen_stavka = Range("A6:A89")  
Где это в дальнейшем используется?  
 
Range(Itogo)...  
Itogo - это уже диапазон, и получается "масло масляное"...  
 
Range(Stavka) - где переменной Stavka присвоено значение?  
 
Для проверки правильности просто переберите циклом ячейки в диапазоне с их выделением.{/post}{/quote}  
 
Юрий, помогите с логикой:  
1. Объявляю переменные;  
2. Присваиваю переменным конкретный диапозон;  
3. Запускаю цикл обхода каждой ячейки в диапозоне и запуска "подбор параметра"  
 
...где я туплю? где ошибка в логике?  
 
 
Sub Макрос2()  
'  
   Dim Perechen_stavka As Range  
   Dim Perechen_itogo As Range  
   ' присваиваем двум переменным тип диапозон  
   Dim Stavka As Variant  
   Dim Itogo As Variant  
   ' присваиваем двум переменным тип variant  
   Set Perechen_stavka = Range("A6:A89")  
   Set Perechen_itogo = Range("H6:H89")  
   ' присваиваем каждой переменной конкретный диапозон  
   Set Stavka = Range("A6")  
   Set Itogo = Range("H6")  
   ' присваиваем каждой переменной начальное значение - не уверен, что это надо делать честно говоря...  
       For Each Perechen_itogo In Perechen_itogo  
           Range(Perechen_itogo).GoalSeek Goal:=0, ChangingCell:=Range(Perechen_stavka)  
       Exit For  
   Next  
   ' цикл -> обход каждой ячейки в диапозоне и запуск "подбора параметра"  
End Sub
 
См. мой пост выше.
 
{quote}{login=Юрий М}{date=10.07.2012 02:32}{thema=}{post}См. мой пост выше.{/post}{/quote}  
 
Юрий, спасибо, все получилось :-)  
Как-то я не стой стороны заходил... перемудрил  
 
Sub Test1()  
Dim Diapozon As Range  
Dim Konk_iacheica As Range  
' присвоили переменные  
Set Diapozon = Range("H6:H89")  
' присваиваем конкретный диапозон  
   Range("A6:A89").Select  
   Selection.Copy  
   Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _  
       :=False, Transpose:=False  
' очистили от формул - поменяли на значение  
For Each Konk_iacheica In Diapozon  
Konk_iacheica.GoalSeek Goal:=0, ChangingCell:=Konk_iacheica.Offset(, -7)  
Next  
End Sub
Страницы: 1
Читают тему
Наверх