For para incrementar filas y columnas da error "En el método Range de objeto Worksheet"

Quiero que al introducir un valor en una celda, compruebe si es el precio final o una base imponible, en caso de ser un precio final, calcular la base imponible y sustituir el valor por el que he introducido en la celda. Pero me salta el error del título. No se que está mal.

Esta es mi macro:

Private Sub Worksheet_Change(ByVal Target As Range)
    'RECORRE CADA UNA DE LAS 3 FILAS
    For i = 10 To 16 Step 2
        'RECORRE CADA UNA DE LAS 10 COLUMNAS
        For j = 5 To 14
            'RECORRE LOS PRECIOS DESDE 5€ HASTA 200€
            For k = 5 To 200 Step 5
                'SI EL PRECIO QUE INTRODUZCO EN LA CELDA COINCIDE CON LA LISTA, LO DIVIDE ENTRE 1.10 PARA SACAR LA BASE IMPONIBLE Y SALGO DEL SUB
                If Range(Cells(j, i)).Value = k Then
                    Range(Cells(j, i)).Value = Range(Cells(j, i)).Value / 1.1
                    Exit Sub
                End If
            Next k
        Next j
    Next i
End Sub

1 respuesta

Respuesta
1

cells(j,i)

en vez de  

Range(Cells(j, i))

Mira estos ejemplos

https://youtu.be/gqZzSfikEYY

https://youtu.be/UuyFcJnv5MM  


                    

Lo siento, pero no me funciona. No se si los bucles no están bien planteados o es cosa del if. Ya no me sale ningún error, pero el precio no cambia, es decir, si introduzco 55.

Creo que puede ser cosa de que la variable del bucle es de tipo entero y el valor de la celda es decimal. He intentado convertir el valor que me devuelve de la celda a entero, pero me dice que no coinciden los tipos.

Private Sub Worksheet_Change(ByVal Target As Range)
'Sub borrar_esto()
'ANALIZA SI LA CANTIDAD ES BASE IMPONIBLE O PRECIO CON IVA, SI ES PRECIO CON IVA
d = "1,1"
    'RECORRE CADA UNA DE LAS 3 FILAS
    For i = 10 To 16 Step 2
        'RECORRE CADA UNA DE LAS 10 COLUMNAS
        For j = 5 To 14
            'RECORRE LOS PRECIOS DESDE 5€ HASTA 200€
            For k = 5 To 200 Step 5
                'SI EL PRECIO QUE INTRODUZCO EN LA CELDA COINCIDE CON LA LISTA, LO DIVIDE ENTRE 1,10 PARA SACAR LA BASE IMPONIBLE Y SALGO DEL SUB
                p1 = Cells(j, i).Value
                p = CInt(p1)
                If p = k Then
                    Cells(j, i).Value = Cells(j, i).Value / d
                    Exit Sub
                End If
            Next k
        Next j
    Next i
End Sub

Dim p1 as long

Veo que no definiste variable puede que la este tomando como texto

Si tienes controlador de error elimínalo momentáneamente para que te te indique el error

Ejecuta la macro paso a paso con f8 para ver los valores que va tomando y verifica si son correcto

Vale, lo hice como me dijiste y luego me di cuenta de que seguía dándome error. Luego comprobé las coordenadas que obtengo y como las utilizaba la macro y me di cuenta de que usaba las filas en lugar de columnas y viceversa.

Ahora ya funciona, pero me falta todavía un matiz y es que si introduzco un precio, por ejemplo 55 al dividirlo por 1,1 el resultado es 50, este número encaja con el rango de precios que uso en uno de los bucles for. Hay alguna forma de que la macro solo haga el cambio una vez por cada celda, en lugar de que el for repita el bucle mientras el precio coincida con el rango que yo le he establecido.

He intentado ponerle el exit sub, pero no ha sido efectivo. Me gustaría saber si hay alguna forma de que se ejecute la macro con el bucle solamente al pulsar enter en esa celda donde se acaban de introducir los datos.

https://www.youtube.com/watch?v=KPg6aP_ZbHI 

Esa macro detecta enter para ejecutar macro.

Finaliza pregunta y haz una nueva .

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas