Wpis z mikrobloga

#vba #excel
Czesc. Potrzebuje wylaczyc przyciski po kliknieciu. Obecnie robie to tak. ale dziala to tylko dla jednego przycisku. Jak odwolac sie do wszystkich?

ActiveSheet.Shapes("Przycisk 94").OnAction = Empty
ActiveSheet.Shapes("Przycisk 94").DrawingObject.Font.ColorIndex = 16
  • 7
  • Odpowiedz
@mate05:
To tak samo.
Tylko zmieniasz shp.Visible = False na shp.OnAction = Empty.
Tylko kurczę coś nie mogę wyłapać, jak zmienić kolor tekstu -- bo

shp.DrawingObject.Font.ColorIndex = 16
nie działa w pętli -- wymaga wskazania konkretnego kształtu z nazwy (albo zaznaczenia go) a pętla iteruje po liczniku kształtów.
Może jakiś mastah VBA wspomoże.

Bez zmiany koloru:

Sub HideShapes_ActiveSheet()
Dim shp As Shape
For Each shp In ActiveSheet.Shapes
shp.OnAction = Empty
Next
  • Odpowiedz
@Polinik: Wielke dzięki tylko chyba niezbyt jasno się wyraziłem. Chodzi mi o to aby każdy przycisk "deaktywował" tylko siebie a w twoim kodzie wyłączam wszystkie przyciski w arkuszu.

próbowałem tak:

Dim shp As Shape
shp.OnAction = Empty

ale wtedy dostaje error : "Object Variable or With not set"
  • Odpowiedz
@mate05:
A nie działa po prostu powielenie tych dwóch linijek dla każdego przycisku z osobna, z nazwą każdego przycisku?

ActiveSheet.Shapes("Przycisk 95").OnAction = Empty
ActiveSheet.Shapes("Przycisk 95").DrawingObject.Font.ColorIndex = 16

ActiveSheet.Shapes("Przycisk 96").OnAction = Empty
ActiveSheet.Shapes("Przycisk 96").DrawingObject.Font.ColorIndex = 16

ActiveSheet.Shapes("Przycisk 97").OnAction = Empty
ActiveSheet.Shapes("Przycisk 97").DrawingObject.Font.ColorIndex = 16
  • Odpowiedz
@Polinik: Już sobie poradziłem. Łap plusa za pomoc i kod, może przyda Ci się kiedyś.

Sub Button1_Click()
DisableButton Sheet1, ActiveSheet.Shapes(Application.Caller).Name
End Sub

Sub DisableButton(hostSheet As Worksheet, shapeName As String)
Dim shp As Shape
On Error Resume Next
Set shp = hostSheet.Shapes(shapeName)
On Error GoTo 0
If Not shp Is Nothing Then
With shp
If .Type = msoFormControl Then
.OnAction = ""
.DrawingObject.Font.ColorIndex = 16
End If
End With
End If
End
  • Odpowiedz