Trabajar con libro sin abrirlo...

Tengo un formulario, en el cual cargo datos, que pasan a un libro de excel cerrado.

La cuestión es si existe una forma de que verifique si existe y sino lo cree, verifica si posee una hoja y sino lo cree.

Y que busque la ultima fila y me cargue los datos en la ultima fil

Estuve viendo por internet, pero tengo inconvenientes con crear las hojas y con buscar la ultima fila

Si puede ayudarme

1 respuesta

Respuesta
1

[Hola

Una forma muy simple de verificar si existe un archivo y si existe una hoja:

Sub ArchivoExiste()
If Dir("D:\Archivo.xlsx") = "" Then
    MsgBox "No existe el archivo"
    Exit Sub
Else
    MsgBox "El archivo existe"
End If
End Sub
Sub hojaExiste()
For x = 1 To Worksheets.Count
    If Worksheets(x).Name = "Hoja3" Then
        MsgBox "La hoja existe"
        Exit Sub
    End If
Next
MsgBox "La hoja no existe"
End Sub

Para hallar la última fila llena hay varias formas, una es la siguiente tomando como referencia la columna "A" (1):

Dim UltimaFila As Long
Let UltimaFila = Cells(Rows.Count, 1).End(xlUp).Row

Comentas]
Abraham Valencia

PD: En realidad es imposible trabajar sobre archivos cerrados de Excel, supongo que te refieres a que no se vea que se abre el archivo

Claro, conozco esos códigos, lo que sucede es que yo uso el siguiente código para modificar sin abrirlo:

Set Archivo = CreateObject("Excel.Application")
'
With Archivo
    '
    'Asignamos el nombre del archivo
    NombreArchivo = "C:\carpeta\Libro1.xlsx"
    '
    'Validamos si el archivo ya está abierto
    If IsFileOpen(NombreArchivo) Then
    Else
        '
        With .Workbooks.Open(NombreArchivo)
            'Hacemos las modificaciones en el archivo
            .Worksheets("Hoja1").Range("A1").Value = "Total1"
            .Worksheets("Hoja1").Range("A2").Value = 11
            'Cerramos el archivo guardando cambios
            .Close SaveChanges:=True
        End With
    End If
    '
    'Cerramos la aplicación de Excel
    .Quit
End With

pero de esa forma no funcionan los que me dijiste!

Veo que trabajas con un objeto Excel y usasIsFileOpen ¿en qué programa estás trabajando? Parecía VBA ya que marcaste solo "Excel" y "Macros Excel". ¿Estás usando alguna versión de VB.Net? ¿Cuál? Las formas que te he dicho son simples para lograr lo que pedías, solo es cuestión de adaptarlas al lenguaje que estés usando, no está complicado.

Por cierto, al usar una instrucción "Open" sí o sí se abre el archivo así NO lo veas.

Comentas

Abraham Valencia

claro, por eso, yo trabajo en excel. Mi idea es buscar una forma rápida y eficiente de ver los datos que posea un libro, para modificar o cargar los nuevos datos, nada mas.

Si yo uso la opción workbooks.open y workbooks.close hace lento el proceso, desconozco porque, ademas de que se ve el proceso en que se abre y se oculta mediante application.visible=false, igualmente se ve ese proceso.

Mi idea es poder cargar o modificar stock rápido sin que haga muchos procesos en pantalla.

y de esa forma no se ve cuando se abre, pero no me deja o no se como obtener los datos que consulte anteriormente.

ese es el código lento, el cual lo quiero adaptar a lo que te mencione.

[Hola nuevamente

Lo que envías ahora es bastante diferente a lo que enviaste primero ¿algún código es tuyo? ¿Has intentado adaptar algo a lo que tú estás haciendo? Por cierto, así se use "open" (lo que abre el archivo) puede estar no visible con lo que evitarás el, justamente, ver todo el proceso, no me queda claro porque mencionas que no.

Creo que sería más fácil que intentes todo en un archivo nuevo como para que pruebes las recomendaciones hechas, o leídas, antes de adaptarlo a todo lo que podrías tener y hacer preguntas puntuales para ayudarte que no quede en el aire el mensaje.

Ah, otra alternativa es que uses ADO, pero no sé si has leído sobre ese tema.

Abraham Valencia

El primer código que envié es el que encontré en Internet, y el segundo es completamente mio. Yo no poseo conocimientos avanzados en excel, por eso capas te parezca muy simple lo que estoy pidiendo.

si yo uso 

With .Workbooks.Open(NombreArchivo)

y adaptando a mi código busco la ultima fila con el código

Application.WorksheetFunction.CountA(h1.Range("AU:AU"))

Me salta un error que dice subindice fuera de intervalo, lo mismo sucede con crear nueva hoja, cuando creo la hoja me tira el mismo error.

Por eso, mi pregunta va orientada a si hay alguna forma de hacer ese proceso en forma rápida o únicamente usando el código que te pase, el mio.

[Hola

Un ejemplo con dos archivos. Desde el primero se verifica si existe el otro archivo, si está abierto y si existe la hoja y después se envían los datos desde el "Userform". Mira la forma en que se hace todo eso y como se hace las referencias respectivas a cada libro para enviar los datos. Ah, mira el uso de "Application.ScreenUpdating" para evitar que se vea el archivo abierto y los cambios.

https://drive.google.com/file/d/1k8uXLlM3WVGcTJrDFJQltVY9SR40WGhv/view?usp=sharing 

Saludos]

Abraham Valencia

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas