查找Stack Overflow的下一个问题
我有什么东西变成了一个很长的VBA脚本。目标是让用户键入姓氏和名字的全部或部分,然后编辑记录。问题是数据可能有重复的搜索键。例如,John Smith的密钥ID是SmithJohn。假设表中还有Ray Smith(ID = SmithRay)。如果用户搜索史密斯,约翰史密斯将获得命中。如果用户真的想要Ray Smith,我已经给了他们一个按钮,可以转到我的三页表格的下一页并再次搜索。我一直在尝试使用http://msdn.microsoft.com/en-us/library/office/aa195732(v=office.11).aspx中描述的FindNext() - 它不起作用。
我的脚本会创建许多全局变量。包括这些:
Dim cPersonID As String
Dim lRow As Long
Dim lPart As Long
Dim nLastRow As Long, i As Long
Dim strSearch As String
Dim aCell As Range , bCell As Range
Dim ws As Worksheet
继续我的例子,用户在姓氏文本框中键入Smith。因此,cPerson ID将具有值“Smith”lRow将具有此记录的行号,nLastRow将具有最后一个非空行的值。我的搜索表达式(在程序btnNameFindP1_Click()中)如下所示:
Set aCell = ws.Range("A1:A" & nLastRow).Find(What:=strSearch, _
LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByColumns, _
SearchDirection:=xlNext, MatchCase:=False)
由于我不明白的原因,aCell最终包含搜索字符串的完整值(在本例中为SmithJohn)。 strSearch也以该值结束。但是cPersonID只包含搜索字符串(Smith)。我可以忍受。
如果用户单击按钮搜索下一个匹配字段,脚本会将焦点移至Page2并尝试搜索下一个匹配项。这是脚本:
Private Sub btnNameFindNextP1_Click()
frmLWVdataEditFindTwoPage.Value = 1
Set ws = Worksheets("8_4MemDB_NHS")
'Find next matching member in table
Set aCell = ws.Range("A1:A" & nLastRow).FindNext()
我尝试了很多FindNext()变体。我怀疑我可能没有处理多屏幕表单的Page1和Page2之间的转换。但此时我会尝试任何建议。经过三个小时的反复试验,我已经没有想法了。
谢谢, 托尼利马
答案 0 :(得分:0)
range.FindNext()neturns匹配条件的第一个单元格。如果要获取下一个结果,则应指定findnext的参数,该参数指定后面要搜索的位置。
例如:假设A3,A9和A23细胞包含" Smith"在范围内(" A1:A1000"),他们的内容是" SmithJohn"," SmithRay"," SmithAdams"分别
set aRange = range("A1:A1000);
firstHit = aRange.Find(What:="Smith", _
LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByColumns, _
SearchDirection:=xlNext, MatchCase:=False);
msgbox("FirstHit is ",firstHit.value);
secondHit = aRange.FindNext(firstHit);
msgbox("SecondHit is ",firstHit.value);
thirdHit = aRange.FindNext(secondHit);
msgbox("ThirdHit is ",firstHit.value);
执行时, 单元格A3设置为firstHit,消息" FirstHit设置为SmithJohn"会出现,
然后 单元格A9设置为secondHit,消息" SecondHit设置为SmithRay"会出现,
然后 单元格A23设置为thirdHit,而messega" ThirdHit设置为SmithAdams"将会出现。
我希望,这个例子可以帮助您了解“找到”的用法。和' findnext'。