2010-07-16 40 views
7

Tôi nhận được lỗi "đối tượng bắt buộc" trên dòng 54, dòng cuối cùng, khi tôi chạy tập lệnh sau. Chuyện gì thế?Lỗi VB "đối tượng được yêu cầu"

Option Explicit 
Dim cmdString, g_strHostFile, filepath, flexnetpath, importcmd, dtmToday, dtmYesterday, dtmFileDate, param1, param2, param3, i4path, objFSO, objTextStream, g_strComputer, WshShell 
'Initialize global constants and variables. 
Const FOR_READING = 1 
g_strHostFile = "D:\dataimports\LUM_servers.txt" 
i4path = "C:\IFOR\WIN\BIN\i4blt.exe" 
filepath = "D:\DataImports\" 
flexnetpath = "C:\Program Files (x86)\Flexnet\Manager\Admin" 
importcmd = flexnetpath & "flexnet bulkimport -uadmin -padmin -f" & filepath 
dtmToday = Date() 
dtmYesterday = Date() - 1 
dtmFileDate = Year(Date) & padDate(Month(Date)) & padDate(Day(Date)) 
param1 = "-r1 -e2,4 -n " 
param2 = " -v 'Dassault Systemes' -b " 
param3 = " -g " 
WScript.Echo "i4Path: " & i4path 
WScript.Echo "FilePath: " & filepath 
WScript.Echo "flexnetpath: " & flexnetpath 
WScript.Echo "importcmd: " & importcmd 
WScript.Echo "dtmToday: " & dtmToday 
WScript.Echo "dtmYesterday: " & dtmYesterday 
WScript.Echo "dtmFileDate: " & dtmFileDate 

'Read LUM Server Names from text file. 
Set objFSO = CreateObject("Scripting.FileSystemObject") 
If objFSO.FileExists(g_strHostFile) Then 
    Set objTextStream = objFSO.OpenTextFile(g_strHostFile, FOR_READING) 
Else 
    WScript.Echo "Input file " & g_strHostFile & " not found." 
    WScript.Quit 
End If 
'Loop through list of computers and perform tasks on each. 
Do Until objTextStream.AtEndOfStream 
    g_strComputer = objTextStream.ReadLine 
WScript.Echo "Processing Server: " & g_strComputer 
Set cmdString = i4path & param1 & g_strComputer & param2 & dtmYesterday & param3 & dtmToday & filepath & g_strComputer & "_" & dtmFileDate & "_lum.lrl" 
WScript.Echo "Processing Command: " & cmdString 
Set WshShell = WScript.CreateObject("WScript.Shell") 
WshShell.Run "cmdString" 
Loop 
objTextStream.Close 
Set WshShell = WScript.CreateObject("WScript.Shell") 
WScript.Echo "Processing Bulk Import: " & importcmd 
WshShell.Run "importcmd" 

Function padDate(intNumber) 
if intNumber <= 9 Then 
    padDate = "0" & CStr(intNumber) 
Else 
    padDate = CStr(intNumber) 
End If 
End Function 
+0

trên dòng nào bạn gặp phải lỗi này? – Sarfraz

+0

Bạn có biết về lỗi đang được nâng lên không? Bạn có thể sử dụng 'WScript.Echo' hoặc' MsgBox' với một số văn bản chỉ để bạn có thể thu hẹp khu vực trong mã nơi xảy ra lỗi. –

+0

Dòng 54, dòng cuối cùng. – ChuckO

Trả lời

6

Có một số vấn đề, tôi nghĩ vậy.

importcmd = flexnetpath & "flexnet bulkimport -uadmin -padmin -f" & filepath 

Bạn có lẽ cần một số không gian:

importcmd = flexnetpath & " flexnet bulkimport -uadmin -padmin -f " & filepath 

Set chỉ được sử dụng với các đối tượng, không dây, vì vậy nó cần được loại bỏ từ dòng này:

Set cmdString = i4path & param1 & g_strComputer & param2 & dtmYesterday & param3 & dtmToday & filepath & g_strComputer & "_" & dtmFileDate & "_lum.lrl" 

Tôi khá chắc chắn bạn có nghĩa là

WshShell.Run importcmd 

Hoặc

WshShell.Run """" & importcmd & """" 
5

Object cần được nâng lên khi bạn có một tuyên bố như Set x = y trong đó x không phải là một loại đối tượng, nhưng thay vào đó là một kiểu đơn giản (Integer, Double, Date, vv). Tôi nghĩ rằng dòng

Set cmdString = i4path & param1 & g_strComputer & param2 & ... 

gây ra lỗi và tôi nghĩ tất cả những gì bạn phải làm là xóa câu lệnh Set. Tôi nghĩ rằng chuỗi không lấy được từ Object và do đó không cần tuyên bố Set.

Các vấn đề liên quan