从Excel读取时,是否可以使我的VBScript程序忽略字段?

时间:2014-12-28 23:35:48

标签: excel ms-access vbscript

我对我将要提出的问题进行了一些阅读,但我无法找到具体的答案。

我正在VBScript中编写一个程序,它将读取一个excel文件,然后更新一个Access数据库。

它运作良好,但我可以预见到的问题是:

excel文件在指定字段上有空白时会发生什么?我不希望脚本文件更新"空白"对于数据库,如果excel文件中有空白,我希望它在数据库中保持不变。如果没有,请照常进行。

目前,它会将此作为空白读取并将空白插入数据库中的行。

这可能吗?对于脚本基本上忽略它读取的字段(在Excel中)是空白的,而只更新(在数据库中)实际上有数据(在Excel中)的字段?

目前,它在数据库中的字段中说不。这只是一个简短的代码示例。在Excel工作表中,它在正确的列中显示“是”。

Do Until objExcel.Cells(intRow,1).Value = ""
 asset_Tag = objExcel.Cells(intRow, 1).Value
 ebay = objExcel.Cells(intRow, 2).Value
 intRow = intRow + 1

objRecordSet.Open "UPDATE Test SET Listed_Ebay = '" & ebay & "' WHERE Asset_Tag = '" & asset_Tag & "'", _
    objConnection
Loop

1 个答案:

答案 0 :(得分:0)

如果您不愿意在代码中添加20个If语句,那么您肯定可以使用Excel的本机COUNTA功能来确保在更新操作之前有20个值。

With objExcel
  Do Until .Cells(intRow,1).Value = ""
    If .Application.CountA(.Cells(intRow, 1).Resize(1, 20)) = 20 Then
      asset_Tag = .Cells(intRow, 1).Value
      ebay = .Cells(intRow, 2).Value
      objRecordSet.Open "UPDATE Test SET Listed_Ebay = '" & ebay & "' WHERE Asset_Tag = '" & asset_Tag & "'", objConnection
    End if
    intRow = intRow + 1
  Loop
End With

我猜了一下哪些 20个值是要填充的,但我想你可以理解。

EDITNOTE¹:根据循环重新排序代码行以维护 intRow

编辑注意事项²:如果新值的UPDATE为零,您可能需要有条件地将原始值传回LEN查询。

Dim qry as String
qry = "UPDATE Test SET " & _
         "Listed_Ebay = Iif(CBool(Len('" & ebay & "')), '" & ebay & "', Listed_Ebay), " & _
         "Listed_Amazon = Iif(CBool(Len('" & amzon& "')), '" & amzon & "', Listed_Amazon), " & _
         "Listed_POS = Iif(CBool(Len('" & pos& "')), '" & pos & "', Listed_POS) " & _
      "WHERE Asset_Tag = '" & asset_Tag & "'"
objRecordSet.Open qry, objConnection

我只是通过你提供的原始一个字段示例制作东西,但你应该能够为你自己的8个字段转录它。我在这里使用LEN文字值,但将数字与零(甚至是LEN进行比较也是合适的。