iT邦幫忙

DAY 11
1

Excel VBA 的眉眉角角系列 第 11

Excel VBA 的眉眉角角Day11:變更表單按鈕的文字項目

當開始使用巨集錄製後,你會發現Excel裡面有很多物件可以透過巨集控制,在製作使用者界面時,若想要做的更加互動,一定會對按鈕文字進行修改,但是在錄製巨集時,若要更改按鈕文字,錄製出來可能會長的這個樣子:

Sub Macro7()
    ActiveSheet.Shapes("Button 1").Select
    Selection.Characters.Text = "test"
    With Selection.Characters(Start:=1, Length:=4).Font
        .Name = "新細明體"
        .FontStyle = "標準"
        .Size = 12
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ColorIndex = xlAutomatic
    End With
End Sub

我一定得選到「Button 1」後才能修改文字嗎?這時你一定會想試試看把第一、二行合併起來,變成ActiveSheet.Shapes("Button 1").Characters.Text = "test",沒錯,看起來一切都很合理,Excel VBA的世界裡也有很多範例,可以這樣合併起來,這樣就不用Select也可以改變某一物件的屬性,但是在這個case裡,就是少了一個物件,叫做TextFrame來的,不論怎麼錄製,就是沒錄到這個東西啊!正確的寫法為「ActiveSheet.Shapes("Button 1").TextFrame.Characters.Text = "test"」在這,你就可以透過觸發事件對按鈕文字做改變,而按鈕按下去時,使用「var =ActiveSheet.Shapes("Button 1").TextFrame.Characters.Text」的方式,取得按鈕現在的文字狀態,在針對文字狀態執行不同的程式,這將會減少許多按鈕,增加使用的簡易度。

另外,要怎麼知道按鈕叫什麼名稱呢?「Button 1」這個怎麼來的?就我目前所知,使用錄製取得按鈕名稱會是較快的方法,因為在控制項格式中,並沒有提到該按鈕名稱,也沒得改名稱。

那,我可以改按鈕名稱嗎?可以的,使用「ActiveSheet.Shapes("Button 1").name = "新名稱"」的方式,即可對「Button 1」按鈕變更為「新名稱」,但是變更後記得程式碼也要跟著變更,否則會抓不到按鈕!

請注意!以上所提的部份為「表單」提供的「按鈕」物件,而非「控制工具箱」裡的「按鈕」物件。

附上一個按鈕變更文字的範例:

Sub 按鈕改字_Click()
    Sheets("Day11").Select
    ActiveSheet.Shapes("Button 1").TextFrame.Characters.Text = "存檔日期:" & Format(Now, "yyyy/m/d")
    Debug.Print ActiveSheet.Shapes("Button 1").TextFrame.Characters.Text
End Sub

假設原本按鈕文字如下:

點下去後,執行上面的程式,即可修改描述內容:

這樣的界面看起來是否更生動有趣?希望各位喜歡!


上一篇
Excel VBA 的眉眉角角Day10: 如何加速程式執行?
下一篇
Excel VBA 的眉眉角角Day12:修改狀態列顯示資料
系列文
Excel VBA 的眉眉角角30

尚未有邦友留言

立即登入留言