2017-06-22 59 views
0

我正在尝试制作一个用户窗体,可以使用ID号来调出数据。如何使用查找功能来搜索文本框的值?

我想引用一个文本框并选择它,然后用它作为参考以填写表单中的时间和注释。我认为是我不能把“txtID.Value”放入查找功能。

这里是我的代码示例:

Sheet1.Select 
Columns("A:A").Select 
Selection.Find(What:="txtID.Value", After:=ActiveCell, LookIn:= _ 
xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:= _ 
xlNext, MatchCase:=False, SearchFormat:=False).Activate 
ActiveCell.Select 

ActiveCell.Offset(0, 8).Value = txtTime2 
ActiveCell.Offset(0, 9).Value = txtComment2 

回答

1

当使用Find功能,建议使用Range对象,并将其设置为结果。此方法允许您捕获Find无法在搜索范围Sheet1.Columns("A:A")中找到匹配的可能情形。

此外,尽量避免使用SelectSelectionActiveCell,并使用完全合格的Range对象(如下面的代码中所示)。

代码

Dim FndRng As Range 

Set FndRng = Sheet1.Columns("A:A").Find(What:=txtID.Value, LookIn:=xlFormulas, LookAt:=xlPart, _ 
       SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False) 

If Not FndRng Is Nothing Then ' successful find 
    FndRng.Offset(, 8).Value = txtTime2 
    FndRng.Offset(, 9).Value = txtComment2 
Else ' unable to fins the value in txtID 
    MsgBox "Unable to find " & txtID.Value & " in Sheet1" 
End If 

注意:如果你有这样的代码outisde的User_Form模块,那么你就需要设法让txtID.Value时添加的User_Form参考。

对于eaxmple,假设您的窗体的名称是UserForm1,那么这行更改为:

Set FndRng = Sheet1.Columns("A:A").Find(What:=UserForm1.txtID.Value, LookIn:=xlFormulas, LookAt:=xlPart, _ 
        SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False) 
+0

非常感谢,我把它放进去了,它确实运作良好!我非常感谢你的帮助!我会让你知道,如果它在明天通过整个工作簿的作品!再次感谢! – Mdaox

+0

@Mdaox认真吗?你更喜欢另一种解决方案?使用“选择”和“选择”? –

+1

他做了工作。不过,我切换到您的代码,使其更可靠。感谢您的帮助。我真的很感激! – Mdaox

0

,使其工作,你将不得不把代码如下,这是相当自我explainatory。

Selection.Find(What:=Userform1.textbox1.value, After:=ActiveCell, LookIn:= _ 
xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:= _ 
xlNext, MatchCase:=False, SearchFormat:=False).Activate 
ActiveCell.Select 

希望这有助于

+0

感谢它确实帮助!我感谢您的帮助! – Mdaox