将VBA脚本转换为在linux设备上作为VBS文件窗口或某种类型的脚本运行

将VBA脚本转换为在linux设备上作为VBS文件窗口或某种类型的脚本运行,vba,vbscript,Vba,Vbscript,我编写了下面的代码来检查Web服务器/应用程序是否正在运行,然后将结果记录到一个文件中。我使用ExcelVBA和FSO脚本运行时实现了这一点。我想将其转换为在windows服务器上运行的vbs脚本文件,或者转换为可以在linux服务器上运行的其他文件。代码的任何部分都不依赖于excel,我只是使用VBA代码库。我试图将副本复制到vbs文本文件并执行它,但不断出错。要在excel VBA之外运行,我必须做些什么 Option Explicit Public Sub IE_Check() Dim

我编写了下面的代码来检查Web服务器/应用程序是否正在运行,然后将结果记录到一个文件中。我使用ExcelVBA和FSO脚本运行时实现了这一点。我想将其转换为在windows服务器上运行的vbs脚本文件,或者转换为可以在linux服务器上运行的其他文件。代码的任何部分都不依赖于excel,我只是使用VBA代码库。我试图将副本复制到vbs文本文件并执行它,但不断出错。要在excel VBA之外运行,我必须做些什么

Option Explicit

Public Sub IE_Check()
Dim i As Long
Dim g As Long
Dim x As Long
Dim IE As Object
Dim objElement As Object
Dim objElement2 As Object
Dim Colobj1 As Object
Dim Colobj2 As Object
Dim Colobj3 As Object
Dim FindText1 As String
Dim FindText2 As String
Dim FindText3 As String
Dim TTime As String


Dim fso As New FileSystemObject

' Declare a TextStream.
Dim stream As TextStream

' Create a TextStream.
Set stream = fso.OpenTextFile("C:\log.txt", 2, True)

TTime = Time


Set IE = CreateObject("InternetExplorer.Application")

IE.Visible = True

IE.Navigate "http://yahoo.com"



Do While IE.Busy
    Application.Wait DateAdd("s", 1, Now)
Loop





  FindText1 = InStr(1, IE.Document.body.innerhtml, "Internet Explorer cannot display the webpage")

       If FindText1 > 0 Then



stream.WriteLine ("Webserver_down;" & TTime)

       GoTo webserver_down
         End If


webserver_up:

Set Colobj2 = IE.Document.getElementsByTagName("input")

 g = 0
While g < Colobj2.Length

    If Colobj2(g).Name = "Uid" Then

        Colobj2(g).Value = "test"

    Else
        If Colobj2(g).Type = "submit" Then

            Set objElement = Colobj2(g)

        End If
    End If
 g = g + 1
 Wend


    objElement.Click

  Do While IE.Busy
    Application.Wait DateAdd("s", 1, Now)
 Loop

FindText3 = InStr(1, IE.Document.body.innerhtml, "mstrWebAdmin")

If FindText3 > 0 Then

    stream.WriteLine ("IServer_down;" & TTime)
    Else

stream.WriteLine ("All_GOOD;" & TTime)
End If


webserver_down:

IE.Quit

' Clean up
Set IE = Nothing
Set objElement = Nothing
Set Colobj1 = Nothing
Set objElement2 = Nothing
Set Colobj2 = Nothing
Set Colobj3 = Nothing


stream.Close


End Sub
选项显式
公共子系统检查()
我想我会坚持多久
暗g一样长
暗x等长
模糊的物体
作为对象的模糊对象
作为对象的Dim objElement2
将Colobj1作为对象
Dim Colobj2作为对象
Dim Colobj3作为对象
Dim FindText1作为字符串
Dim FindText2作为字符串
Dim FindText3作为字符串
像线一样模糊时间
将fso设置为新的FileSystemObject
'声明一个文本流。
作为文本流的暗流
'创建一个文本流。
设置stream=fso.OpenTextFile(“C:\log.txt”,2,True)
时间
设置IE=CreateObject(“InternetExplorer.Application”)
可见=真实
即“导航”http://yahoo.com"
忙着干吧
Application.Wait DateAdd(“s”,1,Now)
环
FindText1=InStr(1,IE.Document.body.innerhtml,“Internet Explorer无法显示网页”)
如果FindText1>0,则
stream.WriteLine(“Webserver_down;”&TTime)
转到Web服务器\u关闭
如果结束
Web服务器启动:
设置Colobj2=IE.Document.getElementsByTagName(“输入”)
g=0
而g0,则
stream.WriteLine(“IServer_down;”&TTime)
其他的
stream.WriteLine(“一切正常”&TTime)
如果结束
Web服务器关闭:
即退出
“清理
设置IE=无
设置对象=无
设置Colobj1=Nothing
Set objElement2=无
设置Colobj2=Nothing
设置Colobj3=无
关闭
端接头

