获取错误(800A0035)引用已执行的一行代码

时间:2014-10-22 17:51:29

标签: function vbscript wsh filesystemobject file-not-found

我现在正在编写一个脚本,它使用文件系统对象来读取文本文件,然后将其删除。发生这种情况的代码部分我已经写成了函数。我已经测试了这个函数,以及它所依赖的一些其他函数,并且它工作正常。但在最终产品中,它只是具有16个不同功能/子程序的脚本的一部分。将其合并到最终产品后,此文件无法正常工作。或者,至少Windows脚本主机告诉我它没有。

我已经测试过使用Echo语句来追踪问题,因为WSH引用的行应该已经正确执行,这是因为当我运行脚本时,相关行之后的代码工作正常。当我在函数调用之后回显时,我得到了一个Echo(我编写了一个简单的函数,让脚本在调用更多函数之前等待,而echo语句就在那之后,所以函数肯定会在错误发生之前完成执行)。我也尝试在下一个要调用的函数的开头插入一个echo语句(字面意思是在我实例化第二个函数之后),然后我没有得到回声。

这是有问题的功能。错误引用的行是Set objRECID。

Function PullRecords
  Set objWSH = CreateObject("WScript.Shell")
  Set objFSO = CreateObject("Scripting.FileSystemObject")

  strIP = "192.168.1.185"
  strOutFileCMD = ".output OUT" & strIP & ".txt"
  strOutFile = "C:\Users\" & GetLoggedOnUsername & "\Documents\SQLite3\" & "OUT" & strIP & ".txt"     'Output of each element grab
  strCommand = "FROM ZCDataField WHERE RECORD_ID="
  strRECIDPath = "C:\Users\" & GetLoggedOnUsername & "\Documents\SQLite3\" & "RECID" & strIP &     ".txt" 'Output of GetRECID
  strFinalCSVPath = "C:\Users\" & GetLoggedOnUsername & "\Documents\SQLite3\" & strIP & ".csv"
  strSQLite3Path = "C:\Users\" & GetLoggedOnUsername & "\Documents\SQLite3\"
  strProcName = "SQLite3.exe"

  'Element ID's (for reference)
  'intpt_item = "275426222"
  'intpt_description = "275466434"
  'intpt_custitem = "275466431"
  'intpt_qty = "275466713"
  'intpt_name = "275466710"
  'intpt_date = "275435183"
  'intpt_unixmil = "275578832"

  'Options for text files
  intForReading = 1
  intForWriting = 2
  intForAppending = 8
  boolOverwriteTrue = True
  boolOverwriteFalse = False

  Set objCSV = objFSO.CreateTextFile(strFinalCSVPath,boolOverwriteTrue) 'Creates final CSV to be     written to/
  Set objRECID = objFSO.OpenTextFile(strRECIDPath,intForReading)

  'Cycles through records
  Do Until objRECID.AtEndOfStream
   strRECID = objRECID.ReadLine
   Set objELID = objFSO.OpenTextFile(strSQLite3Path & "Element IDs.txt",intForReading) 'Need this      here so that script restarts at beginning of file each time.
   'Cycles through elements
   Do Until objELID.AtEndOfStream
    Set objBAT = objFSO.CreateTextFile(strSQLite3Path & strIP & dblUnixT &     ".bat",boolOverwriteTrue)
     objBAT.Write ("cd /D C:\Users\" & GetLoggedOnUsername & "\Documents\SQLite3")
     objBAT.WriteLine
     objBAT.Write ("sqlite3 " & strIP & ".db < " & strIP & ".txt")
    objBAT.Close

    Set objBAT = Nothing
    Set objCMDS = objFSO.CreateTextFile(strSQLite3Path & strIP & ".txt",boolOverwriteTrue)
     objCMDS.Write (".mode tabs")
     objCMDS.WriteLine
     objCMDS.Write (strOutFileCMD)
     objCMDS.WriteLine
     strELID = objELID.ReadLine  'Gets ELEMENT_ID
     objCMDS.Write ("SELECT VALUE_TXT,VALUE_NUM " & strCommand & strRECID & " AND ELEMENT_ID=" &     strELID &  ";") 'Gets element
     objCMDS.WriteLine   
     objCMDS.Write (".exit") 'Exits SQLite3
    objCMDS.Close
    Set objCMDS = Nothing   
    objWSH.Run(strSQLite3Path & strIP & dblUnixT & ".bat")


    'Makes script wait until BAT is done.
    intRunning  = 1
    Do Until intRunning = 0
     intRunning = IsRunning(strProcName)
    Loop

    Wscript.Sleep(500)

    Set objOut = objFSO.OpenTextFile(strOutFile)
    strOut = objOut.ReadLine
    objOut.Close
    Set objOut = Nothing
    objCSV.Write strOut & ","
    Loop
  'Make string of line and then delete 1 character on right to get rid of ,. Then replace line.  
   objCSV.Write Chr(8)
   objCSV.WriteLine
   objELID.Close
   Set objELID = Nothing
  Loop

  objCSV.Close
  objRECID.Close
  Set objCSV = Nothing
  Set objRECID = Nothing
  objFSO.DeleteFile strRECIDPath

  'objFSO.DeleteFile strOutFile

  InvertText(strFinalCSVPath)
  PullRecords = strFinalCSVPath

  Call FuncSubEndToken
End Function

如果它有用,这里是我调用的FuncSubEndToken函数。

Function FuncSubEndToken
 intFuncSubEndToken = 1
End Function

以下是我在调用PullRecords函数时的使用方法。

Call PullRecords
 'FuncSubEndTokenWait
 Do Until intFuncSubEndToken = 1
 Loop
 intFuncSubEndToken = 0

非常感谢任何帮助。

编辑:我尝试过使用On Error Resume Next,我只是在我发布的部分之后挂起了wscript。它甚至没有进入下一个功能。

编辑2:我已经尝试注释掉删除PullRecords函数所需文件的行,即使该函数在文件完成后执行。现在显而易见的是,调用此函数两次,另一个函数调用两次(然后它会在某种程度上错误地调用它)。我看过,这两个函数只被调用一次(并且它们不在循环中,所以这绝对不是问题)。我调用一个函数,并按照它们似乎正在运行的顺序将它们传递给这两个函数的输出。但我不是在这里调用函数。但也许wscript认为我是?

编辑3:我删除了使用其他两个函数返回的函数(好了,注释掉了),我仍然遇到同样的问题。

1 个答案:

答案 0 :(得分:0)

所以,我现在已经弄明白了这个问题。在尝试获取输出时,我似乎对函数的工作方式有些误解。我以为你调用了一个函数,然后函数名是输出。但是,似乎您不需要使用call语句来执行函数。因此,在尝试使用我的函数输出时,我无意中调用了它们。