0

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

我在 6 年前写了这个,但丢失了脚本,从那以后就没有接触过 vbScript。

所以我需要做的是,

  1. 检查 B 列(将是计算机名称)中具有值的所有单元格
  2. 将该值与为计算机名称保存的值进行比较
  3. 如果匹配,将计算机信息写入该行
  4. 如果没有匹配项,则将信息写入第一个空行

我不知道从哪里开始,因为 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
4

1 回答 1

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

    The script tries to access the cell (iRow,0) (not the cell at the offset (iRow,0)), which fails, because Cells() is not zero-based. The first row as well as the first column have the index 1 in the Cells() property. Not to mention that with Cells() you have to use the absolute row and column numbers, not the ones relative to ActiveCell as in Offset().

To fix the issue I'd remove On Error Resume Next and simply use Cells() instead of 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
于 2012-10-18T19:11:30.020 回答