如果Then语句在VBS中不能用于CSV文件

时间:2017-03-20 17:48:46

标签: excel-vba vbscript vba excel

我正在尝试为我的同事创建一个简单的脚本,我比检查某些项目(ID号和出勤点)的CSV文件更快,而不是手动将它们打开到Excel,扫描超过100行和然后重新导出为CSV(当你必须每天多次这样做时,所需的时间开始加起来)。为了开始,我创建了第一部分,只是检查出勤点是否大于允许的数量,然后抛出错误并让我们知道进入并修复它。不幸的是,我似乎无法让它工作......

uninitialized constant ApplicationRecord. 

非常感谢任何帮助:)

2 个答案:

答案 0 :(得分:0)

这适用于我,虽然非常缓慢。

我注意到的事情 -

  • 你从未告诉过文件的位置。即使使用拖放功能,您仍然必须知道在哪里寻找任何东西。

  • 你搞乱了后期绑定,但是没有正确设置ws.Range。我只是使用cells属性作为设置ws.Range起初可能看起来很混乱。

    Private Sub scoob()

    Dim oExcel
    Set oExcel = CreateObject("Excel.Application")
    oExcel.Workbooks.Open ("C:\Users\Ashleysaurus\Desktop\Book3.csv")
    Dim ws
    Set ws = ActiveSheet.Cells(1, 1)
    If ws > 28 Then
      MsgBox "Error: User with more than 28 presence checks!"
    ElseIf ws > 14 Then
      MsgBox "Error: User with more than 14 presence checks!"
    ElseIf ws > 12 Then
      MsgBox "Error: User with more than 12 presence checks!"
    ElseIf ws > 8 Then
      MsgBox "Error: User with more than 8 presence checks!"
    ElseIf ws > 4 Then
      MsgBox "Error: User with more than 4 presence checks!"
    End If
    

    End Sub

答案 1 :(得分:0)

VBScript不支持VBA等隐式对象,因此您无法直接使用ActiveSheet。您需要显示对象的显式句柄。在这种情况下,您可以通过应用程序对象访问活动工作表。此外,.Range("S11, S200")无效。范围字符串使用冒号定义。尝试这样的事情:

Set ws  = oExcel.ActiveSheet
Set rng = ws.Range("S11:S200")

有关将VBA转换为VBScript的详细信息,请参阅my blog

有关当前代码的进一步帮助(我怀疑rng > 28等将按您期望的方式运行)发布一个新问题,其中包含有关输入数据的更多信息。

作为替代方案,由于您的输入文件似乎是CSV,您可以将文件处理为文本文件:

filename  = "C:\path\to\your.csv"
delimiter = ","

Set fso = CreateObject("Scripting.FileSystemObject")
csv = fso.OpenTextFile(filename).ReadAll

rows = Split(csv, vbNewLine)
For Each row In rows
  fields = Split(row, delimiter)
  For Each field In fields
    'do stuff
  Next
Next