Board logo

標題: [發問] 請教有關「表單」控制項的語法! [打印本頁]

作者: skyutm    時間: 2012-9-13 19:49     標題: 請教有關「表單」控制項的語法!

各位先進大家好!抱歉又打擾了。又有語法的問題想請教,小弟我已經寫了有關「評語」表單的語法,內容構想是這樣,只要使用者點按鍵,就會出現選擇評語的listbox,大致語法如下:
Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
  a1 = UserForm1.ListBox1.Value
  Sheets("評語").Range("d1") = a1
End Sub
Sub UserForm_Activate()
  With UserForm1.ListBox1
  .AddItem "品學兼優"
    .AddItem "友愛同學"
      .AddItem "急公好義"
        .AddItem "生性懶散"
  End With
End Sub

EXCEL是這樣
  座號         姓名          按鍵           評語欄
10101     李阿斗    選擇評語
10102     張老大   選擇評語
10103     林老千   選擇評語
10104

小弟的問題是:1.如何可以讓兩個前後點選的評語同時存在一個儲存格(每個學生要有兩個評語)
                              2.語法Sheets("評語").Range("d1") = a1 可以怎麼更改,因為接下來要出現在d2、d3、d4、d5........
作者: Hsieh    時間: 2012-9-13 23:10

回復 1# skyutm
[attach]12480[/attach]
UserForm1模組
  1. Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
  2.   a1 = ListBox1.Value
  3.   ActiveCell = IIf(ActiveCell = "", a1, ActiveCell & "、" & a1)
  4. End Sub

  5. Private Sub UserForm_Initialize()
  6.   With ListBox1
  7.   .AddItem "品學兼優"
  8.     .AddItem "友愛同學"
  9.       .AddItem "急公好義"
  10.         .AddItem "生性懶散"
  11.   End With
  12. End Sub
複製代碼
評語工作表模組
  1. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  2. If Target.Column = 3 And Target.Count = 1 Then UserForm1.Show 0
  3. End Sub
複製代碼

作者: skyutm    時間: 2012-9-14 22:30

回復 2# Hsieh
天啊!不是我愛拍馬屁。怎麼會有這麼詳盡的介紹。真是太感謝了!
作者: skyutm    時間: 2012-9-14 23:09

抱歉!版主大大再次打擾了,小弟有些疑惑,請問一下這個語法:
ActiveCell = IIf(ActiveCell = "", a1, ActiveCell & "、" & a1)
是這樣解釋嗎?開啟的儲存格=如果儲存格式空的,就輸入a1,如果不是,就輸入儲存格內容和、和a1
請問:1.這樣的語法是怎樣想出來
             2.如果因為評語太多,必須分成好幾個listbox,那應該怎麼改寫?謝謝
作者: Hsieh    時間: 2012-9-15 21:17

回復 4# skyutm

怎樣想出這樣的語法?
這問題應該是每個寫程式的人都有不同的思考方向
只是要寫出能夠達到目的的語法通常不只一種
就看個人對VBA函數與各種方法的認識多寡而異
通常對於判斷式的寫法我建議口語化的方式來解讀
把口語話轉成EXCEL所能接受的VBA語言就可達成目的
以本題為例,樓主原本在C欄設定程啟動表單的方式
這要讓工作表找到寫入的目標儲存格會有困難
因為若C欄設置很多按鈕,那麼按下按鈕後的儲存格要如何定位?又會產生問題
所以利用WorkSheet的Selection_Change事件就能確定輸入目標位置就是作用中的儲存格

至於第二個問題則可以將每個要當成輸入的ListBox設置程物件類別來操作即可達成
作者: skyutm    時間: 2012-9-15 22:25

回復 5# Hsieh
再次感謝版主大大的詳細回答,坦白的說就是功力深厚不同,寫語法的方式也不同。不過厚臉皮地再次打擾一下,第二個問題並沒有解開小弟的疑惑,可否再說明詳細一些,謝謝!
作者: Hsieh    時間: 2012-9-15 23:30

回復 6# skyutm
物件類別的應用是將同一性質的物件歸類,使其能共同執行程式
工作表模組
  1. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  2. If Target.Column = 3 And Target.Count = 1 Then UserForm1.Show 0
  3. End Sub
複製代碼
UserForm1模組
  1. Private Sub UserForm_Initialize()
  2. With ListBox1
  3.   .AddItem "略有進步"
  4.     .AddItem "努力不足"
  5.       .AddItem "學業精進"
  6.         .AddItem "繼續加強"
  7.         Set Obs(0).MyList = ListBox1
  8. End With
  9. With ListBox2
  10.   .AddItem "品學兼優"
  11.     .AddItem "友愛同學"
  12.       .AddItem "急公好義"
  13.         .AddItem "生性懶散"
  14.         Set Obs(1).MyList = ListBox2
  15. End With
  16. End Sub
複製代碼
物件類別模組(插入)
  1. Public WithEvents MyList As MSForms.ListBox
  2. Private Sub MyList_Click()
  3. ActiveCell = IIf(ActiveCell = "", MyList, ActiveCell & "、" & MyList)
  4. n = IIf(MyList.Name = "ListBox1", "ListBox2", "ListBox1")
  5. If UserForm1.Controls(n).ListIndex <> -1 Then UserForm1.Controls(n).Selected(UserForm1.Controls(n).ListIndex) = False
  6. End Sub
複製代碼
[attach]12511[/attach]
[attach]12512[/attach]
作者: skyutm    時間: 2012-9-16 00:02

回復 7# Hsieh
感謝版大的精闢回復,小弟先去試試,因為很多語法看不懂,先研究一下再說!再次感謝。




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)