Visual Basic - como grabar dentro del excel abierto y no dentro de uno nuevo

Life is soft - evento anual de software empresarial
 
Vista:
sin imagen de perfil

como grabar dentro del excel abierto y no dentro de uno nuevo

Publicado por carlos2433 (9 intervenciones) el 18/09/2022 19:48:26
Buenas tardes, tengo un formulario que envia la información de un textbox a una planilla excel, al dar click en el boton de enviar los datos del textbox viajan a la mencionada planilla de excel.

Con el primer registro todo bien, pero al dar click en el segundo se abre una nueva planilla de excel y no guarda en la existente que ya tenía el primer dato.

Se que es posible hacer que compruebe que hay un excel abierto y en el caso que lo haya ... seguir grabando en ese excel y no en uno nuevo.

El tema es que no sé como hacerlo.

Agradezco quien pueda y quiera guiarme.

Saludos cordiales y desde ya ... muchas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Antoni Masana
Val: 1.259
Plata
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

como grabar dentro del excel abierto y no dentro de uno nuevo

Publicado por Antoni Masana (558 intervenciones) el 19/09/2022 16:40:27
Sube el libro para ver que haces y como lo haces.
Sera más fácil de explicar viendo el libro y lo que intentas hacer.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

como grabar dentro del excel abierto y no dentro de uno nuevo

Publicado por Carlos (9 intervenciones) el 20/09/2022 21:31:49
Muchas gracias por su respuesta Antoni.

Detallo el código que contiene el botón guardar, dicho código está llamando bien al excel y envía correctamente lo que el textbox tiene en el momento de "guardar".
El problema está en que en el próximo "guardado" abre otra planilla excel y así se van abriendo libros diferentes, todo con un solo registro.

Me gustaría que , si está guardando en la celda de la fila 9, columna 3, el próximo registro se guarde en la fila 10 y así sucesivamente y por supuesto todo en ese excel generado que cambia su nombre cada día, de esta forma quedaría UN SOLO excel con todos los registros de ese día.

Espero haber sido claro y me daría mucha satisfacción si me puede ayudar un poco.


****************************************************************************************************
Private Sub lbltickguardar_Click()


Dim miXls As Excel.Application
Dim miWb As Excel.Workbook
Dim miSh As Excel.Worksheet
Set miXls = New Excel.Application



miXls.Visible = True


Set miWb = miXls.Workbooks.Add

Dim nombreFile As String
Dim fecha As String
fecha = Format(Now, "ddMMyyyyHHmmss")
nombreFile = ""


'Guardamos el archivo
miWb.SaveAs "C:\carlos\Clientes-Local140-" + fecha + ".xlsx"


Set miSh = miWb.Sheets("hoja1") ' O la página en la que quieras grabar

miSh.Cells(9, 3) = Txtpantalla ' Grabamos el valor en la fila 9, columna 3



miWb.Save 'Guarda después de cada registro

' Cerramos el libro
'miWb.Close

' Y el Excel
'miXls.Quit
' Y vaciamos los objetos usados

Set miSh = Nothing
Set miWb = Nothing
Set miXls = Nothing


Me.Hide
Form2.Show 'muestro el formulario 2 que es un formulario de agradecimiento

End Sub

****************************************************************************************************
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de gilman
Val: 594
Bronce
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

como grabar dentro del excel abierto y no dentro de uno nuevo

Publicado por gilman (359 intervenciones) el 21/09/2022 07:59:45
Cambia esta parte del código:
1
2
3
4
Dim miXls As Excel.Application
Dim miWb As Excel.Workbook
Dim miSh As Excel.Worksheet
Set miXls = New Excel.Application
Por esta:
1
2
3
4
5
6
Static miXls As Excel.Application
Dim miWb As Excel.Workbook
Dim miSh As Excel.Worksheet
If miXls Is Nothing then
	Set miXls = New Excel.Application
End If
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

como grabar dentro del excel abierto y no dentro de uno nuevo

Publicado por Alberto (9 intervenciones) el 21/09/2022 12:31:04
Muchas gracias "gilman" por responder, hice los cambios sugeridos pero no ... el resultado sigue siendo el mismo ( no da error ni nada malo, solo que no hace lo que yo quiero que haga )

Al momento sigue abriendo una planilla de excel con cada pulsación en el botón guardar que se ejecuta.

