Ошибка выполнения "-2417417848 (80010108)" диапазон метода объекта _worksheet не удалось Ошибка VBA - PullRequest
0 голосов
/ 07 августа 2020

Я читаю данные Modubus TCP с контроллера в Excel. Код выглядит следующим образом:

Option Explicit

Dim bytesTotal As Long
Dim objTCP As TCPIP_Library.Class1
Dim SetObject
Dim setObj As Boolean
Dim RetrieveData
Dim Test_data As String
Dim MbusQuery As String

Private Sub CommandButton1_Click() ' Stop the Connection
    RetrieveData = 0
    setObj = False
 '  objTCP.KillStream
    CommandButton2.BackColor = "&H8000000F" ' Set the default colour
End Sub

Private Sub CommandButton2_Click() ' Start Connection
    server = Sheets("Sheet1").Range("B4")
    port = Sheets("Sheet1").Range("B8")
    CommandButton2.BackColor = "&H0000FF00" ' Set colour to Green

    ' Check for Object Creation
    If setObj = False Then
        Set objTCP = CreateObject("TCPIP_Library.Class1")
        setObj = True
        objTCP.GetClient server, port
    End If
    DoEvents
    'objTCP.port = 502

    ' Checking Connection to Remote Host and Sending Data
    MbusQuery = Chr(0) + Chr(0) + Chr(0) + Chr(0) + Chr(0) + Chr(6) + Chr(0) + Chr(3) + Chr(0) + Chr(0) + Chr(0) + Chr(10)
    objTCP.WriteData (MbusQuery)

    ' Sanity Check for Status of Connection
    If objTCP.Connect = False Then
        MsgBox "Host not Connected. Please Connect/try Again"
        objTCP.KillStream
        setObj = False
    End If
    DoEvents
    objTCP.GetData
    RetrieveData = 1
    test = objTCP.Data1
   ' For j = 0 To 50
       ' temp = objTCP.Data
    '    MbusByteArray(j) = objTCP.Data(j)
   ' Next
    DoEvents
    
    For j = 1 To 50
       MbusByteArray(j - 1) = Asc(Mid(test, j, 1))
    Next
    
    Dim start_index As Byte
    
    start_index = MsgParseCounter(MbusByteArray)
    DoEvents
    MSB = MbusByteArray(start_index + 2)
    MID1 = MbusByteArray(start_index + 3)
    MID2 = MbusByteArray(start_index)
    LSB = MbusByteArray(start_index + 1)

    MSB_Raw = MbusByteArray(start_index + 2)
    MID1_Raw = MbusByteArray(start_index + 3)
    MID2_Raw = MbusByteArray(start_index)
    LSB_Raw = MbusByteArray(start_index + 1)

    Parse MSB, MID1, MID2, LSB, signBit

    Application.EnableEvents = False

    Sheets("Sheet1").Range("B24") = Val(MID1)
    Sheets("Sheet1").Range("B23") = MSB
    Sheets("Sheet1").Range("B25") = Val(MID2)
    Sheets("Sheet1").Range("B26") = Val(LSB)
    Sheets("Sheet1").Range("B11") = Val(MSB_Raw)
    Sheets("Sheet1").Range("B12") = Val(MID1_Raw)
    Sheets("Sheet1").Range("B13") = Val(MID2_Raw)
    Sheets("Sheet1").Range("B14") = Val(LSB_Raw)
    
    If signBit = False Then
        Value = CDbl((((MID1 / 128) + (MID2 / 32768) + (LSB / 8388608)) + 1) * 2 ^ MSB)
    Else
        Value = CDbl((((MID1 / 128) + (MID2 / 32768) + (LSB / 8388608)) + 1) * -2 ^ MSB)
    End If

    Sheets("Sheet1").Range("C23") = Val(Value)
    Application.EnableEvents = True
    
    DoEvents

    If RetrieveData = 1 Then
        Call CommandButton2_Click
    End If
End Sub

После нескольких секунд успешного запуска кода выскакивает мозаичная ошибка. Я погуглил, но не смог понять, почему он работает в течение нескольких секунд, а затем появляется сообщение об ошибке.

Я удалил локальные переменные, используемые для метода CommandButton2, чтобы уменьшить размер кода. Пожалуйста, помогите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...