Unir dos macro para poder abrir un archivo según el valor de una celda.

Tengo dos macro:

Esta abre un archivo con los datos insertados en la celda j3, siempre que el libro ya exista con ese mismo nombre o numero.

Sub DESEMBOLSO_ABRIR_REGISTRO_EXISTENTE()
Ruta = "E:\AIM\"
archivo = Range("J3")
Workbooks.Open (Ruta & archivo)
End Sub

Esta otra abre un libro especifico llamado base.xlsm

Sub DESEMBOLSO_ABRIR_HOJA_base()

Workbooks.Open "E:\AIM\base.xlsm"

End Sub

Deseo unirlas para que si el nombre del archivo que pongo el "J3" existe lo abra como hace la primera macro, y si no que me abra el archivo base.xlsm.

Todos están en la misma carpeta del libro E\AIM

1 Respuesta

Respuesta
1

09/11/16

Buenas tardes, Miguel

Si te entendí correctamente, lo que buscas es esta rutina:

Sub DESEMBOLSO_ABRIR()
'---- Variables modificables ----
'===  MIGUEL, modificá estos datos de acuerdo a tu proyecto:
'
Ruta = "E:\AIM\"
Archivo = Range("J3").Value
ArchAlt = "base.xlsm"
'
'---- fin Variables
'  
Ruta = Ruta & IIf(Right(Ruta, 1) = "\", "", "\")
chk = Dir(Ruta & Archivo)
If chk = "" Then
    Workbooks.Open (Ruta & ArchAlt)
Else
    Workbooks.Open (Ruta & Archivo)
End If
End Sub

Coméntame si funciona bien o si necesitas más apoyo con esto.

Un abrazo

Fernando

(Buenos Aires, Argentina)

.

Gracias por tu pronta respuesta.

Me abre siempre el archivo base.

No me esta abriendo el que ya existe.

No deseo que me cree un archivo que ya existe, por ej. si el archivo 2.xlsm lo tengo creado en la carpeta AIM que me abra ese y si no existiera que me abra el archivo base.xlsm.

.

Buenas,

Es curioso, porque si encuentra el archivo en la carpeta que le indicaste, lo abre.

Al menos, lo hizo en todas las pruebas que practiqué.

Asegurate de que el nombre del archivo esté escrito correctamente, con extensión incluida, en la celda de la variable (J3).

Revisada la rutina, de nuevo, no encontré error de estructura.

Intentalo con otro archivo, eventualmente.

Saludos

Fer

.

Sub PRUEBA()
Ruta = "E:\AIM\"
archivo = Range("j3").Value
archAlt = "BASE.xlsm"
'
'---- fin Variables
'
Ruta = Ruta & IIf(Right(Ruta, 1) = "\", "", "\")
chk = Dir(Ruta & archAlt)      '........REALICE ESTE CAMBIO
If chk = "" Then
Workbooks.Open (Ruta & archAlt)
Else
Workbooks.Open (Ruta & archivo)   '...........Entonces me sombrea esto en amarillo y me dice error 1004, asi me abre bien el archivo que ya esta creado. Esto lo hace al tratar de abrir el archivo base. 
End If

End Sub

Con este archivo base creo los nuevo archivos en la carpeta AIM, asignándole el valor de J3 al guardarlo.

Bueno de todas maneras agradezco tu esfuerzo y dedicación, analizame esta parte y déjame saber si se puede hacer algo.

Gracias

.

Buenos dias, Miguel

Al cambiar a chk = Dir(Ruta & archAlt)  estás haciendo que chequee si existe el archivo BASE.xlsm en el directorio E:\AIM\. No es correcto, porque daría siempre positivo y entra por la opción  de  abrir el archivo que esté escrito en la celda J3.

La instrucción original chk = Dir(Ruta & Archivo) devuelve vacío ("") si no lo encuentra y, en ese caso, abre el archivo alternativo BASE.xlsm. Luego, desde luego puedes llamarlo como quieras

Vuelve, entonces a la rutina original que funcionó en todas las pruebas que hice.

Ten en cuenta desde qué hoja lanzas esta macro, porque de la celda J3 que esté en ella buscará el archivo. También considera de qué archivo estás disparando esta rutina (que no sea BASE.xlsm, por supuesto)

Alternativamente, esta variante de aquella rutina, al no encontrar el archivo indicado en J3 crea uno nuevo y lo graba con el nombre que estuviere en esa celda:

Sub DESEMBOLSO_ABRIR()
'---- Variables modificables ----
'===  MIGUEL, modificá estos datos de acuerdo a tu proyecto:
'
Ruta = "E:\AIM\"
Archivo = Range("J3").Value
ArchAlt = "base.xlsm"
'
'---- fin Variables
'
Ruta = Ruta & IIf(Right(Ruta, 1) = "\", "", "\")
chk = Dir(Ruta & Archivo)
If chk = "" Then
    'Workbooks.Open (Ruta & ArchAlt)
    Workbooks.Add
    ActiveWorkbook.SaveAs Ruta & Archivo
Else
    Workbooks.Open (Ruta & Archivo)
End If
End Sub

Espero que puedas lograrlo, la rutina funciona es correcta. Creo que estás cerca.

Saludos

Fer

.

Hola.

La extension que esta macro crea es de un archivo .xlsx y todas las extensiones que tengo son .xlsm.

voy a tratar de cambiarlas todas a ver como funciona, puede que hasta la primera macro funcione cambiando todas mis extensiones.

Te dejo saber.

O si se puede que esta macro cree las extensiones .xlsm

.

Espero que no lo hayas hecho porque perderías las macros que tuvieras en esos archivos.

En mi segunda respuesta, te escribí:

Asegurate de que el nombre del archivo esté escrito correctamente, con extensión incluida, en la celda de la variable (J3).

Por lo que mencionas, me parece que no lo estas haciendo así. Por eso, MS Excel le agrega automáticamente .xlsx

Podría agregar a la rutina que coloque esa extensión pero preferí dejarlo liberado a que lo hagas en la celda por si pudiera ser otra.

Pero si estás seguro que siempre será .xslm, puedes usar esta variante:

Sub DESEMBOLSO_ABRIR()
'---- Variables modificables ----
'===  MIGUEL, modificá estos datos de acuerdo a tu proyecto:
'
Ruta = "E:\AIM\"
Archivo = Range("J3").Value
ArchAlt = "base.xlsm"
Extension = "xlsm"
'
'---- fin Variables
'    
Ruta = Ruta & IIf(Right(Ruta, 1) = "\", "", "\")
Archivo = Archivo & "." & Extension
chk = Dir(Ruta & Archivo)
If chk = "" Then
    Workbooks.Open (Ruta & ArchAlt)
Else
    Workbooks.Open (Ruta & Archivo)
End If
End Sub

Desde luego, si usas esta variante NO debes colocar -en J3- el archivo con su extensión.

Espero que ahora si te funcione como pretendes.

Abrazo

Fer

.

¡Gracias! 

!Bingo!

Gracias mil Fernando. Caso resuelto

.

Perfecto! Me alegro de que lo tengas resuelto.

Abrazo

Fer

.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas