vba - 键入时在 excel 中进行搜索

标签 vba excel

我正在处理数据输入。每次输入一条记录之前,我需要在大约 5000 行中搜索并定位一个单元格。我在想是否可以在键入时进行搜索,而不是在 excel 中使用搜索功能。我的想法是捕获电子表格的按键事件,如果它是一个字符(字母 'A' 到 'Z' 或 'a' 到 'z'),将它附加到一个名为 searchVal 的字符串,使用函数立即搜索.当用户按下 ESC 时,它会清理 searchVal。首先,我从网上得到以下代码,试图捕获 ESC keydown

Private searchVal As String


Private Sub Workbook_Activate()
    Application.OnKey "ESC", "CleanSearchKey"
End Sub

Private Sub Workbook_Deactivate()
    Application.OnKey "ESC"
End Sub

Sub CleanSearchKey()
  searchVal = ""
  MsgBox "CleanSearchKey"
End Sub

但是他的代码不起作用,似乎 CleanSearchKey 从未触发过。至于捕获'A'到'Z'和'a'到'z'的键,我不想知道如何在工作表中捕获它,所以我在sheet1上添加了一个输入框,将以下宏分配给输入框
Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
  If (KeyAscii >= 65 And KeyAscii <= 90) Or (KeyAscii >= 97 And KeyAscii <= 122) Then
    searchVal = searchVal & KeyAscii
  Else
    KeyAscii = 0
  End If

End Sub

但它接着说“编译错误:未定义用户定义的类型”。那么在工作表上捕获 key 的正确方法是什么?谢谢。

最佳答案

您为 TextBox 添加的代码仅适用于出现在 UserForm 上的 TextBox目的。我认为工作表上的文本框不会响应 KeyPress 之类的事件。 .

也就是说,您可以轻松配置一个简单的用户表单来执行此操作。

enter image description here

enter image description here

我稍微修改了你的代码。我认为这应该让你开始。在普通代码模块中,执行类似这样的过程来启动用户窗体。这将允许您从宏功能区菜单中显示表单。否则,您将不得不从即时窗口手动调用它或在 VBE 中按 F5。

Sub ShowForm()
    UserForm1.Show vbModeless
End Sub

创建一个用户窗体,并添加一个文本框。其默认名称应为 TextBox1 ,如果不是,请确保更改它。在 userForm 的代码模块中,执行以下操作:
Option Explicit
Dim searchVal As String
Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)

  searchVal = TextBox1.Value

  If (KeyAscii >= 65 And KeyAscii <= 90) Or (KeyAscii >= 97 And KeyAscii <= 122) Then
    searchVal = searchVal & Chr(KeyAscii)
    TextBox1.Value = searchVal
    Call FindValue

  End If
  If KeyAscii = 27 Then 'ESC
    searchVal = vbNullString
    TextBox1.Value = vbNullString

  Else:
    KeyAscii = 0
  End If

End Sub
Sub FindValue()
Dim rngFound as Range

    With ActiveSheet
        set rngFound = .Cells.Find(searchVal)
    End With
    If rngFound Is Nothing Then
        MsgBox searchVal & " not found!"
    Else
        MsgBox searchVal & " found at " & rngFound.Address
    End If
End Sub

关于vba - 键入时在 excel 中进行搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25891932/

相关文章:

excel - EXCEL VBA 中是否可以将多维数组作为参数传递?

vba - 通过 VBA 在 Outlook 的内部浏览器中打开网站

excel - 如何剪断一根绳子的一部分?

VBA Microsoft Visio 文档操作,无需打开应用程序

vba - 由于(可能)数据验证导致 Excel 崩溃

vba - 如何在 Excel 中将一系列单元格从十进制转换为十六进制

vba - 圈子无效数据宏

vba - 在vba中使用10或很多小数格式化为百分比

excel - 多列与多列查找

excel - 循环执行错误