2010-07-16 6 views
7

Je reçois une erreur "objet requis" sur la ligne 54, dernière ligne, lorsque j'exécute le script suivant. Qu'est-ce qui ne va pas?VB Erreur "objet requis"

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

sur quelle ligne rencontrez-vous cette erreur? – Sarfraz

+0

Savez-vous où l'erreur est soulevée? Pourriez-vous utiliser 'WScript.Echo' ou' MsgBox' avec du texte juste pour que vous puissiez restreindre la zone dans le code où l'erreur se produit. –

+0

Ligne 54, la dernière ligne. – ChuckO

Répondre

6

Il y a quelques problèmes, je pense.

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

Vous avez probablement besoin de quelques espaces:

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

Set est utilisé uniquement avec des objets, et non des chaînes, il devrait donc être retiré de cette ligne:

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

Je suis assez sûr vous voulez dire soit

WshShell.Run importcmd 

Ou

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

Objet requis est élevé lorsque vous avez une déclaration comme Set x = y où x est pas un type d'objet, mais est plutôt un type simple (Integer, Double, Date, etc.). Je pense que la ligne

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

provoque l'erreur, et je pense que tout ce que vous devez faire est de retirer la déclaration Set. Je pense que les chaînes ne dérivent pas de Object et n'ont donc pas besoin de l'instruction Set.