UserForm

唉,因為之前開配方表時大意,差點造成成品報廢,因此想說看看excel可以怎麼幫我防呆呢?

原本只想到單純的用彈出訊息來做,作法很簡單:

  1. 開啟excel後,到工具 -> 巨集 -> Visual Basic編輯器開啟VB編輯程式。
  2. 選好後,會談跳出一個空白視窗編寫程式碼,輸入:
    Sub auto_open()
    MsgBox("輸入希望顯示的字串!")
    End Sub
    

    然後儲存離開。

  3. 除新開啟excel後,就會自動跳出視窗

但這樣的作法似乎有點弱,因為不能改字體大小、顏色,關掉視窗之後可能還是會忘記key數值,或是很快的就把視窗關掉,根本不想看他說什麼。剛好上網查Message Box的時,看到有人提到userform這東東。研究一陣子後,就決定用他了。

跟著網路上的教學並稍做修改,很快的就完成了我要的東西。

  1. 跟上面方法(step 1~2)一樣,先叫出Visual Basic編輯器,然後一樣右鍵叫出userform(中文名稱是:自訂表單)。
  2. 工具箱內有很多選項,但我只用到3個,一個是Label;一個是TextBox;一個是CommandButton。
  3. 先用Label編輯文字區;接著用TextBox編輯輸入區域;再用CommandButton設定輸入的質要放到哪個位置,若沒輸入怎不給予輸入等條件。
  4. 畫完架構後,就要開始定內容了。先點選第一個TextBox,左下角會出現該TextBox可更改的設定,我在Name的地方,先將此命名為textSC;同樣的,點選第二個TestBox,然後將其命名textweight;再來點選下方的CommandButton,將其命名為cmdAdd。
    註:左下角的屬性欄位很多,可以設定字體大小、顏色、字型等等等。
  5. 點擊兩下CommandButton,或是到按F7叫出程式碼編輯區,如同先前方法的step 3一樣,在這編輯程式。這裡只需針對CommandButton的部份做編輯,如下所示:
    Private Sub cmdAdd_Click()     //剛剛CommandButton的名稱
    Dim iRow As Long
    Dim ws As Worksheet
    Set ws = Worksheets("formulation")   //設定要修改的worksheets
    
    //如果希望每次的資料是新增上去,不要覆蓋,就使用這方法。
    'find first empty row in database
    'iRow = ws.Cells.Find(What:="*", SearchOrder:=xlRows, _
    '    SearchDirection:=xlPrevious, LookIn:=xlValues).Row + 1
    
    //確認固含量有無輸入數值,若沒有,會出現訊息告知,其中Me.txtSC.Value就是抓取輸入的固含量值
    'check for a S.C. number
    If Trim(Me.txtSC.Value) = "" Then
    Me.txtSC.SetFocus
    MsgBox "Please enter a S.C."
    Exit Sub
    End If
    
    //確認投料量有無輸入數值,若沒有,會出現訊息告知,其中Me.txtweight.Value就是抓取輸入的投料量值
    'check for a weight number
    If Trim(Me.txtweight.Value) = "" Then
    Me.txtweight.SetFocus
    MsgBox "Please enter a Weight"
    Exit Sub
    End If
    
    //將數值寫入指定格子,cells用法是:Cells(列1~xxx, 行a~zz),其中因為固含量值為百分比,以直接在這邊換算。
    'copy the data to the database
    ws.Cells(6, 2).Value = Me.txtSC.Value / 100
    ws.Cells(21, 2).Value = Me.txtweight.Value
    
    //輸入完後會將數值清空,以便輸入下一筆,但對我沒影響,因為我設定輸入後關閉視窗。
    'clear the data
    Me.txtSC.Value = ""
    Me.txtweight.Value = ""
    Me.txtSC.SetFocus
    Me.txtweight.SetFocus
    
    //關閉視窗
    'close userform
    Unload Me
    
    End Sub
    

    其實有些部份我不懂意義,所以我僅就知道的部份稍微註解,怕以後忘記 :y005 。

  6. 存檔後接著再新增一個模組,方法跟新增Message Box一樣,但將程式碼改為:
    Sub auto_open()
    UserForm1.Show    //UserForm1要改為剛建立userform時所給予的名稱。
    End Sub
    
  7. 如果沒意外,重新開啟execl後,應該會出現下面的圖示。

    若沒輸入固含量或是投料量的話,就會出現這樣:

Excel功能真的很強大,大家平常用的功能可能只是他的表皮,因為太高深複雜了,我只能說有任何想法時,可以試試看excel有沒有辦法幫忙做到,上網找找資訊,說不定會有意想不到的結果。最後我只想說:『微軟,你的excel功能真的是太讚了!』

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料