返回列表 上一主題 發帖

[發問] 請教有關「表單」控制項的語法!

回復 1# skyutm
play.gif
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
複製代碼
學海無涯_不恥下問

TOP

回復 4# skyutm

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

至於第二個問題則可以將每個要當成輸入的ListBox設置程物件類別來操作即可達成
學海無涯_不恥下問

TOP

回復 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
複製代碼
物件類別應用.rar (12.93 KB)
play.gif
學海無涯_不恥下問

TOP

        靜思自在 : 有智慧才能分辨善惡邪正;有謙虛才能建立美滿人生。
返回列表 上一主題