当我尝试让程序在文本中找到任何单词时
我使用以下代码查找单词并选择它并找到下一个单词,但我不知道编写代码来制作"之前的单词" 如果我有这样的句子例如:"回家,去学校再回家 ...如果我使用前面的代码搜索单词" go"这段代码可以找到第一个出现的单词" go"并选择它和下一个出现等等...... 如果我想回到第一次出现的单词"去"并选择它..什么是合适的代码? 我使用的代码:
Private Sub FindText(ByVal start_at As Integer)
target = Text2.Text
pos = InStr(start_at, " " & Text1.Text & " ", " " & target & " ", vbBinaryCompare)
If pos > 0 Then
' We found it.
Text1.SetFocus
TargetPosition = pos
Text1.SelStart = TargetPosition - 1
Text1.SelLength = Len(target)
Else
' We did not find it.
MsgBox "Not found."
'Text1.SetFocus
End If
FindText 1 'search word in text
FindText TargetPosition + 1 ' search the next word
答案 0 :(得分:1)
InStrRev功能
描述
从字符串的末尾返回一个字符串在另一个字符串中出现的位置。
语法
InstrRev(stringcheck, stringmatch[, start[, compare]])
InstrRev函数语法具有以下命名参数:
StrReverse功能
描述
返回一个字符串,其中指定字符串的字符顺序颠倒过来。
语法
StrReverse(expression)
答案 1 :(得分:0)
Text= "cat cat cat"
Search = "cat"
Pos = Instr(Text, Search)
Pos = Instr(Pos, Text, Search)
Pos = InstrRev(Text, StrReverse(Search), Len(Text) - Pos)
Dunno,如果它有效,但是类似的东西。
答案 2 :(得分:0)
我尝试使用strReverse函数,但是找到字符串反转非常混乱,然后在字符串中找到正确的索引,所以我用一个只使用强力搜索字符串的函数重写了答案。
该函数将字符串的左侧搜索到起始位置,因为我们从一开始就向后搜索,所以我们不关心任何东西。然后它接受片段的子串并运行Instr函数以查看是否找到匹配。如果没有找到匹配且Mid $函数的起始索引仍然大于1,则起始索引递减1并再次尝试Instr函数。
Private Enum SearchDirection
Forward = 0
Backwards = 1
End Enum
Private Sub Command1_Click()
SearchForString CInt(Text1.SelStart + Text1.SelLength), Check1.Value
End Sub
Private Sub SearchForString(ByVal vStart As Integer, Optional Direction As SearchDirection = Forward)
Dim intIndex As Integer ' receives return value of InStr function
Dim intStart As Integer ' the start parm for the Instr function
Dim strToSearch As String ' the string1 parm for the Instr function
Dim strToFind As String ' the string2 parm for the Instr function
strToSearch = Text1.Text
strToFind = Text2.Text
intStart = vStart
If Direction = Forward Then
Text1.SelStart = Len(strToSearch)
Text1.SelLength = 0
If intStart >= Len(strToSearch) Or vStart = 0 Then ' reset the start and begin the search again
intStart = 1
End If
intIndex = InStr(intStart, strToSearch, strToFind, vbBinaryCompare)
Else
intIndex = FindPrevious(vStart - Len(strToFind))
End If
If intIndex > 0 Then
Text1.SelStart = intIndex - 1
Text1.SelLength = Len(strToFind)
Text1.SetFocus
Else
Text1.SelStart = Len(strToSearch)
Text1.SelLength = 0
End If
End Sub
Private Function FindPrevious(ByVal vStart As Integer) As Integer
Dim strFragment As String
Dim intStart As Integer
Dim intIndex As Integer
If vStart > 0 Then
intStart = vStart
Else
intStart = Len(Text1.Text)
End If
strFragment = Left$(Text1.Text, intStart)
Do While intStart > 1 And intIndex = 0
intStart = intStart - 1
intIndex = InStr(Mid$(strFragment, intStart), Text2.Text)
Loop
FindPrevious = intStart
End Function
此代码依赖于Text1的SelStart属性。要使用此示例,请创建一个新项目并将代码添加到form1代码中。此代码将在字符串上重复循环。如果要显示消息,则需要修改它。错误处理由你决定。