Macro para cancelar un cuadro de selección de hoja de fórmula de excel

Tengo una orden para insertar en una celda una fórmula (Vlookup), sin embargo en algunas ocasiones la hoja en la que se encuentra la matriz no estará disponible, (es algo voluntario), cuando esto pasa me sale un cuadro que me solicita seleccionar la fuente, (imagen ejemplo). Mi necesidad es específicamente que esto no pase, ya que cuando se inserte la formula dará error y tengo una etiqueta "On error GoTo" y se termina de ejecutar mi orden como la requiero.

Quiero saber como evitar que ese cuadro aparezca o en su defecto que la misma macro haga cancelar en el mismo...

Cuadro de ejemplo:

La macro ordena algo como:

Sub Muestra
On Error GoTo cero
Range("D218").Select
  ActiveCell.FormulaR1C1 = _
     "=VLOOKUP(R5C5,'C:\Users\Yo\Desktop\Base de Datos\[Base de Datos.xlsm]Hoja2'!R7C4:R10C50,25,0)"
cero:
ActiveCell = "0"
End Sub

La macro se ejecuta de manera correcta no tengo ningún problema, solo que en ocasiones la hoja 2 no existirá en el libro, sólo requiero saber como evitar el cuadro o que se cancele de forma automática. 

algo mas: (Application.DisplayAlerts = False ) no funciona.

3 Respuestas

Respuesta
1

.06/10/16

Buenas, José

Esta versión chequea primero si existe o no la hoja en aquel archivo -sin abrirlo- y según exista o no coloca 0 o la fórmula.

Para facilitar el uso y el entendimiento, cree variables donde indicarle cada dato.

La ventaja es que luego puede variarse sus valores y la rutina seguirá funcionando.

Prueba, entonces, con esta versión:

Sub Muestra()
'---- Variables modificables:
'=== JOSE, modifica estos datos de acuerdo a tu proyecto:
DirBusc = "C:\Users\Yo\Desktop\Base de Datos\"
ArchBusc = "Base de Datos.xlsm"
HojaBusc = "Hoja2"
RangBusc = "R7C4:R10C50"
'---- fin Variables
'
'---- inicio de rutina:  
DirBusc = DirBusc & IIf(Right(DirBusc, 1) = "\", "", "\")
With Range("D218")
    HojaObj = "'" & DirBusc & "[" & ArchBusc & "]" & HojaBusc
    On Error Resume Next
    chk = ExecuteExcel4Macro(HojaObj & "'!R1C1")
    If Err.Number <> 0 Or Left(chk, 3) = "Err" Then
        .Value = "0"
    Else
             HojaObj = HojaObj & " '!" & RangBusc
        .FormulaR1C1 = "=VLOOKUP(R5C5," & HojaObj & ",25,0)"
    End If
    Err.Clear
    On Error GoTo 0
End With
End Sub

Espero que te sirva.

Un abrazo

Fernando

(Buenos Aires, Argentina)

.

Respuesta
1

:)

Tan simple como:

Sub Muestra()
On Error Resume Next
  Range("D218") = 0
  Range("D218") = "=VLOOKUP(R5C5,Hoja2!R7C4:R10C50,25,0)"
End Sub

Espero no haber "llegado tarde" y que te sea de utilidad.

:)

.

:)

Jajjaajaja... Omití el libro:

Sub Muestra()
On Error Resume Next
  Range("D218") = 0
  Range("D218") = "=VLOOKUP(R5C5,'C:\Users\Yo\Desktop\Base de Datos\[Base de Datos.xlsm]Hoja2'!R7C4:R10C50,25,0)"
End Sub

:)

.

Respuesta

A mi me funciono de esta manera:

Sub Muestra()
On Error GoTo cero
Application.DisplayAlerts = False
Range("D218").Select
ActiveCell.FormulaR1C1 = _
"=VLOOKUP(R5C5,'C:\Users\Yo\Desktop\Base de Datos\[Base de Datos.xlsm]Hoja2'!R7C4:R10C50,25,0)"
cero:
ActiveCell = "0"
Application.DisplayAlerts = True

End Sub

¡Gracias!

Habré parecido muy tonto, ja ja lo intente mil veces y no me salía pero tenia la orden de no mostrar alertas en otra línea, muchas gracias por ayudarme, lo agradezco mucho!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas