Индекс вне диапазона, почему? - PullRequest
0 голосов
/ 18 июня 2019

Я пишу макрос, который создает какую-то таблицу на основе данных из электронной таблицы, и я получаю индекс вне диапазона в определенной строке. Ниже в коде я отметил точное место (1), где это произошло. Я попытался поместить другую переменную, например, l и сделать это следующим образом: l = i, а затем ниже i = l-1, но это точно так же, как было.

Sub testo()

    Const cSheet As String = "Procenty"   ' spreadsheet name
    Const cRange As String = "A2:D71"     ' range
    Const cel As Long = 6             
    Const cCol As Variant = "A"           

    Dim vntS As Variant   ' tablica from
    Dim vntT As Variant   ' tablica to
    Dim i As Integer      ' row counter
    Dim emptyRow As Long  ' first empytrow



    Dim kom As Double, komz As Double, kredyt As Double

    Dim roz As Double, komr As Double, komn As Double nadplata
    Dim napis As String 
    Dim dz As Date, dw As Date 

    napis = "null"


    vntS = ThisWorkbook.Worksheets(cSheet).Range(cRange)

    'changing table size
    ReDim vntT(1 To UBound(vntS), 1 To cel)


    kredyt = 0
    For i = 1 To UBound(vntS)
If vntS(i, 1) = "" Then
dw = Date
Else
dz = vntS(i, 1)
End If

        ' values to variables
        dz = vntS(i, 1)
        komz = vntS(i, 2)
        dw = vntS(i, 3)
        kom = vntS(i, 4)

        '*******************************
        ' Start
        '*******************************

        If kom = komz Then

            vntT(i, 1) = dz
            vntT(i, 2) = komz
            vntT(i, 3) = dw
            vntT(i, 4) = kom


        ElseIf komz > kom Then

              vntT(i, 1) = dz
            vntT(i, 2) = komz
            vntT(i, 3) = dw
            vntT(i, 4) = kom
            i = i + 1
            komr = komz - kom
            vntT(i, 1) = dz
            vntT(i, 2) = komr
            vntT(i, 3) = dw
            vntT(i, 4) = kom
           i = i - 1

        ElseIf komz < kom Then

          vntT(i, 1) = dz
            vntT(i, 2) = komz
            vntT(i, 3) = dw
            vntT(i, 4) = kom
            i = i + 1
            komn = kom - komz
            vntT(i, 3) = dw <------- (1) here is the subscript out of range
            vntT(i, 4) = komn
            i = i - 1


       ' ElseIf komz > kom And dz >= dw Then
       ' roz = Abs(dz - dw)
        'komr = komz - kom
           ' vntT(i, 5) = napis
           ' kredyt = kredyt - komr

       ' ElseIf komz < kom And dw <= dz Then
      '  komn = kom - komz
       '     vntT(i, 5) = komn
        '    kredyt = kredyt + komn
       ' ElseIf komz < kom And dz < dw Then
       ' roz = Abs(dz - dw)
        '    vntT(i, 5) = procent(komz, roz)
        '    kredyt = kredyt - procent(komz, roz)
        End If

        '*******************************
        ' end
        '*******************************

    Next


    With ThisWorkbook.Worksheets(cSheet)

        emptyRow = .Columns(cCol).Find("*", , xlFormulas, _
                xlWhole, xlByColumns, xlPrevious).Row + 1
        'emptyRow = WorksheetFunction.CountA(.Columns(cCol)) + 1
        ' writing table out
        .Cells(emptyRow, cCol).Resize(UBound(vntT), UBound(vntT, 2)) = vntT
        .Cells(emptyRow, cCol) = kredyt
    End With

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