Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.07.2011, 20:19   #1
g-alex-nik
 
Регистрация: 08.07.2011
Сообщений: 6
Восклицание Эксель 2007 SmartArt

Уважаемые программисты. Подскажите пожалуйста, как в Эксель 2007 программно в VBA массив рисунков SmartArt от 0 до 100 связать с диапазоном ячеек A1:A100. При запуске макроса значение в определённой ячейке окрашивала фигуру SmartArt в некоторый цвет, скажем ячейка А3 окрашивает фигуру 3, ячейка А5 окрашивает фигуру 5. У меня есть код для каждой отдельной фигуры, но я не могу организовать цикл. Подскажите пожалуйста, как это сделать.
С уважением Голяндин Александр.
g-alex-nik вне форума Ответить с цитированием
Старый 08.07.2011, 21:33   #2
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

Покажите ваш код, может, что-нибудь придумаем
motorway вне форума Ответить с цитированием
Старый 08.07.2011, 21:38   #3
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Код:
for i = 1 to sheets(1).shapes.count
  sheets(1).shapes(i).color = ...
next
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 08.07.2011, 21:43   #4
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

Но, кстати, если вставить стрелку с текстом, то она не поддерживает такое свойство Color при обращении к Shapes(1)
motorway вне форума Ответить с цитированием
Старый 08.07.2011, 22:05   #5
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

цикл по картинкам есть...
дальше автор сам может определить какого типа очередной Shapes и на какое свойство нажать, чтобы он принял правильный цвет
плюс этот цикл замечательно увязывается с ячейками А1, А2...
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 08.07.2011, 23:53   #6
g-alex-nik
 
Регистрация: 08.07.2011
Сообщений: 6
По умолчанию

Мой код следующий Sub Макрос1()
'
' Макрос1 Макрос
'

'
Application.ScreenUpdating = False
Select Case [B2]
Case 1: iColor& = vbRed
Case 2: iColor& = vbBlue
Case 3: iColor& = vbCyan
Case 4: iColor& = vbGreen
Case 5: iColor& = vbYellow
Case 6: iColor& = vbMagenta
Case Else: iColor& = vbWhite
End Select
Select Case [A1]
Case 1:
Dim Shp As Shape
Set Shp = ActiveSheet.Shapes("Полилиния 1")
Shp.Fill.ForeColor.RGB = iColor&
End Select
Select Case [A2]
Case 1:
Set Shp = ActiveSheet.Shapes("Полилиния 2")
Shp.Fill.ForeColor.RGB = iColor&
End Select
Select Case [A3]
Case 1:
Set Shp = ActiveSheet.Shapes("Полилиния 3")
Shp.Fill.ForeColor.RGB = iColor&
End Select
Select Case [A4]
Case 1:
Set Shp = ActiveSheet.Shapes("Полилиния 4")
Shp.Fill.ForeColor.RGB = iColor&
End Select
Select Case [A5]
Case 1:
Set Shp = ActiveSheet.Shapes("Полилиния 5")
Shp.Fill.ForeColor.RGB = iColor&
End Select
Select Case [A6]
Case 1:
Set Shp = ActiveSheet.Shapes("Полилиния 6")
Shp.Fill.ForeColor.RGB = iColor&
End Select
Range("C1:C150").Select
Selection.ClearContents
Range("C1").Select
Application.ScreenUpdating = True
End Sub

В диапазоне ячеек A1:A6, если мы подставляем в некоторые ячейки значение "1", а затем запускаем макрос, то соответствующие фигуры окрашиваются в тот цвет, который задан в ячейке В2. Проблема в организации цикла, так как для сотни фигур этот код будет громоздким.
g-alex-nik вне форума Ответить с цитированием
Старый 09.07.2011, 00:07   #7
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Цитата:
так как для сотни фигур этот код будет громоздким
ничего пишите...
мы в Вас верим

у меня альтернативное предложение:

