"Do"在 VBScript 中的循环开始时无法识别



所以,我正在做这个手表程序。我有一个循环,用于不断更新时间。但由于某种原因,系统无法识别循环开始时的Do。它处于一段时间循环中,如果这改变了什么。我也放了一个On Error Resume Next但仍然收到错误消息。这有联系吗?帮助将不胜感激。以下是源代码:

On Error Resume Next
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\" & strComputer & "rootcimv2")
Set ie = CreateObject("InternetExplorer.Application")
ie.Navigate "about:blank"
While ie.ReadyState <> 4 : WScript.Sleep 100 : Wend
ie.ToolBar   = False
ie.StatusBar = False
ie.Width     = 200
ie.Height    = 250
ie.document.body.innerHTML = "<p id='msg'>0</p>"
Set style = ie.document.CreateStyleSheet
style.AddRule "p", "text-align: center;"
ie.Visible = True
Do
Set colItems = objWMIService.ExecQuery("Select * from Win32_LocalTime")
If objItem.DayOfWeek = 1 Then
day_name = "Monday"
Else If objItem.DayOfWeek = 2 Then
day_name = "Tuesday"
Else If objItem.DayOfWeek = 3 Then
day_name = "Wednesday"
Else If objItem.DayOfWeek = 4 Then
day_name = "Thursday"
Else If objItem.DayOfWeek = 5 Then
day_name = "Friday"
Else If objItem.DayOfWeek = 6 Then
day_name = "Saturday"
Else
day_name = "Sunday"
End If
For Each objItem In colItems
ie.document.getElementById("msg").innerText = "Date:" & vbCrLf & day_name & vbCrLf & objItem.Day & "/" & objItem.Month & "/" & objItem.Year & vbCrLf & vbCrLf & "Time:" & vbCrLf & objItem.Hour & " : " & objItem.Minute & " : " & objItem.Second
Next
Loop
While End

注意你在这里有一些语法错误: 你应该写ElseIf而不是Else If

在最后一行While EndWend

在你的问题中,你想不断更新时间;所以你可以用Do ..Loop语句来做到这一点,里面的超时时间为1

秒,Wscript.sleep 1000
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\" & strComputer & "rootcimv2")
Set IE = CreateObject("InternetExplorer.Application")
IE.Navigate "about:blank"
While IE.ReadyState <> 4 : WScript.Sleep 100 : Wend
On Error Resume Next
IE.ToolBar   = False
IE.StatusBar = False
IE.Resizable = False
IE.Width     = 200
IE.Height    = 165
REM Here You can add a title to your window if you like
IE.Document.title = "My Title goes here"
IE.document.body.innerHTML = "<p id='msg'></p>"
Set style = IE.document.CreateStyleSheet
style.AddRule "p", "text-align: center;"
REM --------------------------------------------------------------
REM Just for testing i added those two lines
style.AddRule "p", "font-family:times new roman;font-weight:bold;"
style.AddRule "p", "background-color:lightblue;"
REM --------------------------------------------------------------
IE.Visible = True
Do
Set colItems = objWMIService.ExecQuery("Select * from Win32_LocalTime")
For Each objItem In colItems
If objItem.DayOfWeek = 1 Then
day_name = "Monday"
ElseIf objItem.DayOfWeek = 2 Then
day_name = "Tuesday"
ElseIf objItem.DayOfWeek = 3 Then
day_name = "Wednesday"
ElseIf objItem.DayOfWeek = 4 Then
day_name = "Thursday"
ElseIf objItem.DayOfWeek = 5 Then
day_name = "Friday"
ElseIf objItem.DayOfWeek = 6 Then
day_name = "Saturday"
Else
day_name = "Sunday"
End If
IE.document.getElementById("msg").innerText = "Date:" & vbCrLf &_
day_name & vbCrLf &_
LPad(objItem.Day,2,"0") & "/" & LPad(objItem.Month,2,"0") & "/" & objItem.Year & vbCrLf & vbCrLf &_
"Time:" & vbCrLf &_
LPad(objItem.Hour,2,"0") & " : " & LPad(objItem.Minute,2,"0") & " : " & LPad(objItem.Second,2,"0")
Next
Wscript.sleep 1000
If Err Then 'user clicked red X (or alt-F4) to close IE window
IE.Quit
Set IE = Nothing
wscript.quit
End if
Loop
'---------------------------------------------------------------------------------------
REM This function will left-pad an input value to the given number of characters
REM using the given padding character without truncating the input value:
REM Source : https://stackoverflow.com/questions/18151811/lpad-with-zeros-in-vbscript
REM Written by Ansgar Wiechers
Function LPad(s, l, c)
Dim n : n = 0
If l > Len(s) Then n = l - Len(s)
LPad = String(n, c) & s
End Function
'---------------------------------------------------------------------------------------

问题是您在外部While语句上有一个额外的Wend,因此While End需要Do(While End在 VBScript 中不是有效的语法(。

从此行中删除Wend;

While ie.ReadyState <> 4 : WScript.Sleep 100

并将While End更改为Wend.

修复该问题后,您将遇到另一个问题,因为您的内部Do语句循环无法退出,并且将无限期地继续,除非您提供一个条件,该条件允许它通过指定WhileUntil或使用Exit Do退出。

总结

这可能不是您想要的,但它将阻止该特定错误。问题是,如果不猜测您的意图是什么,很难在不改变您的意图的情况下重构代码(但看起来@Hackoo已经做到了(。建议您查看提供给 VBScript 文档的链接,其中详细介绍了应如何使用WhileDo循环。

最新更新