Excel - editar registros con VBA

   
Vista:

editar registros con VBA

Publicado por Ramon piqueramon@gmail.com (4 intervenciones) el 09/07/2017 13:23:37
Hola a tod@s. Aunque me desenvuelvo bastante bien en excel, soy nuevo en VBA. El problema que tengo y os expongo es que, no se editar los registros de una tabla de datos en excel. Os adjunto la aplicación con el formulario de recogida de datos y mil gracias a los que podais ayudarme.
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

editar registros con VBA

Publicado por Antoni Masana (592 intervenciones) el 10/07/2017 09:02:59
He visto la tabla de datos (vacçia) y el formulario.

Ahora la pregunta: ¿Que deseas hacer?

[_] Altas.
[_] Consultas.
[_] Modificaciones.
[_] Bajas o anulaciones.

Mas preguntas.
- ¿Que finalidad tiene esto?
- ¿Cuando debe mostrarse el formulario? El usuario no debe buscarlo como programador porque no lo es
- ¿Puede o debe ve la hoja Excel?

Sobre programacìón

1
2
Private Sub C3_Enter(); calendario.Show ;If IsDate(Fecha) Then C3 = Fecha
C5.SetFocus:DoEvents:End Sub

1
2
3
4
5
6
Private Sub C3_Enter()
calendario.Show
If IsDate(Fecha) Then C3 = Fecha
C5.SetFocus
DoEvents
End Sub

1
2
3
Private Sub CommandButton4_Click()
    Unload Me
End Sub

Las tres funciones que pongo arriba funcionan igual de bien. Pero...

- La primera es una aberración
- La segunda es difícil de leer per el humano
- El tercero es la más correcta

La segunda estaría mejor así

1
2
3
4
5
6
Private Sub C3_Enter()
    calendario.Show
    If IsDate(Fecha) Then C3 = Fecha
    C5.SetFocus
    DoEvents
End Sub

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

editar registros con VBA

Publicado por Antoni Masana (592 intervenciones) el 10/07/2017 09:58:42
Te comento otros detalles que he visto en el formulario:

Hay una propiedad que se llama TabIndex que la tiene prácticamente todos los objetos y donde mayor efecto hace es en los que el usuario actúa, Botones, TextBox, ComboBox, Etc. y su finalidad es indicar cual será el primer objeto donde se posiciona el Cursor y la secuencia de objetos a los que debe ir saltando.

Visual Basic los va numerando según los colocas en el formulario y la secuencia puede no ser la que deseas, por ejemplo en tu formulario los tres primeros objetos a los que se mueve el cursor son Nif, Carrer, C. POSTAL, en este último no se ven los números, pero eso es otro problema.

El orden correcto debería ser: Tipus, Lletra, NIF, ¿Cual es la finalidad del segundo campo NIF? ¿Es editable?

Y le falta mucho por pulir a tu programa.

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

editar registros con VBA

Publicado por Ramon (4 intervenciones) el 11/07/2017 00:01:46
Buenas noches amigo Antonio;
En primer lugar, gracias por el tiempo que me has dedicado.
Permiteme que me presente. Me llamo Ramon, soy de Lleida y desde hace muchos años resido en Barcelona. Tengo 65 años, no tengo familia ni tengo nada. Mi unica fuente de ingresos que me permiten sobrevivir son 500€ que me dan en una empresa por hacer chapuzas en excel.
Ahora me han pedido hacer un formulario para recoger datos en una tabla de excel porque dicha tabla se hace engorrosa de trabajar debido al numero de columnas que tiene, de ello depende el que pueda continuarr siendo util a la empresa o que me sustituyan. Este formulario es el que conoces y que ahora te remito de nuevo con los cambios que he añadido.
Cuando era joven hice mis pinitos en basic, dBase III y cliper (sin objetos). Lo que he hecho hasta ahora ha sido aporte de la gente que me quiere ayudar y unos poquitos conocimiento mios en base a mis recuerdos de programación.
La aplicación debe de poder hacer:
1.- altas
2.- consultas (por DNI y APELLIDO1)
3.- modificaciones.
El formulario pretende recoger los datos de la tabla. Si salimos podemos volver a entrar con CTRL-Z.
El formulario puede verlo y usarlo cualquier persona de la oficina.
Conozco algo del tabIndex y su uso. El frame2 que encierra: TIPUS, LLETRA Y NIF, pretende validar el NIF o NIE y una vez calculada la letra debe de ponerlo en el TexBox que esta fuera del frame. Se que cuando los TabIndex se encierran en un frame pierden el orden de asignacion.
El formulario se abre al llamar al libro "MASTER40.xlsm".
La aplicacion al dia de hoy le falla la grabacion de datos tipo "fecha". Deberia de guardar en formato "dd/mm/aa" y no lo hace correctamente.En lugar de dar formato a las variables una a una pense que tal vez seria mejor formatear el valor que me entrega "calendario". Me han pasado la instrucción "Fecha = CDate(FechaCalendario)", pero no se usarla.
Si me ayudas estoy dispuesto a pagarte. Si no consigo hacer la aplicacion pierdo el trabajo.
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

editar registros con VBA

Publicado por Juan dls (3 intervenciones) el 10/07/2017 12:12:41
Hola Ramón, ¿la parte de crear un nuevo registro funciona bien?
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

editar registros con VBA

