Ayuda urgente código visual basic!

Estimados amigos, al correr la macro me arroja el siguiente error: "se ha producido error 1004 por tiempo de ejecución:error definido por la aplicación o el objeto".
El código con problemas es el siguiente:
ActiveSheet.Range(Casilla_Inicial_100).Activate
Donde casilla inicial es un valor escogido que se introduce dentro de la función en la que trabaja este código.
Para ser más preciso les adjunto el código con problema (perdón por lo largo...)
Sub Botón1_Haga_clic_en()
    Sheets("Tablas y Graficos").Select
    Dim resultado12 As Double
    Dim resultado23 As Double
    If WorksheetFunction.IsNA(Range("R37")) Or WorksheetFunction.IsNA(Range("S38")) Then
        MsgBox "No hay arido 1 o 2"
        Range("R43").ClearContents
    Else:
        resultado12 = Buscar_Interseccion(Range("R37").Value, Range("S38").Value, "C6", 3)   ' Este es para arido 1 con 2
        Range("R43").ClearContents
        Range("R43").Value = resultado12
    End If
    If Application.WorksheetFunction.IsNA(Range("S37")) Or Application.WorksheetFunction.IsNA(Range("T38")) Then
        MsgBox "No hay arido 2 o 3"
        Range("S43").ClearContents
    Else:
        resultado23 = Buscar_Interseccion(Range("S37").Value, Range("T38").Value, "D6", 2) ' Este es para arido 2 con 3
        Range("S43").ClearContents
        Range("S43").Value = resultado23
    End If
End Sub
Function Buscar_Interseccion(Valor_0 As Double, Valor_100 As Double, Casilla_Inicial_100 As String, Offset_0 As Integer) As Double
'casilla inicial es string o variant??
    Dim x As Double
    Dim y As Double
    Dim ma As Double
    Dim mb As Double
    Dim na As Double
    Dim nb As Double
    Dim valor_x2 As Double
    Dim valor_x1 As Double
    If Valor_0 = Valor_100 Then
        MsgBox "Son iguales"
        x = Valor_0
        If x < Range("G39").Value Then
            y = Range("AC38").Value * x + Range("AD38").Value
        ElseIf x = Range("G39").Value Then
            y = Range("H39").Value
        Else
            y = Range("AC40").Value * x + Range("AD40").Value
        End If
        Sheets("Tablas y Graficos").Range("C6:E19").Select
    ElseIf Valor_0 < Valor_100 Then
         ActiveSheet.Range(Casilla_Inicial_100).Activate
        Do While IsEmpty(ActiveCell) Or IsEmpty(ActiveCell.Offset(0, 1))
            ActiveCell.Offset(1, 0).Activate
        Loop
        Do While ActiveCell.Value > 100 - ActiveCell.Offset(0, 1).Value
            ActiveCell.Offset(1, 0).Activate
        Loop
        valor_x1 = ActiveCell.Offset(0, Offset_0).Value
        valor_x2 = ActiveCell.Offset(-1, Offset_0).Value
        MsgBox "El 0 es menor que el 100"
        ma = (ActiveCell.Offset(-1, 1).Value - ActiveCell.Offset(0, 1).Value) / (valor_x2 - valor_x1)
        mb = (ActiveCell.Offset(-1, 0).Value - ActiveCell.Value) / (valor_x2 - valor_x1)
        na = ActiveCell.Offset(0, 1).Value - valor_x1 * (ActiveCell.Offset(-1, 1).Value - ActiveCell.Offset(0, 1).Value) / (valor_x2 - valor_x1)
        nb = ActiveCell.Value - valor_x1 * (ActiveCell.Offset(-1, 0).Value - ActiveCell.Value) / (valor_x2 - valor_x1)
        x = (100 - na - nb) / (mb + ma)
        If x < Range("G39").Value Then
            y = Range("AC38").Value * x + Range("AD38").Value
        ElseIf x = Range("G39").Value Then
            y = Range("H39").Value
        Else
            y = Range("AC40").Value * x + Range("AD40").Value
        End If
    Else
        MsgBox "El 0 es mayor que el 100"
        x = (Valor_0 + Valor_100) / 2
        If x < Range("G39").Value Then
            y = Range("AC38").Value * x + Range("AD38").Value
        ElseIf x = Range("G39").Value Then
            y = Range("H39").Value
        Else
            y = Range("AC40").Value * x + Range("AD40").Value
        End If
    End If
    Buscar_Interseccion = y
End Function
Espero alguien pueda tener la paciencia de ayudarme... Estoy muy confundido y necesito ayuda urgente...
Muchas gracias!

1 Respuesta

Respuesta
1
Te falla porque en
resultado12 = Buscar_Interseccion(Range("R37").Value, Range("S38").Value, "C6", 3) y
resultado23 = Buscar_Interseccion(Range("S37").Value, Range("T38").Value, "D6", 2)
Le estás pasando el contenido de la celda, no la dirección de la celda
Si en R37 tienes 111, le estás pasando a la función el 111, no el R37
En vez de Value, has de poner Address en la linea donde pones resultado12 y resultado23. Lo demás está bien.
Una sugerencia, no hace falta que pongas todo el tiempo Range(" "). Value, para el contenido de la celda, si lo quitas ya te sale igualmente.
Avisa si tienes más dudas

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas