2014-04-30 42 views
0

我在Excel中有兩列有相應的項目。我的程序需要檢查textbox3的值,如果該值存在(不區分大小寫)在第一列,那麼textbox4將採取相應的值。所以基本上,用戶在文本框3中鍵入一個項目的名稱並按下回車鍵(鍵,而不是按鈕)。如果它存在,那麼textbox4將採取相應的值。當輸入按下時,文本框激活代碼

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) 
    If KeyCode = 13 Then 
     Dim i As Integer 
     Dim abrv As String 
     abrv = TextBox3.Text 
     Sheet2.Activate 
     For i = 1 To 2494 
      If abrv = Range("a" & i).Value Then 
       TextBox4.Text = Range("b" & i).Value 
      End If 
     Next i 
     If TextBox4.Text = "" Then 
      TextBox4.Text = "Abbreviation does not exist." 
     End If 
    End If 
End Sub 

回答

0

您必須指定的範圍是將片試試這個:如果你使用這個

Range("a" & i) 

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) 
If KeyCode = 13 Then 
    Dim i As Integer 
    Dim abrv As String 
    abrv = TextBox3.Text 
    Sheet2.Activate 
    For i = 1 To 2494 
     If abrv = Sheet2.Range("a" & i).Value Then 
      TextBox4.Text = Sheet2.Range("b" & i).Value 
     End If 
    Next i 
    If TextBox4.Text = "" Then 
     TextBox4.Text = "Abbreviation does not exist." 
    End If 
End If 

而且你可能會得到一個錯誤與此:

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) 
    If KeyCode = 13 Then 
     Dim i As Integer 
     Dim abrv As String 
     abrv = TextBox3.Text 
     Sheet2.Activate 
     For i = 1 To 2494 
      If abrv = Sheet2.Range("a" & strings.trim(str(i))).Value Then 
       TextBox4.Text = Sheet2.Range("b" & strings.trim(str(i))).Value 
      End If 
     Next i 
     If TextBox4.Text = "" Then 
      TextBox4.Text = "Abbreviation does not exist." 
     End If 
    End If 
+0

當我點擊輸入後在用戶窗體中輸入n放棄光標移動到下一個文本框,而不是檢索相應的值。另外,sheet2.activate不會讓範圍查看錶單2嗎?只是好奇,我不知道它是如何工作的。 – user3487972

+0

您可以使用類似TextBox1.SetFocus的內容將焦點返回到前一個文本框。 Sheet2.activate僅將焦點轉換爲sheet2。 – Pedrumj

+0

謝謝,您發佈的第一套代碼完美無瑕!我忘了將textbox1_keydown更改爲textbox3_keydown – user3487972

相關問題