2016-07-21 9 views
1

Я пытался использовать кнопку1 для активации кнопки2. Проблема в том, что button2 должен использовать application.caller, который по умолчанию используется для кнопки первоначально нажатой (кнопка1).Вручную установить Application.Caller в Excel VBA

Как установить новое значение для application.caller?

Вот пример кода:

Button1:

Sub ShowAttack() 
'Change the color of the other buttons to the background color. 

'Pressed button to lighter color. 
ActiveSheet.Shapes("AttackButton").Fill.ForeColor.RGB = 14277081 

'Other buttons to darker colors. 
ActiveSheet.Shapes("DefenseButton").Fill.ForeColor.RGB = 12566463 
ActiveSheet.Shapes("SpellButton").Fill.ForeColor.RGB = 12566463 

'Toggle Appropriate Cells to unhide 
Dim button As Shape 
Set button = ActiveSheet.Shapes("AttackButton") 
rw = button.TopLeftCell.Row 
Rows((rw + 4) & ":" & (rw + 74)).EntireRow.Hidden = False 

'Hide appropriate cells within shown section 

Set Application.Caller = ActiveSheet.Buttons("WeaponDetailsButton1").Name 
Application.Run ActiveSheet.Buttons("WeaponDetailsButton1").OnAction 

Range("AT51").Select 

End Sub 

Кнопка 2:

Sub HideWeaponDetails() 
    Dim b As Object, cs As Integer, rw As Integer 
    Dim sel01 As Integer, sel02 As Integer 
    Set b = ActiveSheet.Buttons(Application.Caller) 
    With b.TopLeftCell 
     cs = .Column 
     rw = .Row 
    End With 

sel01 = rw + 4 
sel02 = rw + 14 

Rows(sel01 & ":" & sel02).Select 
If Selection.EntireRow.Hidden = False Then 
    Selection.EntireRow.Hidden = True 
Else 
    Selection.EntireRow.Hidden = False 
End If 

Range("A" & rw - 4).Select 
    ActiveSheet.Buttons(Application.Caller).Name = "WeaponDetailsButton" & Selection(1).Value 
Range("AV47").Value = ActiveSheet.Buttons(Application.Caller).Name 

Range("A1").ClearOutline 

End Sub

+0

Вы не можете установить это значение - переместите основную функциональность из кнопки2 в отдельную подсистему, у которой есть параметр, по которому вы можете передать вызывающего: теперь вы можете вызовите это с любой кнопки 1 или кнопки 2. Было бы проще разместить образец кода, если бы ваш существующий код был включен здесь. –

+0

Конечно. Положить его. Благодаря! – CodeHead

ответ

4

Что-то вроде этого:

Sub ShowAttack() 

    '...do stufff 

    HideWeaponDetails "WeaponDetailsButton1" 

End Sub 

Sub button2_click() 
    'all this Sub does is call HideWeaponDetails 
    HideWeaponDetails Application.Caller 
End Sub 


Sub HideWeaponDetails(TheCaller) 
    'use TheCaller instead of Application.Caller 
End Sub 

... или передать кнопку в качестве параметра