iT邦幫忙

0

VBA中如何獲取textbox的游標位置

請問在VBA中如何知道現在游標停在哪個TEXTBOX上??

看更多先前的討論...收起先前的討論...
froce iT邦大師 2 級 ‧ 2020-02-18 10:34:16 檢舉
VBA是cell吧?
ActiveCell
https://docs.microsoft.com/zh-tw/office/vba/api/excel.application.activecell
這好像要呼叫Windows的API
misadm iT邦高手 10 級 ‧ 2020-02-19 09:23:18 檢舉
請問為什麼要知道停在哪個 TextBox 上?

一般來說,不論是用滑鼠或鍵盤,游標都不可能突然出現在哪一個TextBox裡,一定是人為操作所導致,如此一來就會觸發TextBox的Event『Enter』這樣就可以知道游標在哪裡了。
excel要TextBox? 是自製表單(userform)吧?
真想知道答案,再訊我吧。感恩感恩 南無阿彌陀佛
線上的高手們好,不好意思,我上次說的不夠清楚....,我在一個表單中,只有三個TEXTBOX是可以查詢的部份,我希望使用者不管輸入哪一個就可以馬上查詢(那3個TEXTBOX原本都有資料),所以想知道使用者是停在哪一個TEXTBOX上了。
我覺得這次還是不夠清楚。
表單,是指VBA的UserForm嗎?
TEXTBOX,是表單控制項?還是ActiveX控制項?
不好意思,是ActiveX控制項的TEXTBOX,有一堆表格可供輸入以新增資料,但查詢的時候只有三格可以輸入關鍵字,我希望可以隨便輸入一個,按下查詢BUTTON時,可以判讀剛才是哪一個TEXTBOX有輸入資料,再做關鍵字搜尋,是可以先清除表格資料再看是哪一個有資料要查詢....,但我希望可以不要多那個步驟,謝謝!
misadm iT邦高手 10 級 ‧ 2020-02-24 09:27:36 檢舉
那就是要判斷這三個TextBox有沒有輸入東西,判斷的方式依你的需求,可能可以很簡單,也可以很複雜。

例如,只要有輸入東西,不管甚麼文字你都可以接受,甚至空白字元,那就只要判斷TextBox是不是等於『空字串』即可。

但若有限制可輸入的文字,例如:『!@#$%^&*()_+=』這些都不能用來搜尋的,那你就必須要事先排除這些字元。
謝謝樓上的指教,我有想過這法子,但是我的畫面通常都停在全部都有資料的狀態下,所以才希望可以判斷游標剛剛在哪個textbox上,使用者按下查詢後,就可以知道是用哪一個查詢....,我有想過是不是先把那三個textbox的值記錄起來,按下查詢後,看哪一個更動到,就知道使用者想查詢哪一個,但是預預記錄的方法還沒試出來....
misadm iT邦高手 10 級 ‧ 2020-02-25 09:19:11 檢舉
您的描述實在太模糊又不合邏輯,如果有3個TextBox,而且都有輸入資料,而且都要查詢,那為何需要知道剛剛在哪一個TextBox??

您有提到『更動』TextBox有一個Event『Change』,只要有變動就會觸發此Event。不只這個,還有『Enter』、『Exit』...

建議您先測試,就我目前理解您的問題來說,是可以辦到的,但我覺得我的理解是錯誤的,您還是先詳細描述您的問題,可以舉例更好,例如:
有3個TextBox,分別是 txtA, txtB, txtC,現在這3個裡面都有值:
txtA.Text = 中文
txtB.Text = 英文
txtC.Text = 日文
使用者將txtB的『英文』改成了『法文』之後,按下了『查詢』按鈕,請問我要如何知道使用者剛剛是在哪一個TextBox改資料?

大概類似像這樣,參考看看囉!
SORRY! 我的國文不好...,我的畫面上有二十幾個TEXTBOX,本來只有在編號的TEXTBOX上輸入號碼,按下BUTTON後,會把該編號的資料全部更新在這二十幾個TEXTBOX上,現在我希望可以在編號、公司名稱或負責人的TEXTBOX輸入資料後,按下原本的BUTTON就可以查詢,所以那三個TEXTBOX是本來就有資料的,只是使用者隨意在一個TEXTBOX上改資料,按下BUTTON後,它可以判斷使用者想查詢的關鍵字是那個欄位要做的,再來查詢資料後秀在電腦上,不知道您是否可以了解我的意思了嗎?
misadm iT邦高手 10 級 ‧ 2020-02-27 09:10:39 檢舉
我用最直覺的方式,但不是最好的舉例給您看:
Dim strIsChanged As String  '全域變數

Private Sub TextBox1_Change() '當 TextBox1 的內容被改變時觸發
 strIsChanged = "TextBox1" '全域變數用來當作是一個判斷標的
End Sub

Private Sub TextBox2_Change()
 strIsChanged = "TextBox2"
End Sub

Private Sub TextBox3_Change()
 strIsChanged = "TextBox3"
End Sub

Private Sub CommandButton1_Click()
 MsgBox strIsChanged '依全域變數內容,即可判斷哪個 TextBox 內容被改過
End Sub

不曉得有沒有誤解您的意思,歡迎互相討論,謝謝!
這是這個!! 沒錯,太感謝您了!
您回答的位置麻煩要改一下,我無法選為最佳解答。

2 個回答

0
misadm
iT邦高手 10 級 ‧ 2020-03-02 09:04:28
最佳解答

我用最直覺的方式,但不是最好的舉例給您看:

Dim strIsChanged As String  '全域變數

Private Sub TextBox1_Change() '當 TextBox1 的內容被改變時觸發
    strIsChanged = "TextBox1" '全域變數用來當作是一個判斷標的
End Sub

Private Sub TextBox2_Change()
    strIsChanged = "TextBox2"
End Sub

Private Sub TextBox3_Change()
    strIsChanged = "TextBox3"
End Sub

Private Sub CommandButton1_Click()
    MsgBox strIsChanged '依全域變數內容,即可判斷哪個 TextBox 內容被改過
End Sub

不曉得有沒有誤解您的意思,歡迎互相討論,謝謝!

misadm iT邦高手 10 級 ‧ 2020-03-02 09:05:40 檢舉

詳細的討論過程,大家可以參考問題下方的討論區

這樣的範例,最清楚不過了!!

1
paicheng0111
iT邦高手 1 級 ‧ 2020-02-19 21:33:53

你可在每個TextBox中設定MouseMove事件。
如此一來當滑鼠游標hover過TextBox時即可啟動該MouseMove事件。

我要發表回答

立即登入回答