2014-09-05 32 views
0

查找下一个问题堆栈溢出Excel查找下一个功能

我有什么变成一个长的VBA脚本。其目的是让用户输入全部或部分姓氏和名字,然后编辑记录。问题是数据可能有重复的搜索关键字。例如,John Smith的密钥ID是SmithJohn。假设表中还有一个Ray Smith(ID = SmithRay)。如果用户搜索史密斯,约翰史密斯将得到击中。如果用户真的想要Ray Smith,我已经给他们一个按钮来转到我的三页表单的下一页并再次搜索。我一直在尝试使用FindNext(),如http://msdn.microsoft.com/en-us/library/office/aa195732(v=office.11).aspx中所述 - 它不起作用。

我的脚本创建了一些全局变量。包括这些:

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

range.FindNext()neturns匹配条件的第一个单元格。如果你想得到下一个结果,你应该指定findnext的参数,它指定了要搜索的位置。 – 2014-09-05 02:48:28

+0

@Tony Lima你还在吗我会帮你的 – Dmcovey1993 2014-09-05 02:53:24

回答

0

range.FindNext()neturns第一单元相匹配的条件。如果你想得到下一个结果,你应该指定findnext的参数,它指定了要搜索的位置。例如:假设A3,A9和A23单元格在范围(“A1:A1000”)中包含“Smith”,其内容分别为“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 is SmithAdams”将出现。

我希望这个例子给你一些关于'find'和'findnext'用法的想法。

+0

完美!我确实感到困惑。希望这适用于Mac的Excel 2011。会让你知道。 – 2014-09-05 18:28:01

+0

只是关闭这个线程,我的代码现在工作正常。荣誉福姆。 – 2014-09-05 23:27:16