Vbscript Excel工作表行的匹配字符串的列号

Vbscript Excel工作表行的匹配字符串的列号,vbscript,Vbscript,我编写了一个代码来搜索一个数组变量,如果它出现在工作表的每一行中。现在,当找到匹配项时,我需要知道列号是什么,在哪里找到了搜索字符串。你知道如何用vb脚本实现吗 ParentColmnCount=ParentColmnCount-1 IntRow6=2 DataCount=0 Do While objSheet6.Cells(IntRow6,1).Value <> "" For DataCount=0 to UBound(VMHArray) If Not objShe

我编写了一个代码来搜索一个数组变量,如果它出现在工作表的每一行中。现在,当找到匹配项时,我需要知道列号是什么,在哪里找到了搜索字符串。你知道如何用vb脚本实现吗

ParentColmnCount=ParentColmnCount-1

IntRow6=2

DataCount=0

Do While objSheet6.Cells(IntRow6,1).Value <> ""

For DataCount=0 to UBound(VMHArray)
    If Not objSheet6.Range(objSheet6.Cells(IntRow6,1),objSheet6.Cells(IntRow6,ParentColmnCount)).Find(VMHArray(DataCount)) Is Nothing Then
MsgBox(objSheet6.Range(objSheet6.Cells(IntRow6,1),objSheet6.Cells(IntRow6,ParentColmnCount)).Find(VMHArray(DataCount)).Columns)

    End If
      Next

IntRow6=IntRow6+1

Loop
知道为什么吗


感谢演示脚本演示如何使用。查找:

  Dim oFS    : Set oFS  = CreateObject("Scripting.FileSystemObject")
  Dim sFSpec : sFSpec   = oFS.BuildPath(oFS.GetAbsolutePathname("..\xls"), "13763603.xls")
  Dim oXls   : Set oXls = CreateObject("Excel.Application")
  Dim oWb    : Set oWb  = oXls.Workbooks.Open(sFSpec)
  Dim oWs    : Set oWs  = oWb.Worksheets(2)
  Dim rSearch, rFound, adrFirst

  Set rSearch = oWs.Cells(1, 1).EntireRow
  Set rFound = rSearch.Find("b1")
  WScript.Echo 1, "TypeName(rFound):", TypeName(rFound), rFound.Row, rFound.Column

  Set rSearch = oWs.Range(oWs.Cells(1, 1), oWs.Cells(5, 3)) 
  Set rFound = rSearch.Find("nix")
  WScript.Echo 2, "TypeName(rFound):", TypeName(rFound)

  Set rFound = rSearch.Find("alpha")
  If Not rFound Is Nothing Then
     adrFirst = rFound.Address
     Do
         WScript.Echo 3, "TypeName(rFound):", TypeName(rFound), rFound.Row, rFound.Column
         Set rFound = rSearch.FindNext(rFound)
     Loop Until rFound.Address = adrFirst
  End If

  oWb.Close  
  oXls.Quit
此工作表的输出:

:

更新:

从输出中可以看出

----------------------
4 1 TypeName(rFound): Range 1 3
Wahr     rFound.Address <> adrFirst
Falsch   rFound Is Nothing
Wahr     Not rFound Is Nothing
Wahr     rFound.Address <> adrFirst And Not rFound Is Nothing
用一些复杂的东西,更不用说:像傻瓜一样

Loop Until rFound.Address <> adrFirst And Not rFound Is Nothing
循环直到rFound。地址adrFirst和Not rFound都是空的

到底是什么让你这么做的?

到目前为止,我从你那里得到了极好的帮助。。。谢谢Ekkehard我的新问题,有更快的代码吗?根据我的研究,我认为FindNext()方法在一次找到同一行时搜索相同的值(如果该值在同一行中存在或不存在)。因此,如果第二次出现在同一行中,则循环将继续,否则rFound.Address和adrFirst将相同,循环条件“rFound.Address adrFirst”应该打破循环以进一步迭代。但在我的例子中,它并没有发生,它落入了永久循环,正如我在更新的代码中提到的那样,输出证明了这一点。那么原因是什么?@user1878162-你的假设是错误的;请仔细研究我的更新,看看你为什么被误导的循环条件迫使立即退出:“不被发现没有什么”总是正确的,“rdab.AdrdAdReST”是真的(因为找到第二个匹配),现在考虑“到”和“在”之间的区别。现在我明白了。谢谢你的帮助!
1 TypeName(rFound): Range 1 2
2 TypeName(rFound): Nothing
3 TypeName(rFound): Range 1 3
3 TypeName(rFound): Range 2 1
3 TypeName(rFound): Range 4 2
3 TypeName(rFound): Range 5 3
----------------------
4 1 TypeName(rFound): Range 1 3
Wahr     rFound.Address <> adrFirst
Falsch   rFound Is Nothing
Wahr     Not rFound Is Nothing
Wahr     rFound.Address <> adrFirst And Not rFound Is Nothing
  WScript.Echo "----------------------"
  Dim nCnt : nCnt = 0
  Set rFound = rSearch.Find("alpha")
  If Not rFound Is Nothing Then
     adrFirst = rFound.Address
     Do
         nCnt = nCnt + 1
         If nCnt > 9 Then WScript.Echo "Aborting" : Exit Do : End If
         WScript.Echo 4, nCnt, "TypeName(rFound):", TypeName(rFound), rFound.Row, rFound.Column
         Set rFound = rSearch.FindNext(rFound)
         WScript.Echo CStr(rFound.Address <> adrFirst), vbTab, "rFound.Address <> adrFirst"
         WScript.Echo CStr(rFound Is Nothing), vbTab, "rFound Is Nothing"
         WScript.Echo CStr(Not rFound Is Nothing), vbTab, "Not rFound Is Nothing"
         WScript.Echo CStr(rFound.Address <> adrFirst And Not rFound Is Nothing), vbTab, "rFound.Address <> adrFirst And Not rFound Is Nothing"
         WScript.Echo
     Loop Until rFound.Address <> adrFirst And Not rFound Is Nothing
  End If
 Loop Until rFound.Address = adrFirst
Loop Until rFound.Address <> adrFirst And Not rFound Is Nothing