iT邦幫忙

2

VBA EXCEL的問題

不好意思 又把那個自己的寫的遊戲程式修改

'我把它改成在TB1輸入完按下enter鍵才去執行TB1_change的程式
'我TB1是textbutton  可輸入文字框

Private Sub TB1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
  If keycode = 13 Then
   TB1_change
  End If
End Sub  

Private Sub TB1_change()
    Sheets("玩家資料").Activate
    lastrow = ActiveSheet.UsedRange.Rows.Count + ActiveSheet.UsedRange.Rows(1).Row - 1
    For i = lastrow To 2 Step -1
     If Cells(i, "A") = TB1.Text Then
       Range("A" & i).Activate
       L1.Caption = Cells(i, "B")
      End If
     Next
End Sub

然後我執行 輸入玩家資料有的玩家JOHN
我還沒按enter鍵VBA就自動執行TB1_change
這是怎回事 請大家知道問題在哪裡的 抽空指教一下 多謝

2 個回答

2
paicheng0111
iT邦高手 1 級 ‧ 2019-10-29 15:09:46
最佳解答

捕捉Enter鍵要用KeyDown事件,不能用KeyPress事件。

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode = 13 Then Call mySub
End Sub

Private Sub mySub()
    Sheets("玩家資料").Activate
    lastrow = ActiveSheet.UsedRange.Rows.Count + ActiveSheet.UsedRange.Rows(1).Row - 1
    For i = lastrow To 2 Step -1
     If Cells(i, "A") = TB1.Text Then
       Range("A" & i).Activate
       L1.Caption = Cells(i, "B")
      End If
     Next
End Sub

另外,你的TB1_KeyPress程序應該只認識KeyAscii變數,不認識KeyCode變數。

看更多先前的回應...收起先前的回應...

我能問個問題嗎 ByVal Shift As Integer 這是按下shhift鍵的
可否省略 我已經照改了 真的可以成功執行了 再次多謝

ByVal Shift As Integer是VBE自動生成的,不要去改它。

小魚 iT邦大師 1 級 ‧ 2019-10-29 15:51:31 檢舉

他只是一個變數.

原來如此 再次多謝

1
allenlwh
iT邦研究生 2 級 ‧ 2019-10-29 14:20:56

TB1是textbutton 可輸入文字框
做文字輸入時,就會同時會觸發TB1_change事件

小魚 iT邦大師 1 級 ‧ 2019-10-29 14:45:08 檢舉

喔, 對.
因為是change事件,
應該要另外寫一個Function.

那我要怎麼去寫 才能讓還沒按下Enter鍵可輸入文字框 是不動的
因為玩家若想輸入JOHNSON 再輸入JOHNSON的過程會碰到JOHN這樣可能也會觸發TB1_change的事件

我要發表回答

立即登入回答