2013-04-10 24 views
2

我不理解以下任何結果。我知道InStrRev給出了最後'比賽'的位置(從右到左)&當我不給出開始位置時可以理解結果。不管開始時開始的左或右,1或2應該給其他比0提供開始位置時InStrRev出現不規則行爲

Private Sub Form_Load() 
Dim TestString As String 
TestString = "ABCDEFGHCIJK" 
msgbox = InStrRev(TestString, "C", 1) 'produces 0 if optional start parameter is 1 or 2 
msgbox = InStrRev(TestString, "C", 3) 'produces 3 if start parameter is 3-8 
msgbox = InStrRev(TestString, "C", 9) 'produces 9 if start parameter is 9-12 
'13+ produces 0 as expected since its length of string is only 12 
End Sub 

微軟文檔的功能的東西:access & visual studio。在視覺工作室頁面上,我嘗試了頁面底部的示例&得到了相同的結果,所以我知道它的工作。但是我的大腦沒有得到。我也明白與& InStr函數沒有開始位置

+0

HansUp搜索:請問你爲什麼在你編輯刪除VBA標籤? – gregg 2013-04-10 15:58:40

+0

當然,從meta.stackoverflow我的理解是,我們鼓勵使用更具體的應用程序vba標記,而不是一般vba標記。請參閱標記wiki上的指南:http://stackoverflow.com/tags/vba/info也就是說,我不認爲這是一個主要問題,如果您想將其添加回去,我將不會再更改它。 – HansUp 2013-04-10 16:08:22

回答

1

我會提供一個不同的例子,我希望使情況更加清晰。在立即窗口(去那裏與按Ctrl + 克快捷方式)...

TestString = "123456789" 
? InStrRev(TestString, "3", 2) 
0 

該聲明要求InStrRev從第二個字符開始TestString和向後的字符搜索「 3「。由於TestString的前兩個字符是「12」「3」不在該子找到,因此InStrRev返回0

在本例中,我要求InStrRev開始從第四個字符搜索。 ..

? InStrRev(TestString, "3", 4) 
3 

由於TestString的前四個字符是「1234」「3」被發現作爲第三字符,所以InStrRev返回3.

關於聲明「1或2應該給0以外的東西」 ......這是不正確的,如我的第一個例子所示。

+0

哦,我想我明白了!看到開始位置並不是整個字符串的開始位置。例子:在你的第一個例子中,我認爲它會搜索剩餘的:3456789因此如果在開始位置之前仍包含字符,它將產生1或3;在我看來,壞名字的選擇。正如你注意到的那樣,它搜索的是哪個開始的子字符串告訴它抓取左邊的字符(在我們的例子中是「12」) – gregg 2013-04-10 15:55:06

+0

OK,好像你期望'InStrRev()'使用* start *作爲Mid() 'do ...'Mid(「123456789」,4)'會返回子字符串*「456789」*。不幸的是,這不是* InStrRev()開始的意思。 ;-)乾杯,漢斯。 – HansUp 2013-04-10 16:01:54

+0

看到我認爲我的困惑是因爲我將它與InStr進行了比較,許多在線網站也進行了比較。例如:'InStr(2,TestString,「3」)'返回3.我猜測這個作品是基於我原來的邏輯:它會搜索剩下的:3456789因此產生了3個,因爲它仍然包含起始位置之前的字符。而_start_ of 4產生0 – gregg 2013-04-10 16:17:33

2

OMG我剛剛得到它!我很糟糕,我有一種傾向於過度思考的事情。下面的是什麼,我想我掛了&一些文件並沒有明確澄清:

  • 兩種功能左側
  • 返回值開始位置開始的字符在原始字符串中的位置(如果找到),而不管字符串中的哪個位置要求函數開始其搜索

沒有HansUp,我不知道這一點。希望下面的是另一種方式來看待它,以防其他人也有同樣的問題達成諒解:

  • 下面的回報5.之前,位置是1,所以在B 2 &之前。我們告訴它在開始之前串ç&搜索其餘部分(CDEFGHIJKLMN),它確實有的E仍然

    InStr(3, "ABCDEFGHIJKLMN", "E")

  • 下面返回0。我們告訴它在啓動前的ç&搜索剩餘字符串(AB),其中沒有E。究其原因,字符串的其餘部分是在AB是因爲它由右至左

    InStrRev("ABCDEFGHIJKLMN", "E", 3)

+1

Aha,*「起始位置從左邊開始」*;我沒有想到要澄清這一點。我很高興你解除封鎖。 :-) – HansUp 2013-04-10 21:37:52