Код:
Sub Макрос2() ' смело изменил название макроса
  Application.ScreenUpdating = False
  Select Case [B2]
    Case 1: iColor& = vbRed
    Case 2: iColor& = vbBlue
    Case 3: iColor& = vbCyan 
    Case 4: iColor& = vbGreen
    Case 5: iColor& = vbYellow
    Case 6: iColor& = vbMagenta
    Case Else: iColor& = vbWhite
  End Select
  for i = i to activesheet.shapes.count
    ActiveSheet.Shapes(i).Fill.ForeColor.RGB = iColor&
  next
  Range("C1:C150").ClearContents
  Application.ScreenUpdating = True
End Sub
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете

Последний раз редактировалось IgorGO; 09.07.2011 в 00:17.
IgorGO вне форума Ответить с цитированием
Старый 09.07.2011, 00:34   #8
g-alex-nik
 
Регистрация: 08.07.2011
Сообщений: 6
По умолчанию

Спасибо за подсказку. Даже более того. Но проблема не устранилась. При запуске макроса окрашиваются все фигуры. А нужно, что бы окрашивались лишь те фигуры (Полилиния1, Полилиния4)например, в ячейках А1 и А4 стояло бы соответствующее значение или число. В вашем случае Массив С1:C150
Но в любом случае большое Вам спасибо.
С уважением Александр
g-alex-nik вне форума Ответить с цитированием
Старый 09.07.2011, 00:51   #9
g-alex-nik
 
Регистрация: 08.07.2011
Сообщений: 6
По умолчанию

Кстати. Я думаю, что кому - то может быть интересен макрос позволяющий определить цвет ячейки в "RBG" с последующей записью данных в соседние ячейки
Sub Определить_цвет()

Application.ScreenUpdating = False
Range(Cells(1, 4), Cells(1, 6)) = DECIMAL2RGB(ActiveCell.Interior.Col or)
ActiveCell.Offset(0, 1) = (Range("D1"))
ActiveCell.Offset(0, 2) = (Range("E1"))
ActiveCell.Offset(0, 3) = (Range("F1"))
Application.ScreenUpdating = True
End Sub
___________________________________ ______________________________
Function DECIMAL2RGB(ColorVal) As Variant

DECIMAL2RGB = Array(ColorVal \ 256 ^ 0 And 255, ColorVal \ 256 ^ 1 And 255, ColorVal \ 256 ^ 2 And 255)
End Function

Данный код помещают в стандартный модуль. Затем на активном листе выделяют ячейку, цвет которой нужно установить, запускают макрос и в ячейках справа записываются значения цвета.
g-alex-nik вне форума Ответить с цитированием
Старый 09.07.2011, 00:58   #10
R Dmitry
Форумчанин
 
Регистрация: 07.03.2010
Сообщений: 796
По умолчанию

Цитата:
Сообщение от g-alex-nik Посмотреть сообщение
Спасибо за подсказку. Даже более того. Но проблема не устранилась. При запуске макроса окрашиваются все фигуры. А нужно, что бы окрашивались лишь те фигуры (Полилиния1, Полилиния4)например, в ячейках А1 и А4 стояло бы соответствующее значение или число. В вашем случае Массив С1:C150
Но в любом случае большое Вам спасибо.
С уважением Александр
Код:
 for i = 1 to activesheet.shapes.count
   if cells(i,1)=1 then ActiveSheet.Shapes(i).Fill.ForeColor.RGB = iColor&
  next
только не помню с какого индекса шейпы идут

или так
Код:
 for i =1 to activesheet.shapes.count
   if cells(i,1)=1 then ActiveSheet.Shapes("Полилиния " & i).Fill.ForeColor.RGB = iColor&
  next
Логика?!.... она где то рядом... E_mail: dg_rusak@mail.ru Если спасибо мало: Яндекс . Деньги - 41001731366021 WM R269866874234

Последний раз редактировалось R Dmitry; 09.07.2011 в 01:17.
R Dmitry вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
бд эксель sp@ker БД в Delphi 4 16.04.2011 17:05
Эксель 2007: Проблема с запуском макроса по событию Byroad Microsoft Office Excel 7 14.09.2010 13:23
Эксель 2007. сводная таблица Катик7 Microsoft Office Excel 1 13.05.2009 22:38