Определяемая приложением или объектная ошибка (1004) в VBA при назначении значения из диапазона - PullRequest
0 голосов
/ 31 октября 2019

Мой код выдает ошибку, указанную в заголовке, и я не знаю, почему, это происходит в этой строке:

Time = KNP.Cells(2, LastVans) - KNP.Cells(2, FirstVans)

Все, что я мог, но ничего не работало ...

Sub CalculateKPI()

Dim RKPI, KNP, ST As Worksheet
Set RKPI = Sheets("Results KPI")
Set KNP = Sheets("SimNodes")
Set ST = Sheets("SimStartTimes")
Dim LastVans As Long
Dim FirstVans As Long
Dim Time As Long

  RKPI.Cells(1, 2) = "Maximum Crowdedness"
  RKPI.Cells(1, 3) = "Occupation Time"

  '### Einde Stap 2

  For i = 1 To 25
       RKPI.Cells(i + 1, 1) = "Stage" & i

      lastcol = Split(KNP.Cells(i + 2, 
  Columns.Count).End(xlToLeft).Address, "$")(1)

      TotalMaximumCrowdedness(i) = TotalMaximumCrowdedness(i) + 
  Application.WorksheetFunction.Max(KNP.Range("B" & i + 2 & ":" & lastcol 
& i + 2))

    '## KPI occupationtime per stage
    lastcolnr = KNP.Cells(i + 2, Columns.Count).End(xlToLeft).Column

    FirstVans = 0
    LastVans = 0
Dim g As Long
 For g = 1 To 24
    For p = 2 To lastcolnr
        If KNP.Cells(g + 2, p) <> 0 Then
            FirstVans = p
            Exit For
        End If
    Next

    Next g

    For p = lastcolnr To 2 Step -1
        If KNP.Cells(, p) <> 0 Then
            LastVans = p
            Exit For
        End If
    Next

    Time = KNP.Cells(2, LastVans) - KNP.Cells(2, FirstVans)
    TotalMaximumCrowdedness(i) = TotalMaximumCrowdedness(i) + Time

     lastcolnr = KNP.Cells(i + 2, Columns.Count).End(xlToLeft).Column

    Next

       Call Costs
         Call KPI3
        Call BusinessStageChange

 End Sub

Буду признателен за любую помощь, я довольно новичок в VBA. Если кому-то понадобится файл, чтобы помочь, я был бы рад предоставить его.

1 Ответ

1 голос
/ 31 октября 2019
Time = KNP.Cells(2, LastVans) - KNP.Cells(2, FirstVans)

возвращает ошибку приложения или объекта, поскольку LastVans и FirstVans равны 0. Таким образом, оно оценивается как KNP.Cells(2,0), а 0 должно обозначать столбец. Это автоматически ошибка, потому что первый столбец равен 1.

. Чтобы избежать этого, вы можете рассмотреть следующую проверку:

If LastVans > 0 And FirstVans > 0 Then
    Time = KNP.Cells(2, LastVans) - KNP.Cells(2, FirstVans)
Else
    MsgBox "Vans less than 1."
End If
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...