Publicado por Ramon (4 intervenciones) el 11/07/2017 00:07:25
Hola Juan;
Al dar de alta el registro falla el formateo de las variables "fecha". Deberia ser "dd/mm/aa" y entrega "mm/dd/aaaa" o "mm/dd/aa". Sin formatear las variables todo va bien. El resto funciona correctamente.
Gracias.
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

editar registros con VBA

Publicado por Antoni Masana (592 intervenciones) el 11/07/2017 12:32:31
Te adjunto un JPG con algunas preguntas.
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

editar registros con VBA

Publicado por Ramon (4 intervenciones) el 11/07/2017 20:28:10
Buenas tardes de nuevo;
Ayer no me supe explicar. El texbox "NIF", que me indicas como "para que sirve?" debe de recojer el DNI o NIF ya validado en el frame "VALIDACIO NIF" con su letra correspondiente en el caso de "ALTA".
Cuando estemos tratando una "MODIFICACION" o una "EDICION" debe de recoger el DNI o NIF a buscar.
Los 4 frames: "LLUM", "IRER" ,"GAS" y "AIGUA", contiene dos tipos de datos:
Texbox cuadrado: deben de contener o "1" o "". Puede estar activado o no. Variable boolean ?
Texbox rectangular: Cuando el texbox cuadrado recoge un "1" (activado) recogerá la fecha en la que se tratará el proceso. Puede ser cualquier fecha.
Puede haber valor en texbox cuadrado y que se ponga fecha en el texbox rectangular, otro dia.
Pero siempre: PARA QUE HAYA FECHA DEBE DE EXISTIR VALOR EN CUADRO PEQUEÑO.
En los cuatro frames puede haber valores o NO.
Puede darse el caso que solo entremos los "datos del usuario" y al dia siguiente, mediante EDICION, completar la ficha.
Cuando una actividad texbox "cuadrado" este activada y el proceso iniciado para trámites con fecha texbox "rectangular" haya finalizado, mi idea era indicar la finalizacion del trámite cambiando el color de la fecha de inicio o el color del fondo, o el tipo de letra (bold, italic,etc), mediante "doble clic" en el texbox rectangular.
Cuando entramos un DNI:
Si no existe------> SE CREA y muestra en el texbox "c_nif_validado", el que hemos comentado y está fuera del frame.
Si existe ---------> SE MUESTRA el contenido de los campos del registro y decidimos: MODIFICARLO o NO.
Renumerar los Texbox, seria muy buena idea. Ya seria para sobresaliente.
He añadido dos texbox nuevos.
1.-Para observaciones (campo memo), texbox "c_observa"
2.- En el frame "LLUM" ----->BO SOCIAL (2.3). Tengo que desplazar el resto de texbox a las casillas correspondiente del registro de la hoja excel..
En las celdas de "fecha" no se respeta el formato "dd/mm/aa", lo pone en formato "mm/dd/aa" o "mm/dd/aaaa". Casualmente solo se respeta el formato con la variable "alta", la única que no está nombrada empezando por "c_".
Espero que hoy haya sabido explicarme mejor.
Muchas gracias de nuevo.
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

editar registros con VBA

Publicado por Antoni Masana (592 intervenciones) el 13/07/2017 20:06:45
Te pongo un codigo para validar que en el cuadro pequeño solo se pueda poner un 1

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
' ----------------------------------------------------------------------------
' ---&---  Valida el grup Llum
' ----------------------------------------------------------------------------
 
Private Sub c_llum_assesor_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger): Call Valida_Key(KeyAscii, c_llum_assesor): End Sub
Private Sub c_llum_comer1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger): Call Valida_Key(KeyAscii, c_llum_comer1): End Sub
Private Sub c_llum_titular_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger): Call Valida_Key(KeyAscii, c_llum_titular): End Sub
Private Sub c_llum_potencia_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger): Call Valida_Key(KeyAscii, c_llum_potencia): End Sub
Private Sub c_llum_bosocial23_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger): Call Valida_Key(KeyAscii, c_llum_bosocial23): End Sub
Private Sub c_llum_bosocial_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger): Call Valida_Key(KeyAscii, c_llum_bosocial): End Sub
Private Sub c_llum_discrimina_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger): Call Valida_Key(KeyAscii, c_llum_discrimina): End Sub
Private Sub c_llum_atall_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger): Call Valida_Key(KeyAscii, c_llum_atall): End Sub
Private Sub c_llum_anova_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger): Call Valida_Key(KeyAscii, c_llum_atall): End Sub
Private Sub c_llum_reconex_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger): Call Valida_Key(KeyAscii, c_llum_reconex): End Sub
 
' ----------------------------------------------------------------------------
' ---&---  Valida el grup IRER
' ----------------------------------------------------------------------------
 
' ----------------------------------------------------------------------------
' ---&---  Valida el grup GAS
' ----------------------------------------------------------------------------
 
' ----------------------------------------------------------------------------
' ---&---  Valida el grup AIGUA
' ----------------------------------------------------------------------------
 
 
' ----------------------------------------------------------------------------
' ---&---  Valida caracter
' ----------------------------------------------------------------------------
 
Sub Valida_Key(Key, Objeto)
    If Chr(Key) = "1" And Len(Objeto.Text) = 0 Then
     '  Objeto.Text = "1"
    Else
       Key = 0
    End If
End Sub

Solo tienes que añadir los otros grupos.

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