Страницы: 1
RSS
Как обработать несколько объектов одновременно?
 
Dim arr(0 To 2) As Object  
 
Set arr(0) = ActiveSheet.Shapes("Rectangle 1")  
Set arr(1) = ActiveSheet.Shapes("Oval 2")  
Set arr(2) = ActiveSheet.Shapes("Oval 4")  
 
Этот кусок кода создает масиив из нескольких объектов  
Подскажите, как дальше ОДНОВРЕМЕННО обработать эти объекты? Т.е не циклом а одномоментно (например выделить все или покрасить в зеленый цвет)    
Заранее благодарен!
 
Только если получится сделать эти три объекта одним объектом, которому можно присвоить свойства цвета.  
 
Но мне кажется это никак не получится. Даже коллекция объектов не позволит.  
 
Есть надежда, что получиться сгруппировать объекты в один... но мне кажется и это не выйдет.
 
{quote}{login=}{date=05.10.2009 10:32}{thema=}{post}  
Но мне кажется это никак не получится. Даже коллекция объектов не позволит.  
 
Есть надежда, что получиться сгруппировать объекты в один... но мне кажется и это не выйдет.{/post}{/quote}  
 
Макрорекордер делает это так:    
ActiveSheet.Shapes.Range(Array("Oval 4", "Rectangle 1", "Oval 3", "Rectangle 2")).Select  
 
Мне необходимо вместо нескольких имен объектов использовать объекты(или имена объектов) из массива (т.е. имена и количество может изменяться)
 
> Макрорекордер делает это так:  
Ну так и Вы сделайте аналогично...    
Что именно не получается?  
 
Зачем Вы используете Dim arr(0 To 2) As Object  
Как его заполняете?  
Почему бы не хранить в массиве имена объектов вместо самих объектов?  
 
 
Я бы покрасил сразу несколько областей так:  
 
Sub test()  
   Dim sh As Worksheet, sha As Shape: Set sh = ActiveSheet  
   For Each sha In sh.Shapes  
       Debug.Print sha.Name  
   Next sha  
End Sub  
 
Sub test2()  
   Dim arr(), sh As Worksheet: Set sh = ActiveSheet  
   arr = Array("Saratov", "N.Novgorod", "Arkchangelsk", "Perm", "Tumen")  
   sh.Shapes.Range(arr).Fill.ForeColor.SchemeColor = 10  
End Sub
 
{quote}{login=The_Prist}{date=05.10.2009 10:55}{thema=}{post}Dim arr(1 To 2)  
ActiveSheet.Shapes.Range(arr).Select{/post}{/quote}  
Спасибо! Именно этоя не мог сформулировать!
 
{quote}{login=EducatedFool}{date=05.10.2009 10:55}{thema=}{post}>    
Я бы покрасил сразу несколько областей так:  
 
Sub test()  
   Dim sh As Worksheet, sha As Shape: Set sh = ActiveSheet  
   For Each sha In sh.Shapes  
       Debug.Print sha.Name  
   Next sha  
End Sub  
 
Sub test2()  
   Dim arr(), sh As Worksheet: Set sh = ActiveSheet  
   arr = Array("Saratov", "N.Novgorod", "Arkchangelsk", "Perm", "Tumen")  
   sh.Shapes.Range(arr).Fill.ForeColor.SchemeColor = 10  
End Sub{/post}{/quote}  
 
Спаисбо! Но хотелось сделать это не циклом а одним действием, без цикла(можно сказать из спотривного интереса)
 
> Но хотелось сделать это не циклом а одним действием  
не обращайте внимание на цикл. он к делу отношения не имеет  
 
 
Вот весь код:  
 
Sub test2()  
   Dim arr(): arr = Array("Saratov", "N.Novgorod", "Arkchangelsk", "Perm", "Tumen")  
   ActiveSheet.Shapes.Range(arr).Fill.ForeColor.SchemeColor = 10  
End Sub
Страницы: 1
Читают тему
Наверх