作者yimean (溫柔殺手)
看板Office
標題[算表] VBA下拉式選單觸發問題
時間Thu Sep 20 16:18:50 2018
軟體:Excel
版本:2007
各位板上的大大下午好,我寫了一個VBA用於紀錄接單資料。
其中包含了一個下拉選單。一個資料清除按鈕,一個資料儲存按鈕。
下拉式選單是選擇接單單位,資料清除按鈕是在資料儲存之後把頁面上的資料全部清除。
目前有遇到一個問題,我在下拉式選單有預設一個值,該值目的是為了提醒使用者要記
得選取。
但是當使用者Key完了一張單子之後,不會關閉頁面就繼續Key下一張單子,下拉式選單
會保持在使用者上一次選取的狀態。
如果使用者忘了修改,那麼就有可能會輸入錯的值。
所以我想在按下資料清除按鈕之後,把下拉式的選單回歸到預設值,請問應該要怎麼做?
下方是我目前下拉式選單的程式。
Public Sub Order_taking_department_GotFocus()
With ActiveSheet.Order_taking_department
.AddItem "A單位"
.AddItem "B單位"
.Value = "請選擇接單單位"
End With
End Sub
Private Sub Order_taking_department_Change()
'下拉選單
[A1].Value = Order_taking_department.Value
End Sub
因為我不知道應該要怎麼樣用VBA去觸發GotFocus。
煩請大大指導,感謝。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.195.98.141
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Office/M.1537431532.A.74A.html
※ 編輯: yimean (123.195.98.141), 09/20/2018 16:20:52
1F:→ soyoso: 是指回歸預設值是指?gotfocus重覆觸發下會持續新增item, 09/20 16:28
2F:→ soyoso: 而希望只顯示a,b單位嗎? 09/20 16:29
3F:→ soyoso: 如果是的話可先在additem前先clear 09/20 16:29
4F:→ yimean: 是當我按下清除資料按鈕的時候,我的下拉式選單會顯示 09/20 16:32
5F:→ yimean: "請選擇接單單位" 09/20 16:32
6F:→ soyoso: 那在按鈕觸發時,將order_taking_department= "請選擇接單 09/20 16:42
7F:→ soyoso: 單位";這裡已觸發了下拉選單change事件,所以在change內 09/20 16:43
8F:→ soyoso: 判斷當order_taking_department非<>"請選擇接單單位"時填 09/20 16:44
9F:→ soyoso: 入資料 09/20 16:44
10F:→ yimean: 不好意思請問"非<>"這個是代表什麼意思? 09/21 08:28
11F:→ yimean: Change事件不是我要去按他選擇值才算觸發嗎? 09/21 08:31
12F:→ yimean: 所以,這個程式其實很有問題,一旦我一直去點選,那我的 09/21 08:33
13F:→ yimean: Item就會一直增加。如果是這樣的狀況我應該要怎麼處理? 09/21 08:34
14F:→ yimean: 書上的範例是這樣寫的~>.<~ 09/21 08:35
15F:→ yimean: 哈哈 我看到了,您第三行就解答我的疑惑了。感謝。 09/21 08:37
16F:→ yimean: 接下來我的問題還是,如何用另外一個按鈕,來讓下拉式選單 09/21 08:38
17F:→ yimean: 顯示Default的狀態。 09/21 08:38
18F:→ newacc: 如果把AddItem寫在Worksheet_Initialize()裡,然後按鈕就 09/21 09:36
19F:→ newacc: 只需要觸發把Value改成預設,會不會比較好實作? 09/21 09:36
20F:→ soyoso: 非<>是指不等於"請選擇接單單位" 09/21 09:38
21F:→ soyoso: 寫法為 order_taking_department <> "請選擇接單單位" 09/21 09:39
22F:→ soyoso: 另外一個按妞,來讓下拉式選單顯示default("請選擇接單單 09/21 09:40
23F:→ soyoso: 位")的狀態上,回文在按鈕觸發時,order_taking_departmen 09/21 09:41
24F:→ soyoso: t= "請選擇接單單位",來顯示default的值方面是否合適呢 09/21 09:43
感謝兩位大大的指導。
@Soyoso
請問一下如果依照您的指導,程式碼是不是應該變成如下?
Private sub button_Click()
CleanData
Order_taking_department = "請選擇接單單位"
End Sub
Public Sub Order_taking_department_GotFocus()
With ActiveSheet.Order_taking_department
.Clean
.AddItem "A單位"
.AddItem "B單位"
Order_taking_department <> "請選擇接單單位"
End With
End Sub
Private Sub Order_taking_department_Change()
'下拉選單
[A1].Value = Order_taking_department.Value
End Sub
※ 編輯: yimean (114.33.116.8), 09/21/2018 11:46:37
25F:→ yimean: 資料更新 09/21 11:46
26F:→ newacc: %Private Sub button_Click() 09/21 12:15
27F:→ newacc: CleanData 09/21 12:15
28F:→ newacc: Order_taking_department = "請選擇接單單位" 09/21 12:15
29F:→ newacc: End Sub 09/21 12:15
30F:→ newacc: 09/21 12:15
31F:→ newacc: Public Sub Order_taking_department_GotFocus() 09/21 12:15
32F:→ newacc: With ActiveSheet.Order_taking_department 09/21 12:15
33F:→ newacc: .Clean 09/21 12:15
34F:→ newacc: .AddItem "A單位" 09/21 12:15
35F:→ newacc: .AddItem "B單位" 09/21 12:15
36F:→ newacc: End With 09/21 12:15
37F:→ newacc: End Sub 09/21 12:15
38F:→ newacc: 09/21 12:15
39F:→ newacc: Private Sub Order_taking_department_Change() 09/21 12:15
40F:→ newacc: '下拉選單 09/21 12:15
41F:→ newacc: If Order_taking_department <> "請選擇接單單位" Then 09/21 12:15
42F:→ newacc: [A1].Value = Order_taking_department.Value 09/21 12:15
43F:→ newacc: End If 09/21 12:15
44F:→ newacc: End Sub 09/21 12:19
45F:→ newacc: 這樣做的原因是你賦予選單value的時候,就會觸發Change 09/21 12:20
46F:→ newacc: event,因此在裡面加一個判斷,如果是預設值代表使用者尚 09/21 12:20
47F:→ newacc: 未選擇,所以只有不等於預設值時才要寫入[A1] 09/21 12:21
48F:→ soyoso: 原po或n大測試上.clean都不會出錯? 09/21 13:48
49F:→ soyoso: 測試是出現執行階段錯誤'438,物件不支援此屬性或方法 09/21 13:49
50F:→ soyoso: 如回文為 .clear的方式 09/21 13:50
51F:→ yimean: @Soyoso大大抱歉,您是對的。.Clear 09/21 14:02
※ 編輯: yimean (114.33.116.8), 09/21/2018 14:15:49
52F:→ yimean: @newacc 感謝我試試看。 09/21 14:16
53F:→ newacc: 被抓到我沒有測試了( ̄▽ ̄#)﹏﹏ 09/21 18:22