Conocer el nombre o extraer el nombre de un archivo desde su ruta para activarlo
Estoy tratando de activar un archivo desde su ruta, el archivo se selecciona por medio de msoFileDialogFilePicker, y desde esta ruta lo abro pero no se como activarlo, la intención es copiar unos datos del libro activo al libro seleccionado
Workbooks.Open Filename:=ruta 'nomArchivo = Right(Path, Len(Path) - InStrRev(Path, "\")) Workbooks(nomArchivo). Activate
lo intente como ves con InStrRev pero realmente no e encontrado como utilizarlo
1 Respuesta
H o l a:
Puedes describirme con detalle lo que necesitas.
¿Qué quieres copiar y en dónde lo quieres pegar?
Todo explicado con ejemplos y con nombres reales.
hola muchas gracias por la atención
lo que trato de hacer es copiar una linea de un registro a otro libro; tengo una base donde registro la información en la segunda linea de esta,
BASE LIBRO DE TRABAJO
esta linea registrada la copio o exporto a otro libro, el que con anterioridad me verifica si existe y me da lo opción de seleccionarlo, en caso contrario, esta selección se guarda como una ruta para editar en un rango de una hoja
Sub EXPORTAR_REGISTRO() ' EXPORTAR primera linea ThisWorkbook.Sheets("BASE").Range("A2:Y2").Copy 'Verificar si la ruta o esta vacia rutar = Hoja15.Cells(2, 3) If Hoja15.Cells(2, 3) = "" Then resp = MsgBox("No existe el archivo: " & rutar & vbCr & vbCr & _ "Quieres seleccionar el archivo", _ vbQuestion & vbYesNo, "SELECCIÓN DE ARCHIVO") If resp = vbNo Then Exit Sub ' rutar = ThisWorkbook.Path 'selecciono ruta y la guardo en la hoja rutas hoja 15 With Application.FileDialog(msoFileDialogFilePicker) .Title = "Selecciona una archivo" .AllowMultiSelect = False .InitialFileName = rutar If .Show <> -1 Then Exit Sub rutar = .SelectedItems(1) End With Hoja15.Cells(2, 3) = rutar End If 'Verificar si la ruta existe If Dir(rutar, vbDirectory) = "" Then resp = MsgBox("No existe la carpeta: " & rutar & vbCr & vbCr & _ "Quieres seleccionar la carpeta", _ vbQuestion & vbYesNo, "SELECCIÓN DE CARPETA") If resp = vbNo Then Exit Sub rutar = ThisWorkbook.Path 'selecciono ruta y la guardo en la hoja rutas hoja 15 With Application.FileDialog(msoFileDialogFilePicker) .Title = "Selecciona una archivo" .AllowMultiSelect = False .InitialFileName = rutar If .Show <> -1 Then Exit Sub rutar = .SelectedItems(1) End With Hoja15.Cells(2, 3) = rutar End If '___________________________________________________________________ 'abrir el libro Workbooks.Open fileName:=rutar 'asignar nombre de libro nomArchivo = Hoja15.Cells(2, 4).Value 'activar el libro Workbooks(nomArchivo).Activate 'selecionar hoja para agregar linea y pegar datos Sheets("BASE").Range("A2").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove Sheets("BASE").Range("A2").PasteSpecial Paste:=xlPasteValues Workbooks(nomArchivo).Save Workbooks(nomArchivo).Close Application.CutCopyMode = False Application.ScreenUpdating = True 'Control: 'MsgBox "Falta ruta de INFORME para exportar registro ", vbInformation, " Operacion No es posible " 'rutaexp = falso 'Exit Sub End Sub
bueno de todo esto e podido seleccionar la ruta crearla y guardarla, pero cuando quiero abrir el archivo me genera error 9, ademas si el archivo esta abierto me genera mensaje de confirmación, si deseo abrirlo nuevamente, cosa que no quiero que salga.
La parte de extraer el nombre el archivo de su ruta lo logre con un función directamente en el rango nombre archivo y extensión con esto
Option Explicit Function sacar(ruta As String) As String sacar = Right(ruta, Len(ruta) - InStrRev(ruta, "\")) End Function
En las imágenes no se ven las filas y las columnas. Puedes poner una imagen donde se vean las columnas.
Puedes explicar paso a paso lo que quieres hacer.
Hay varias cosas que no entiendo en tu macro, por eso te pedí que me explicaras lo que necesitas, de esa forma crear la macro nueva.
sal u dos
H o l a:
Te anexo la macro actualizada y una función para buscar el archivo.
Antes de ejecutar la macro, para que haga sentido, en la hoja15, en la celda B3 deberás poner únicamente la ruta y en la celda C3 únicamente el nombre del archivo, por ejemplo:
La macro completa:
Sub EXPORTAR_REGISTRO() 'Act.Por.Dante Amor Application.ScreenUpdating = False Application.DisplayAlerts = False Set l1 = ThisWorkbook Set h1 = l1.Sheets("BASE") Set h15 = Hoja15 ' 'VALIDAR RUTA Y ARCHIVO ruta = h15.Range("B3") arch = h15.Range("C3") If ruta = "" Or arch = "" Then resp = MsgBox("Datos incompletos. Quieres seleccionar el archivo", _ vbQuestion & vbYesNo, "SELECCIÓN DE ARCHIVO") If resp = vbNo Then Exit Sub rutaarch = selarch(ruta, h15) If rutaarch = "" Then Exit Sub Else If Right(ruta, 1) <> "\" Then ruta = ruta & "\" rutaarch = ruta & arch If Dir(ruta & arch) = "" Then resp = MsgBox("No existe el archivo : " & ruta & arch & vbCr & vbCr & _ "Quieres seleccionar el archivo", _ vbQuestion & vbYesNo, "SELECCIÓN DE ARCHIVO") If resp = vbNo Then Exit Sub rutaarch = selarch(ruta, h15) If rutaarch = "" Then Exit Sub End If End If 'ABRIR EL ARCHIVO Set l2 = Workbooks.Open(Filename:=rutaarch) Set h2 = l2.Sheets("BASE") 'COPIAR, PEGAR Y GUARDAR ARCHIVO h1.Range("A2:Y2").Copy h2.Range("A2").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove h2.Range("A2").PasteSpecial Paste:=xlPasteValues l2.Close True End Sub ' Function selarch(ruta, h15) 'Por.Dante Amor With Application.FileDialog(msoFileDialogFilePicker) .Title = "Selecciona una archivo" .Filters.Clear .Filters.Add "xls.*", "*.xls*" .AllowMultiSelect = False .InitialFileName = ruta If .Show <> -1 Then Exit Function selarch = .SelectedItems(1) 'Actualizar la hoja15 h15.Range("B3") = Left(selarch, InStrRev(selarch, "\")) h15.Range("C3") = Mid(selarch, InStrRev(selarch, "\") + 1) End With End Function
La macro revisa los datos de la hoja15, si están en blanco te envía un mensaje para seleccionar el archivo.
Si la ruta y arch no existen, te envía un mensaje para seleccionar el archivo.
Si no seleccionas el archivo, termina.
Si seleccionas el archivo te actualiza la hoja15.
Abre el archivo, copia, pega y guarda.
Ahora, si el libro está abierto y ya le hiciste cambios, pero no haz guardado esos cambios, te envía la Advertencia. Qué quieres hacer, ¿qué la macro guarde el archivo para que de esa forma no te envié el mensaje?
'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias
muchísimas muchísimas gracias.
si preferiría que el archivo no se vea en este caso que no envié el mensaje y se guarde. muchas gracias
No entendí tu comentario.
Estás trabajando con 2 libros. El libro 1 tiene la macro. El libro2 es el archivo destino.
Si estás modificando el archivo destino y no los has guardado y lo quieres abrir con la macro, te va a enviar el mensaje de Advertencia.
Lo que se puede hacer con la macro es
Opción 1. Detener la macro y enviarte un mensaje, para que revises el archivo destino y revises lo que tengas que revisar.
Opción 2. Guardar el archivo destino y que la macro continúe.
sal u dos
HOLA
Que pena retomar es que me genera erro 424 en esta parte
Set h2 = l2.Sheets("BASE")
en la selección de la hoja destino
No es ninguna molestia, te explico lo que sucede.
El libro destino tiene que tener una hoja llamada "BASE".
Eso es lo que tenías en tu macro:
Sheets("BASE"). Range("A2").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Si no tiene una hoja llamada "BASE", entonces en dónde se va a pegar la información?
Sin duda hay que realizar varias validaciones para que se pueda copiar información de un archivo a otro; y con gusto te ayudo con todas ellas, pero deberás crear una pregunta para cada petición.
- Compartir respuesta