在肯的督促下,我在谷歌的帮助下艰难地度过了我的错误。谢谢你,肯

这是我重新编写的代码,可以作为vbs脚本使用

Option Explicit

Public Sub IE_Check()
Dim i
Dim g
Dim x
Dim IE
Dim objElement
Dim objElement2
Dim Colobj1
Dim Colobj2
Dim Colobj3
Dim FindText1
Dim FindText2
Dim FindText3
Dim TTime

Dim dteWait
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
' Declare a TextStream.
Dim stream
' Create a TextStream.
Set stream = fso.OpenTextFile("C:\log.txt", 8, True)

TTime = Time


Set IE = CreateObject("InternetExplorer.Application")

IE.Visible = True

IE.Navigate "http://yahoo.com"



While IE.ReadyState < 4
   FindText1 = 0
Wend




FindText1 = InStr(1, IE.Document.body.innerhtml, "Internet Explorer cannot display the webpage")

    If FindText1 > 0 Then



stream.WriteLine ("Webserver_down;" & TTime)
 stream.Close
  IE.Quit
 Wscript.Quit
         End If



 Set Colobj2 = IE.Document.getElementsByTagName("input")

g = 0
 While g < Colobj2.Length

     If Colobj2(g).Name = "Uid" Then

        Colobj2(g).Value = "test"

    Else
        If Colobj2(g).Type = "submit" Then

            Set objElement = Colobj2(g)

        End If
     End If
 g = g + 1
 Wend


    objElement.Click

While IE.ReadyState < 4
   FindText1 = 0
Wend


FindText3 = InStr(1, IE.Document.body.innerhtml, "mstrWebAdmin")

If FindText3 > 0 Then

    stream.WriteLine ("IServer_down;" & TTime)
    Else

stream.WriteLine ("All_GOOD;" & TTime)
End If



IE.Quit



stream.Close

End sub
call IE_Check()
选项显式
公共子系统检查()
昏暗的我
暗g
暗x
暗淡的
模糊对象
模糊问题2
Dim Colobj1
Dim Colobj2
Dim Colobj3
暗FindText1
暗FindText2
模糊FindText3
昏暗的时间
暗淡的DTWAIT
模糊fso
设置fso=CreateObject(“Scripting.FileSystemObject”)
'声明一个文本流。
暗流
'创建一个文本流。
设置stream=fso.OpenTextFile(“C:\log.txt”,8,True)
时间
设置IE=CreateObject(“InternetExplorer.Application”)
可见=真实
即“导航”http://yahoo.com"
而IE.ReadyState<4
FindText1=0
温德
FindText1=InStr(1,IE.Document.body.innerhtml,“Internet Explorer无法显示网页”)
如果FindText1>0,则
stream.WriteLine(“Webserver_down;”&TTime)
关闭
即退出
Wscript.Quit
如果结束
设置Colobj2=IE.Document.getElementsByTagName(“输入”)
g=0
而g0,则
stream.WriteLine(“IServer_down;”&TTime)
其他的
stream.WriteLine(“一切正常”&TTime)
如果结束
即退出
关闭
端接头
打电话给IE_Check()

VBA所做的每一件事都是基于Windows的。Linux上没有
FileSystemObject
TextStream
InternetExplorer.Application
;这些都是特定于Windows的ActiveX对象,需要Windows COM支持才能正常工作。没有Windows,没有Windows COM支持。VBA是“Visual Basic for Applications”,它是对Microsoft Office产品的自动化和代码支持。VBS是“visualbasic脚本”,VB是微软的产品。如果你想在Linux上使用类似的功能,你必须采取完全不同的方法。注意,在Linux上,是否可以在excel之外的windows上以vbscript的形式运行此功能?我在你的问题标题中提到了“在Linux框上”。你说你试过了,而且“不断出错”。你为什么不把你尝试过的东西贴出来,包括你所犯的错误,然后从中吸取教训呢?因此,在代码重写问题上通常做得不好。“这里有一些代码。请用另一种语言为我重写它”类型的问题通常会被关闭,除非海报上包含他们自己重写并解释他们在这方面遇到的问题。注意,我将重新编写问题。谢谢