Visual Basic para Aplicaciones - Modificar datos sin borrar el resto

Life is soft - evento anual de software empresarial
 
Vista:
sin imagen de perfil
Val: 14
Ha aumentado su posición en 7 puestos en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Modificar datos sin borrar el resto

Publicado por 3.12 (9 intervenciones) el 02/03/2017 16:07:01
Hola a todos!
Estoy creando libros excels para exportar los datos a un libro común.
Las hojas de estos excels, presentan una ventana donde se pueden ingresar datos de entradas y salidas de productos a una planta. La aplicación ya está creada, pero se me presenta un problema. Ingreso los datos y se copian en el primer libro excel sin problemas, pero si uno de los datos esta mal puesto o en un principio me faltaba y lo quiero añadir, después de haber ingresado los primeros y guardado el archivo, se borra lo anterior quedando el valor de las celdas 0.
No se si existirá un comando que me permita guardar esos datos sin que se pierdan al modificar alguno de ellos.

Espero haberme explicado bien y que me podáis ayudar.

Un saludo!
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.134
Oro
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Modificar datos sin borrar el resto

Publicado por Antoni Masana (498 intervenciones) el 03/03/2017 07:19:07
Puedes subir un fichero de ejemplo?
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
Val: 14
Ha aumentado su posición en 7 puestos en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Modificar datos sin borrar el resto

Publicado por Susana (9 intervenciones) el 03/03/2017 09:56:33
Adjunto ejemplo. Tendrás que renombrar o guardar en otro fichero antes de abrir la aplicación seguramente.
Un saludo!
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 Antoni Masana
Val: 1.134
Oro
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Modificar datos sin borrar el resto

Publicado por Antoni Masana (498 intervenciones) el 07/03/2017 07:42:13
Buenos días Susana.

Sin ánimo de criticar pero me parece caótico la hoja de Excel, es como muy difícil de leer.

Si la intención es que el usuario maneje los datos desde el programa se tendría que poner unos pocos comandos para que la hoja sea trasparente para el usuario.

Otro problema es entender que pretendes realizar o que propósito tiene esta aplicación, es compleja de…

Para poder ayudarte necesitaría entender mejor la finalidad de este libro. Cuando y como se introducen los datos, se consultan, se modifican, si la o las hojas son de consulta o solo hace el papel de base de datos.

A parte del problema que tienes, se puede hacer que al abrir el Libro no se vea y solo muestre el aplicativo (menú) sin necesidad de pulsar un botón, eso, si el usuario no tiene que ver las hojas.

Hay varios trucos para manejar los TextBox en bucle que facilita mucho el código, te incluyo un par de ellos


Con este ejemplo de macro se recorre todos los textbox de tu formulario y pondrá su valor en la primera hoja de tu libro desde la celda A1 hacia abajo

1
2
3
4
5
6
7
8
9
10
Private Sub CommandButton1_Click()
    'por luismondelo
    fila = 1
    For Each ctrl In Me.Controls
        If TypeName(ctrl) = "TextBox" Then
           Sheets(1).Cells(fila, 1).Value = ctrl.Value
           fila = fila + 1
        End If
    Next
End Sub


Ejecuta esta macro y te anotará el contenido de tus textbox en la columna A desde A1 hacia abajo

1
2
3
4
5
6
7
8
9
10
11
12
Sub prueba()
    fila = 1
    Dim o As OLEObject
    For Each o In Worksheets(1).OLEObjects
        If Left(o.Name, 3) = "Tex" Then
           x = o.Index
           valor = ActiveSheet.OLEObjects("TextBox" & x).Object.Text
           Cells(fila, 1).Value = valor
           fila = fila + 1
        End If
    Next
End Sub

Si quieres seguimos en contacto, me gustaria poder ayudarte.

Saludos.
\\//_
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 Antoni Masana
Val: 1.134
Oro
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Modificar datos sin borrar el resto

Publicado por Antoni Masana (498 intervenciones) el 07/03/2017 12:38:50
Estoy estudiando tu código y es bastante básico.

Por ejemplo he tomado el proceso cboMesResumen_Change que tiene 353 lineas y lo he convertido en 45 con cabecera y todo.

Te lo incluyo para que tengas una idea de lo que digo:

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
' </> --------------------------------------------------------------------- </>
' </> ---&---  Aqui se pone que hace el proceso
' </> --------------------------------------------------------------------- </>
 
Private Sub cboMesResumen_Change()
    Dim ws As Worksheet
    Dim i As Integer, Col as Integer
 
    If cboAñoC.Value = "2016" Then j = 0
    If cboAñoC.Value = "2017" Then j = 12
    If cboAñoC.Value = "2018" Then j = 24
 
    Set ws = Sheets(frm1Menu.cboResiduo.Value)
 
    With ws
        Select Case cboMesResumen '----RESUMEN------
            Case "ENERO"     : Col=8
            Case "FEBRERO"   : Col=9
            Case "MARZO"     : Col=10
            Case "ABRIL"     : Col=11
            Case "MAYO"      : Col=12
            Case "JUNIO"     : Col=13
            Case "JULIO"     : Col=14
            Case "AGOSTO"    : Col=15
            Case "SEPTIEMBRE": Col=16
            Case "OCTUBRE"   : Col=17
            Case "NOVIEMBRE" : Col=18
            Case "DICIEMBRE" : Col=19
        End Select
 
        For i = 1701 To 1736
            Me.Controls("Label" & i).Caption = ""
        Next i
 
        For i=8 to Col
            Me.Controls("Label", 1693+i).Caption = Format(.Cells( 21,  i + j), "Standard")
            Me.Controls("Label", 1706+i).Caption = Format(.Cells( 23,  i + j), "Standard")
            Me.Controls("Label", 1718+i).Caption = Format(.Cells(118,  i + j), "Currency")
        Next
 
        Label1776.Caption = Format(.Cells( 20, Col + j), "Standard") 'totales
        Label1777.Caption = Format(.Cells( 22, Col + j), "Standard")
        Label1778.Caption = Format(.Cells(117, Col + j), "Currency")
    End With
End Sub

Una cosa que le falta a tu codigo es la Indentación o como se dice en castellano sangrado, esto facilita mucho la lectura y los comentarios de que hace cada proceso, ahora te acuerdas pero dentro de un año si lo tienes que revisar te veras loca intentando saber que hiciste, porque lo hiciste y que pretendias hacer, sobre todo con lo complejo que es y no esta ni acabado.

Una pregunta de curiosidad ¿De donde eres?

Yo soy de Barcelona, España.

Saludos.
\\//_
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
Val: 14
Ha aumentado su posición en 7 puestos en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Modificar datos sin borrar el resto

Publicado por Susana (9 intervenciones) el 13/03/2017 09:36:43
Perfecto, muchas gracias seguiré tus consejos.

De Madrid, pero ahora estoy viviendo en Barcelona
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
Val: 14
Ha aumentado su posición en 7 puestos en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Modificar datos sin borrar el resto

Publicado por Susana (9 intervenciones) el 16/03/2017 17:05:22
Hola Antoni, seguí tus consejos y con todo el programa completo (además de sangrados y comentarios) me da fallo, se subrraya el "Private Sub cboMesResumen_Change()" y me destaca (como si yo lo hubiera seleccionado) el primer Me.Controls, después de For i=8....
¿Sábes a que puede darse este error?

Gracias de antemano

Saludos!!
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