Help con macro

Hola Elsa, nuevamente recurro a ti. Esta macro me funciona bien llamándola con un botón, pero si quiero agregarla a la hoja (que no esté como módulo) se la asigno a un commandbutton y me arroja un error donde dice aquí tengo problemas. No reconoce Range(Dir_1) como nombre de celda. Te agradeceré ayudarme.
Sub asignar_formulas2()
If Cells(8, 6) = "" Then
Application.ScreenUpdating = False
Dim dir_1, VAR1, VAR2
Dim lugar1, form
'copia nombres de celdas
'variables de salida
For iter1 = 1 To 20
lugar1 = Cells(iter1 + 7, 3).Formula
form = Replace(Replace(lugar1, "=", ""), "+", "")
Cells(iter1 + 7, 9) = form
Next iter1
'variable de entrada
lugar1 = Cells(4, 3).Formula
form = Replace(Replace(lugar1, "=", ""), "+", "")
Cells(4, 9) = form
'asigna formulas a las celdas seleccionadas como variables de salida
For iter2 = 1 To 20
Sheets("simulacion").Select
If Cells(iter2 + 7, 9) <> "" Then
'reemplaza punto por coma
dir_1 = Cells(iter2 + 7, 9)
VAR1 = Replace(Cells(iter2 + 7, 6), ",", ".")
VAR2 = Replace(Cells(iter2 + 7, 7), ",", ".")
'genera número aleatorio
Cells(iter2 + 7, 10) = Rnd
rnum = Cells(iter2 + 7, 10)
'define nombre de celda con aleatorio, se ocupa en la simulación
ActiveWorkbook.Names.Add Name:="rnum" & iter2, RefersToR1C1:= _
"=simulacion!R" & iter2 + 7 & "C10"
'copia fórmulas
Sheets("dat").Select
'*** aquí tengo problemas ***
Range(dir_1).Formula = "=NORMINV(rnum" & iter2 & "," & VAR1 & "," & VAR2 & ")"
Else
End If
Next iter2
Else
MsgBox ("LAS VARIABLES YA ESTÁN ASIGNADAS"), vbExclamation, "SIMULACIÓN"
End If
Range("a1").Select
End Sub

1 Respuesta

Respuesta
1
La línea con error no es la que tiene la instrucción:
Range(dir_1).Formula = ?.
Porque dir_1 no es una dirección sino un contenido. Previamente tenés:
dir_1 = Cells(iter2 + 7, 9)
Entonces, recordando tu consulta anterior, te está faltando agregar la dirección en esta línea que te debe quedar así (con o sin false):
dir_1 = Cells(iter2 + 7, 9).Address
Hola Elsa. Lo que hace esta macro es que estando en una hoja llamada simulación yo en forma manual ingreso en c8 =+dat!B19, mostrándome lo que hay en esa celda de la hoja "dat" y lo que se registra en dir_1 es dat!B19 (celda i8 de la hoja simulación), entonces la macro va a esa dirección y copia una fórmula si hago lo que tu me dices se va a la celda i8 y copia la fórmula en cambio como yo lo tengo se va a la celda dat!B19 y copia la fórmula. El asunto es que funciona bien en un módulo, pero al pasarlo a una hoja se cae.
Saludos.
Sensacional. Gracias.
Solo agrega delante de esa instrucción la palabra ActiveSheet. Te quedará entonces:
ActiveSheet.Range(dir_1).Formula = "=NORMINV(rnum" & iter2 & "," & VAR1 & "," & VAR2 & ")"
Esto debiera solucionarlo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas