2016-06-22 2 views
0

Я ищу Excel VBA, чтобы изменить подпись на кнопке командной строки Excel на лету. Заголовок по умолчанию должен быть «Показать разницу» и должен измениться на «Показать все», когда применяется фильтр.Excel VBA, чтобы изменить подпись на кнопке командной строки Excel

Это то, что у меня есть до сих пор.

Sub ShowDifference() 
Dim cmdButton As CommandButton 

«Breaks Здесь

Set cmdButton = ActiveSheet.Shapes("cmdShowDif") 


If cmdButton.Caption = "Show Difference" Then 
    ActiveSheet.ListObjects("qryDifference").Range.AutoFilter Field:=4, _ 
    Criteria1:=Array("<>0.00"), Operator:=xlAnd 
    cmdButton.Caption = "Show All" 
Else 
    ActiveSheet.ListObjects("qryDifference").Range.AutoFilter Field:=4 
    cmdButton.Caption = "Show Difference" 
End If 

End Sub 

Он ломает на имя суб. Зачем?

Ошибка: enter image description here

+0

Какая ошибка? –

+0

* Он разбивается на имя суб * - вы сначала скомпилировали код? И что в мире имеет название, связанное с вопросом? –

+0

Извините, но забыл изменить название. См. Прикрепленное изображение для сообщения об ошибке. –

ответ

1

Вот рабочий код:

Sub ShowDifference() 

Dim cmdButton As Button 

Set cmdButton = ActiveSheet.Buttons("cmdShowDif") 

If cmdButton.Caption = "Show Difference" Then 
    cmdButton.Caption = "Show All" 
Else 
    cmdButton.Caption = "Show Difference" 
End If 

End Sub 

Кроме того, вы также можете использовать следующий код:

Sub ShowDifference() 

Dim cmdButton As Button 

For Each cmdButton In ActiveSheet.Buttons 
    If cmdButton.Name = "cmdShowDif" Then 
     If cmdButton.Caption = "Show Difference" Then 
      cmdButton.Caption = "Show All" 
     Else 
      cmdButton.Caption = "Show Difference" 
     End If 
    Else 
     Debug.Print cmdButton.Name & " is not the one... moving to next button..." 
    End If 
Next cmdButton 

End Sub 

Дайте мне знать, если возникнут какие-либо вопросы.

+0

спасибо, что сделал трюк. –

0

Перейдите на вкладку Разработчик и выберите режим Design. Теперь выберите CommandButton. Имя кнопки появится в поле имени - слева от панели формул. Измените эту строку

Set cmdButton = ActiveSheet.Shapes("cmdShowDif") 

к

Set cmdButton = ActiveSheet.OLEObjects("cmdShowDif").Object 

Но что использует правильное имя вместо cmdShowDif (или изменить имя в поле Имя для cmdShowDif

+0

Это работает только для элементов управления ActiveX. Но мне кажется, что Карен использует Элементы управления формой. – Ralph

+0

Тип данных CommandButton - это ActiveX, а accessor чаще всего используется в Forms. Интересно, откуда она скопировала этот код и что он использовал? –