使用vbscript搜索Excel列中的所有单元格

时间:2012-10-18 15:40:51

标签: windows excel scripting vbscript

我写了一个vbScript来在登录时为每个用户的计算机收集计算机信息,并且Id喜欢让脚本将信息记录到服务器上的Excel工作表中,每台计算机都有自己的行。

我写这篇文章就像6年前一样但是丢失了脚本并且从那时起就没有触及vbScript。

所以我需要做的是,

  1. 检查B列中的所有单元格(可能是计算机名称),其值为
  2. 将该值与计算机名称保存的值进行比较
  3. 如果匹配,请将计算机信息写入该行
  4. 如果没有匹配项,则将信息写入第一个空行
  5. 我不知道从哪里开始,因为vbScript对我来说很陌生。

    编辑 - 到目前为止我有这个循环并且回调测试它,但它只有1,而我有6行,其值为第0列。我尝试使用条件来检查值的单元格值知道存在,我得到一个运行时错误。

    Set objExcel = CreateObject("Excel.Application")
    Set objWorkbook = objExcel.Workbooks.Open("test.xlsx")
    Do While objExcel.ActiveCell.Offset(iRow,0).Value<>""
       WScript.Echo iRow
       If objExcel.Cells(iRow,0).Value = "three" Then
        WScript.Echo "three"
       End If
       iRow = iRow+1
    Loop
    WScript.Quit
    

1 个答案:

答案 0 :(得分:2)

你的脚本中很可能有一个On Error Resume Next,这会使代码无声地失败。

据我所知,你的代码可能正在发生的事情:

  • Do While objExcel.ActiveCell.Offset(iRow,0).Value<>""

    脚本检查活动单元格的偏移(iRow,0)处的单元格是否为空,以及它是否进入循环。

  • WScript.Echo iRow

    该脚本回显了iRow的当前值(可能为0)。

  • If objExcel.Cells(iRow,0).Value = "three" Then

    脚本尝试访问单元格 (iRow,0) 偏移 (iRow,0)处的单元格),失败,因为Cells()不是从零开始的。第一行和第一列在Cells()属性中具有索引1。更不用说使用Cells()时,您必须使用绝对行号和列号,而不是ActiveCell中与Offset()相对的那些。

要解决此问题,我会删除On Error Resume Next,只需使用Cells()代替ActiveCell.Offset()

iRow = 1
Do While objExcel.Cells(iRow, 2).Value <> ""
  WScript.Echo iRow
  If objExcel.Cells(iRow, 2).Value = "three" Then
    WScript.Echo "three"
  End If
  iRow = iRow + 1
Loop