VBA使用Winsock通过端口23进行对话

问题描述 投票:0回答:1

我发现下面的代码完全符合我的期望,我正尝试将其添加到我的MsAccess项目中。我将MSWINSCK.OCX添加为参考。

Sub Start_Telnet_Session()

    'Declare Variables
    Dim Data As String
    Dim Winsock1

    'Server IP, Port & Login Credentials
    TelnetServer = localhost
    TelnetPort = 23
    TelnetUser = test
    TelnetPassword = test
    TelnetCommands = ifconfig

    'Create WinSock Object & Connect to Server
    Set Winsock1 = New MSWinsockLib.Winsock
    Winsock1.RemoteHost = TelnetServer
    Winsock1.RemotePort = TelnetPort
    Winsock1.Connect

    'Wait Till connection is Success
    Do Until Winsock1.State = 7
        DoEvents
        If Winsock1.State = sckError Then
            Exit Sub
        End If
    Loop

    'Send UserName
    Winsock1.SendData TelnetUser & vbCrLf
        DoEvents: Excel.Application.Wait (Now + TimeValue("0:00:05"))

    'Send Password if you Server Requires one
    Winsock1.SendData TelnetPassword & vbCrLf
        DoEvents: Excel.Application.Wait (Now + TimeValue("0:00:05"))

    'Send Commands One by one & Get response from Server
    i = 5
    While TelnetCommands <> ""
        DoEvents: Excel.Application.Wait (Now + TimeValue("0:00:01"))

        Winsock1.SendData TelnetCommands & vbCrLf
        DoEvents: Excel.Application.Wait (Now + TimeValue("0:00:05"))
        'Get Response
        Winsock1.GetData Data
        Data = VBA.Replace(Data, vbLf, "")
        Data = VBA.Replace(Data, vbCr, vbNewLine)
        MsgBox Data

        i = i + 1
        TelnetCommands = ThisWorkbook.Sheets(1).Cells(i, 1)
    Wend

    MsgBox "Process Completed - Closing Telnet Connection"
    Winsock1.Close
End Sub

但是我面临一个问题。我收到错误“未注册课程”。他用黄色衬里。

Set Winsock1 = New MSWinsockLib.Winsock

我完全迷路了,为什么会出现此错误?

实际上我的项目看起来像这个https://prnt.sc/s2ui49

感谢您的帮助

vba ms-access winsock
1个回答
0
投票

在VBA中,对既没有数据类型也没有初始化程序的命名变量调用Dim的默认设置为Nothing。每docs

指定数据类型?没有指定了初始化程序?没有结果示例Dim qty如果Option Strict关闭(默认),则变量设置为Nothing

因此,您尝试将[[Nothing实体Set赋予类对象失败。要解决此问题,请考虑调整已命名变量的Dim语句以指定适当的对象类型:

Dim Winsock1 As MSWinsockLib.Winsock ... Set Winsock1 = New MSWinsockLib.Winsock
© www.soinside.com 2019 - 2024. All rights reserved.