當開始使用巨集錄製後,你會發現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
假設原本按鈕文字如下:
點下去後,執行上面的程式,即可修改描述內容:
這樣的界面看起來是否更生動有趣?希望各位喜歡!