2016-02-17 56 views
6

Obecnie używa vba z programem excel 2007 ...Dezaktywować przycisk za pomocą funkcji?

Obecnie testuję możliwości funkcji i trochę utknąłem przy użyciu przycisków. Mam dwa przyciski o nazwie ONE i TWO. Naciśnięcie wywołuje funkcję Calc z każdym przyciskiem przekazującym zmienną nazwy drugiej. W następujący sposób:

Private Sub ONE_Click() 
Calc TWO 
End Sub 

Private Sub TWO_Click() 
Calc ONE 
End Sub 

Function Calc(B As CommandButton) 
B.Enabled = False 
End Function 

Rozumiem, że naciśnięcie przycisku przechodzi się zmienną TWO do funkcji Calc, a następnie wyłącza przycisk dwa.

Mam także przycisk reset, który służy oznaczony następująco:

Private Sub Reset_Click() 
ONE.Enabled = True 
TWO.Enabled = True 
End Sub 

Wyniki tego, jeśli jeden przycisk, naciśnij przycisk DWA szarości i pojawia się „wyłączone”. Jednak po naciśnięciu przycisku resetowania pozostaje on szary. Badanie właściwości przycisku pokazuje, że w rzeczywistości nie jest on wyłączany. Zainstalowałem inny przycisk, który bezpośrednio wyłącza przycisk drugi, tj. TWO.Enabled = False, zamiast używać zmiennej, aby to zrobić.

Gdy przycisk jest bezpośrednio wyłączony za pomocą przycisku bezpośredniego, resetowanie włącza przycisk tak, jak powinien, a właściwości odzwierciedlają, że przycisk jest wyłączony.

Czy ktoś wie, dlaczego użycie zmiennej do wyłączenia takiego przycisku powoduje iluzoryczne wyłączenie? A jeszcze lepiej, jak przezwyciężyć problem?

+0

Uruchomiłem twój kod i nie znalazłem niechcianego beheiour. naciśnięcie przycisku "RESET" zawsze miałoby włączone inne przyciski – user3598756

+0

Uruchomiłem również kod i zachowałem się tak samo jak Frank Zed, zarówno w Excel 2007 jak i Excel 2016. –

Odpowiedz

1

Jeśli masz problemy z wywoływaniem przez niepoprawne odwołanie, użyj parametru statycznego.

Private Sub ONE_Click() 
    Calc "TWO" 
End Sub 

Private Sub TWO_Click() 
    Calc "ONE" 
End Sub 

Teraz możesz użyć tego parametru do działania na obiekcie.

Function Calc(B As String) 
If B = "ONE" Then 
    ONE.Enabled = False 
ElseIf B = "TWO" Then 
    TWO.Enabled = False 
Else 
    Exit Function 
End If 
End Function 
Powiązane problemy