Ejemplo : * en el textbox pongo la palabra "Hola" y le doy guardar ---- ( abre un excel y en la Celda 9 de la columna 3 aparece mi "hola"
* vuelvo a ingresar otro dato ... ejemplo : "Alberto123" --- ( abre OTRO excel con "Alberto123" en la celda 9 )
y así sucesivamente.

El problema puede estar en la forma que estoy grabando el excel original ???

El excel puede quedar "Abierto" absorbiendo los datos del formulario ???
Si esto fuera posible, se podría codificar el formulario para que "guarde" en el archivo excel abierto que está recogiendo los datos ??
Al final del día hacer que el excel se cierre a una hora determinada o que el software se reinicie y obligue a generar un excel nuevo para empezar nuevamente el ciclo.

El razonamiento está bien ?? Es viable ?? Sugerencias ??
Agradezco nuevamente.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de gilman
Val: 594
Bronce
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

como grabar dentro del excel abierto y no dentro de uno nuevo

Publicado por gilman (359 intervenciones) el 22/09/2022 08:08:19
Si lo que pretendes es que se abra un solo libro cada vez que inicias la aplicación, lo mejor es que las variables myXls y myWb fuesen globales.
Crear el libro al iniciarse la aplicación, y guardar en el libro cada vez que sea necesario.
Después al cerrar la aplicación debes cerrar el libro y salir de excel para evitar que consuma memoria
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

como grabar dentro del excel abierto y no dentro de uno nuevo

Publicado por Alberto (9 intervenciones) el 22/09/2022 15:45:09
Buen día, pretendo que se abra UN LIBRO POR DIA, por eso en el momento de grabar acusa como condición el formato "fecha", quizás le quitaría "HHmmss".

Poner una variable que diga que "si el libro no existe ... crearlo y si existe entonces grabar los datos en el ".
No es un razonamiento descabellado, supongo que se puede hacer, el tema es que yo no lo sé pues recién empiezo y me tiene trancado.

Gracias por su tiempo !!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de gilman
Val: 594
Bronce
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

como grabar dentro del excel abierto y no dentro de uno nuevo

Publicado por gilman (359 intervenciones) el 23/09/2022 07:56:57
Si, quita la información sobre la hora.
para saber si el libro existe usa la función Dir(NombreFichero), devuelve "" si el fichero no existe
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

como grabar dentro del excel abierto y no dentro de uno nuevo

Publicado por carlos2433 (9 intervenciones) el 23/09/2022 13:41:52
Si, recuerda que mi archivo a crear cambia día a día según la fecha.

Es mucha molestia si te pido que me escribas la línea que usarías teniendo mi código ( arriba citado ) como referencia ??

A ver si puedo salir de este embrollo que no me deja avanzar !!

Un saludo cordial.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de gilman
Val: 594
Bronce
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

como grabar dentro del excel abierto y no dentro de uno nuevo

Publicado por gilman (359 intervenciones) el 24/09/2022 10:00:46
Como desconozco el resto del proyecto no sé si se podría optimizar y usar una única instancia de excel, así que te dejo este código, que lo único diferente sobre como actúa el tuyo es que no muestra excel y luego cierra todo, tal como tenías antes de comentarlo, si dejas abierto excel, sin cerrar el documento, si no me equivoco, la próxima vez abriría una copia de solo lectura, con lo que no podrías guardar los cambios, por eso lo cierro y salgo de excel, para no tener mas que una instancia en memoria en cada momento
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
Private Sub lbltickguardar_Click()
 
 
    Dim miXls As Excel.Application
    Dim miWb As Excel.Workbook
    Dim miSh As Excel.Worksheet
    Dim nombreFile As String
    Dim fecha As String
 
        'la primera vez que hacemos click creamos la aplicación
        Set miXls = New Excel.Application
        'No deberiamos hacer excel visible, ya que no queremos que el usuario maneje nuestra instancia
'        miXls.Visible = True
 
 
 
    'No ponemos la hora, para que solo cree un archivo cada día
    fecha = Format(Now, "ddMMyyyy")
    nombreFile = "C:\carlos\Clientes-Local140-" + fecha + ".xlsx"
    If Dir(nombreFile) = "" Then
        'El archivo no exisxte
        'Lo añadimos a la instancia de excel
        Set miWb = miXls.Workbooks.Add
        'No hace falta guardar el archivo, lo guardaremos mas adelante
        'Guardamos el archivo
        'miWb.SaveAs nombreFile
 
    Else
        'El archivo ya existe lo cargamos del disco
        Set miWb = miXls.Workbooks.Open(nombreFile)
    End If
 
    Set miSh = miWb.Sheets("hoja1") ' O la página en la que quieras grabar
 
    miSh.Cells(9, 3) = Txtpantalla.Text ' Grabamos el valor en la fila 9, columna 3
 
 
 
'    miWb.Save 'Guarda después de cada registro
 
'     Cerramos el libro y guaqrdamos los cambios
    miWb.Close True
 
    ' Y el Excel
    miXls.Quit
    ' Y vaciamos los objetos usados
 
    Set miSh = Nothing
    Set miWb = Nothing
    Set miXls = Nothing
 
 
    Me.Hide
    Form2.Show 'muestro el formulario 2 que es un formulario de agradecimiento
 
End Sub
P.D.:
Para futuras intervenciones, pon el código entre las etiquetas code, seleccionándolo todo y pulsando el botón </>Código, lo hace automáticamente y así se mantiene la indentación y es más fácil de leer y de copiar.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

como grabar dentro del excel abierto y no dentro de uno nuevo

Publicado por Alberto (9 intervenciones) el 24/09/2022 13:17:08
Muchas gracias !!!, lo vamos a probar, has sido muy amable, veamos si logro avanzar.

Tengo en cuenta tu sugerencia también de agregar códigos en la opción de </>Código y no dentro del mismo mensaje en cuestión.

Agradecido y calificado tu útil aporte.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar