0

ログイン時に各ユーザーのコンピューターのコンピューター情報を収集するvbScriptを作成しました。スクリプトに、サーバー上のExcelシートに情報を記録させ、各コンピューターに独自の行を設定したいと思います。

私はこれを6年前のように書きましたが、スクリプトを失い、それ以来vbScriptに触れていません。

だから私がする必要があるのは、

  1. 値を持つ列B(コンピューター名)のすべてのセルを確認します
  2. その値をコンピューターの名前のために保存された値と比較します
  3. 一致する場合は、その行にコンピューター情報を書き込みます
  4. 一致するものがない場合は、最初の空の行に情報を書き込みます

vbScriptは私にとってかなり異質なので、どこから始めればよいのかわかりません。

編集-これまでにこのループがあり、それをテストするためのエコーがありますが、1になりますが、列0に値を持つ6行があります。条件付きで、セルの値に存在することがわかっている値を確認し、ランタイムエラーが発生します。

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

    スクリプトはセル (iRow,0)(オフセットのセルではなく) にアクセスしようとしますが、がゼロベースではないため失敗します。最初の行と最初の列には、プロパティのインデックス 1 があります。のように相対的なものではなく、絶対的な行番号と列番号を使用する必要があることは言うまでもありません。 (iRow,0)Cells()Cells()Cells()ActiveCellOffset()

問題を修正するには、代わりに削除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
于 2012-10-18T19:11:30.020 に答える