2014-09-05 35 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