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!
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 de antares18
1