Word / Label設定成button樣式效果

延續「Word / Command Button 無法設定文字對齊的替代方案,使用Label

因為 Label可以控制文字置中,所以用來替代Command Button

在這篇進一步將Label設定成有按下去的效果

主要是設定Label的SpecialEffect屬性

初始設定改為1,外觀看起來就像button了

 

再來是2,會有聚焦的感覺

接著是6,會有彈起來的感覺

最後再回到1

但是如果直接這樣跑程式,因為程式執行速度很快,其實看不出來有改變

所以變成這過程要有很短暫的停頓

如果是在Excel可以用Application.Wait來設定最短1秒的停止

然而,Word VBA是沒有這個功能,變通的方式是引用Excel物件來執行

不過這個方式最小的停止時間是1秒

 

雖然爬文有看到一些方式來達到毫秒的設定

但是有人會提到這都只是0~1秒之間的隨機值,並不是真的如設定的毫秒數

也有提到引用windows API

但是這個缺點是程式是會完全停止不會有任何反應,而且實際測試時

也不知道什麼原因,會看不出任何的SpecialEffect屬性改變

因此改用Timer,這樣可以獲得更接近的時間

綜合以上

我設定了2個自訂程序

clickStyle(lable As Label),傳入 Label

間隔0.2秒,改變SpecialEffect的設定值

將這個程序加在Label的click程序的最開始,Label click()事件被觸發時就執行

1
2
3
4
5
6
7
8
9
' Label樣式
'
Public Sub clickStyle(lable As Label)
    lable.SpecialEffect = 2
    stopTimer (0.2)
    lable.SpecialEffect = 6
    stopTimer (0.2)
    lable.SpecialEffect = 1
End Sub

 

stopTimer(ms As Double),傳入浮點數值,小數點秒數

利用Do-Loop迴圈,停止條件是當前時間減去開始時間的時間差,大於等於所設定的間隔時間

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
' 暫停程式
'
Sub stopTimer(ms As Double)

    starting_time = Timer
    
    Do
        DoEvents
    Loop Until (Timer - starting_time) >= ms

End Sub

 

效果看起來應該很接近了