2016-06-15 5 views
1

Я очень новичок в макросах, и я пытаюсь научить себя VBA в excel 2013 и использовать большую помощь. Я хотел бы знать, как изменить цвет заполнения фигуры (не ячейку), когда я нажимаю кнопку ActiveX. Вот что я думаю:VBA, заполните форму нажатием кнопки

onClick()       <-- Do I need a button name? 
if shape.color = RGB(231,230,230) <-- this is the starting color 
    shape.color = RGB(0,0,0)   <-- this is what I want to change it to 
else 
    shape.color = RGB(231,230,230) <-- if color is black change to this 
end if 

Кстати, это для удовольствия, а не для чего-то особенного или официального.

ответ

1

Поместите это в модуле рабочего листа, который содержит кнопку:

Редакции: К сожалению, я изначально думал, что вы хотели фактический цветую кнопку, чтобы изменить. Я позаимствовал от ответа Ральфа для учета формы, являющегося объектом изменения цвета, но ниже, чем это для элемента управления ActiveX (как вы просили) вместо кнопки формы:

Private Sub CommandButton1_Click() ' Yes, you do need to specify the button 
    Dim shp As Shape 
    Set shp = ThisWorkbook.Worksheets(1).Shapes("Rectangle 1") 
    If shp.Fill.ForeColor.RGB = RGB(231, 230, 230) Then 
     shp.Fill.ForeColor.RGB = RGB(0, 0, 0) 
    Else 
     shp.Fill.ForeColor.RGB = RGB(231, 230, 230) 
    End If 
End Sub 
1

Вот код, вы ищет:

Option Explicit 

Sub ButtonClick() 

Dim shp As Shape 

Set shp = ThisWorkbook.Worksheets(1).Shapes("Rectangle 1") 

If shp.Fill.ForeColor.RGB = RGB(231, 230, 230) Then 
    shp.Fill.ForeColor.RGB = RGB(0, 0, 0) 
Else 
    shp.Fill.ForeColor.RGB = RGB(231, 230, 230) 
End If 

End Sub 

Просто убедитесь, что вы настраиваете код выше на правильное название формы (которая «Rectablge 1» в этом примере, который расположен на листе (1)).

Впоследствии создайте кнопку на этом листе и назначьте этот макрос кнопке, чтобы заставить ее работать и переключить цвет фигуры между черным и серым.

В следующий раз я рекомендую вам (на первом этапе) записать то, что вы хотите, чтобы Excel сделал для вас с помощью VB-макрорекордера: https://www.youtube.com/watch?v=Q_HQGHPBYoo После этого взгляните на код и попытайтесь понять его, выделив VBA ключевые слова и нажатие F1. Кроме того, я бы рекомендовал прочитать это: http://www.homeandlearn.org/ После этого вы должны быть настроены на запись некоторых довольно причудливых макросов.

+0

Благодарим за помощь. Я уже научился записывать макросы, но мне нужно назначить команду key-stroke для работы с макросом. Мне не нравится делать это так, потому что я думаю, что он добавляет больше работы, чем простой щелчок. Однако, похоже, вы говорите, что используете макрозапись для просмотра кода вместо фактического использования записанного макроса. Это блестящая идея. Спасибо. – NMeneses

0

Да, вам нужно название кнопки. Снимите элемент ActiveX на листе, а затем перейдите к модулю листа в VBE. В левом выпадающем списке в верхней части панели коды, найти свое имя управления (вы, вероятно, хотите, чтобы переименовать его первый - я не сделал для этого примера)

enter image description here

Когда вы выбираете имя элемента управления в слева и название события справа, VBE заглушает Sub и End Sub для вас.

Далее вам нужно указать свою фигуру в своем коде. Начните с использования ключевого слова Me. Когда вы находитесь в модуле кода листа, Me ссылается на этот лист. Тогда точечный оператор будет раскрывать все свойства и методы этого листа. Когда вы удаляете элемент управления ActiveX на листе, автоматически создается новое свойство листа, которое обеспечивает доступ к объекту. Вы можете использовать

Me.CommandButton1.BackColor = RGB(231, 230, 230) 

Вы If логика выглядит хорошо.

+0

Благодарим вас за помощь. Теперь, когда я это сделал, произошло что-то еще. Скажем, у меня три формы и кнопка, соответствующая каждой из этих фигур. Есть ли способ назначить один и тот же макрос каждой кнопке для заполнения соответствующих цветов формы? – NMeneses

+0

Вы должны задать новый вопрос. –

Смежные вопросы