Ошибка времени выполнения «1004»: ошибка приложения или объекта при попытке определить диапазон - PullRequest
0 голосов
/ 08 января 2020

Я вижу эту ошибку, когда пробую свой код:

Ошибка времени выполнения '1004': ошибка приложения или объекта

Мой код:

Sub search(date1, month, sheet, index)
    Dim cell As Range
    Dim startDate As Integer
    Dim finalIndex As Integer 
    Dim letra1 As Single
    Dim letra2 As Single

    Dim textoPlano As Integer
    Dim svcPoliza As Integer
    Dim svcMarcas As Integer
    Dim svcDptos As Integer
    Dim svcCotizacionesCme As Integer
    Dim svcAniosVehiculo As Integer
    Dim svcRiesgoVigente As Integer
    Dim svcLineasVehiculos As Integer
    Dim svcLeeLocalidades As Integer

    Dim hoja As Worksheet
    Dim ultimaFila As Long
    Dim resultado As Worksheet

    Set resultado = ActiveWorkbook.Worksheets("Resultados")
    Set hoja = ActiveWorkbook.Worksheets("Sheet" & sheet)

    If sheet = "Consolidado" Then
        Set hoja = ActiveWorkbook.Worksheets("Consolidado")
    End If

    ultimaFila = hoja.Cells(hoja.Rows.Count, "G").End(xlUp).Row

    For Each cell In Range("G3:G" & ultimaFila)
        If InStr(cell.Value, "enviarCorreoTextoPlano") > 0 Then
            textoPlano = textoPlano + 1
        End If
        If InStr(cell.Value, "svcPolizaRecienteVehiculo") > 0 Then
            svcPoliza = svcPoliza + 1
        End If
        If InStr(cell.Value, "svcMarcasVehiculos") > 0 Then
            svcMarcas = svcMarcas + 1
        End If
        If InStr(cell.Value, "svcLeeDptos") > 0 Then
            svcDptos = svcDptos + 1
        End If
        If InStr(cell.Value, "svcLeeCotizacionesCme") > 0 Then
            svcCotizacionesCme = svcCotizacionesCme + 1
        End If
        If InStr(cell.Value, "svcLeeAniosVehiculo") > 0 Then
            svcAniosVehiculo = svcAniosVehiculo + 1
        End If
        If InStr(cell.Value, "svcRiesgoVigenteVehiculo") > 0 Then
            svcRiesgoVigente = svcRiesgoVigente + 1
        End If
        If InStr(cell.Value, "svcLineasVehiculos") > 0 Then
            svcLineasVehiculos = svcLineasVehiculos + 1
        End If
        If InStr(cell.Value, "svcLeeLocalidades") > 0 Then
            svcLeeLocalidades = svcLeeLocalidades + 1
        End If
    Next cell

    If index = 1 Then
        letra1 = 1
        letra2 = 2
        startDate = date1
    End If

    If index = 2 Then
        letra1 = 3
        letra2 = 4
        startDate = date1 + 1
    End If

    If index = 3 Then
        letra1 = 5
        letra2 = 6
        startDate = date1 + 2
    End If

    If index = 4 Then
        letra1 = 7
        letra2 = 8
        startDate = date1 + 3
    End If

    If index = 5 Then
        letra1 = 9
        letra2 = 10
        startDate = date1 + 4
    End If

    resultado.Cells(1, letra1).Value = "Dia " & startDate & "-" & month
    resultado.Cells(2, letra1).Value = "enviarCorreoTextoPlano"
    resultado.Cells(3, letra1).Value = "svcPolizaRecienteVehiculo"
    resultado.Cells(4, letra1).Value = "svcMarcasVehiculos"
    resultado.Cells(5, letra1).Value = "svcLeeDptos"
    resultado.Cells(6, letra1).Value = "svcLeeCotizacionesCme"
    resultado.Cells(7, letra1).Value = "svcLeeAniosVehiculo"
    resultado.Cells(8, letra1).Value = "svcRiesgoVigenteVehiculo"
    resultado.Cells(9, letra1).Value = "svcLineasVehiculos"
    resultado.Cells(10, letra1).Value = "svcLeeLocalidades"
    resultado.Cells(2, letra2).Value = textoPlano
    resultado.Cells(3, letra2).Value = svcPoliza
    resultado.Cells(4, letra2).Value = svcMarcas
    resultado.Cells(5, letra2).Value = svcDptos
    resultado.Cells(6, letra2).Value = svcCotizacionesCme
    resultado.Cells(7, letra2).Value = svcAniosVehiculo
    resultado.Cells(8, letra2).Value = svcRiesgoVigente
    resultado.Cells(9, letra2).Value = svcLineasVehiculos
    resultado.Cells(10, letra2).Value = svcLeeLocalidades`enter code here`
End Sub

Отладчик показывает эту строку:

resultado.Cells(1, letra1).Value = "Dia " & startDate & "-" & month

Впервые я обнаружил эту ошибку, когда у меня был метод Range, а не Cells для определения ячейки. Затем я изменил его на метод Cells, но появилась та же ошибка.

1 Ответ

0 голосов
/ 08 января 2020

Это может быть связано с тем, что «index» находится вне диапазона. В этом случае «letra1» и «letra2» будут Null, поэтому resultado.Cells(1,letra1) приведет к ошибке времени выполнения 1004. Я проверил это и обнаружил, что это правда.

Чтобы избежать этого, Вы можете добавить еще один If в качестве универсального:

If index < 1 Or index > 5 Then
    MsgBox "Invalid index"
    Exit Sub
End If

... или чтобы упростить весь процесс выбора, рассмотрите возможность замены всех операторов If на Select Case:

Select Case index
    Case 1
        letra1 = 1
        letra2 = 2
        startDate = date1
    Case 2
        letra1 = 3
        letra2 = 4
        startDate = date1 + 1
    Case 3
        letra1 = 5
        letra2 = 6
        startDate = date1 + 2
    Case 4
        letra1 = 7
        letra2 = 8
        startDate = date1 + 3
    Case 5
        letra1 = 9
        letra2 = 10
        startDate = date1 + 4
    Case Else
        MsgBox "Invalid index"
        Exit Sub
End Select

EDIT

Более простое решение может состоять в том, чтобы просто вычислить «letra1», «letra2» и «startdate» без всех операторов if, просто сначала проверив этот «индекс» не менее 1:

If index < 1 Then
    MsgBox "Invalid index"
    GoTo DoneHere
End If

letra1 = index + (index - 1)
letra2 = letra1 + 1
startDate = date1 + (index - 1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...