Visual Basic para Aplicaciones - guardar modificar

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

guardar modificar

Publicado por Albert (204 intervenciones) el 21/03/2018 18:23:19
buenas tardes foreros, tengo un código que sirve para modificar los datos de una hoja Excel desde un formulario, me funcia bien en una aplicación al copiarla en otra no me funciona he mirado línea por línea y no soy capaz de ver donde me equivoco, os la adjunto por si vosotros veis el error.
Gracias de antemano

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Sub AceptarModificar()
Dim i As Integer
Dim j As Integer
Dim Final As Integer
Dim Final2 As Integer
 
For i = 4 To 10000
If Hoja5.Cells(i, 1) = "" Then
Final = i - 1
Exit For
End If
Next
 
For i = 4 To Final
If FrmNuevo.TextBox13= Hoja5.Cells(i, 1) Then
Hoja5.Cells(i, 1) = FrmNuevo.TextBox13 'Expediente
Hoja5.Cells(i, 2) = FrmNuevo.TextBox38 'fecha
Hoja5.Cells(i, 3) = FrmNuevo.ComboBox6 'Tipo
Hoja5.Cells(i, 4) = FrmNuevo.ComboBox7 'subtipo
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

guardar modificar

Publicado por Antoni Masana (498 intervenciones) el 22/03/2018 15:12:10
Hace falta el libro y explicar que deseas que haga.

De lo contrario no es posible saber que esta bien o esta mal.
De entrada falta código, falta el final del IF, del FOR y del SUB y eso de por si ya es causa de error.

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: 177
Bronce
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

guardar modificar

Publicado por Albert (204 intervenciones) el 23/03/2018 15:04:25
gracias, adjunto el libro, lo que falla es el modulo "aceptarmodificar" debería guardar los cambios pero no lo hace.
para probar en la hoja3 le das al logo y se abre el formulario de seguridad que esta desactivado dándole a aceptar te abre el for,
desde el for le das a la lupa dato a buscar escribes 1 y buscar por expediente, clicas sobre la línea y te abre "modificar expediente" aquí es donde el botón no funciona.
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
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

guardar modificar

Publicado por Antoni Masana (498 intervenciones) el 24/03/2018 13:49:36
No lo he podido probar me da un error en todas las declaraciones, dice:

Error de compilación

El código de este proyecto se debe actualizar para usarse en sistema de 64 bits. Revise y actualice las instrucciones Declare y a continuación, márquelas con el atributo PtrSafe.

son las líneas:
1
2
3
4
5
6
7
Option Explicit
'--------------------------------------------------
Private Declare Function FindWindow Lib "User32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLong Lib "User32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "User32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function DrawMenuBar Lib "User32" (ByVal hwnd As Long) As Long
'--------------------------------------------------

Buscare haber si puedo saber que les pasa y si no lo consigo el martes me lo probare en otro equipo.

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

guardar modificar

Publicado por Antoni Masana (498 intervenciones) el 24/03/2018 19:30:11
Ya me ha funcionado. Solo tenia que poner la palabreja en cuestión en las declaraciones.

1
2
3
4
5
6
7
Option Explicit
'--------------------------------------------------
Private Declare PtrSafe Function FindWindow Lib "User32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare PtrSafe Function GetWindowLong Lib "User32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare PtrSafe Function SetWindowLong Lib "User32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare PtrSafe Function DrawMenuBar Lib "User32" (ByVal hwnd As Long) As Long
'--------------------------------------------------

Solucionado este punto ya he visto el fallo.

Te pongo las primeras lineas de tu código y te explico el error y como detectarlo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Sub AceptarModificar()
    Dim i As Integer
    Dim j As Integer
    Dim Final As Integer
    Dim Final2 As Integer
 
    For i = 4 To 10000
        If Hoja5.Cells(i, 1) = "" Then
            Final = i - 1
            Exit For
        End If
    Next
 
    For i = 4 To Final
        If Val(FrmNuevo.TextBox13) = Hoja5.Cells(i, 1) Then
            Hoja5.Cells(i, 1) = FrmNuevo.TextBox13 'Expediente
            Hoja5.Cells(i, 2) = FrmNuevo.TextBox38 'fecha
            Hoja5.Cells(i, 3) = FrmNuevo.ComboBox6 'Tipo
            Hoja5.Cells(i, 4) = FrmNuevo.ComboBox7 'subtipo

Estaba mal el IF el primer parámetro devuelve un 1 pero en formato texto y el segundo un 1 en formato numérico y en lugar de dar un error devuelve falso:

1
2
3
"1" = "1" es Verdadero
 1  =  1  es Verdadero
"1" =  1  es False

con el VAL() se convierte el primero en numérico.

¿Cómo detectar estos errores? Estos y otros muchos se hace de la siguiente forma: se selecciona una linea del programa en la cual queremos depurar el código, pulsamos F9 queda marcada en color (por defecto marrón) ejecutamos el programa y cuando llegue a la línea marcada se para, podemos analizar las variables seleccionandolas y poniendo el cursor encima o con Shift+F9.

Hay algún truco más pero este es uno de los importantes.

Ahora un consejo y una dura.

Veras que el código que he puesto aquí voy dejando espacios en cada línea a la izquierda, la razón de estos espacios es para facilitar la lectura. En el primer FOR se ve rápidamente que se ejecuta dentro del FOR y que se ejecuta dentro del IF.

En el formulario cuando saltas de un campo a otro no siguen un orden, deberían ir de izquierda a derecha y de arriba a abajo porque de lo contrario te pierdes y no sabes donde esta el cursor. La solución es una propiedad que tienes todos los objetos que se llama TabIndex.

Por ejemplo en el formular de Expediente nuevo:
- En TextBox1 (Nº Expediente) debe tener el TabIndex a 1
- En TextBox32 (Fecha Cargo) debe tener el TabIndex a 2
- En TextBox3 (Fecha T. Campo) debe tener el TabIndex a 3
- etc.
- Y el último seria el botón de aceptar que si no me equivoco debe ser el 33

Por ejemplo tal y como esta después del GPS debería saltar al Nombre y salta al botón de observaciones.

Ahora un par de duras:
Si esta entrado una alta y la quiere cancelar ¿Como se hace? encuentro a faltar ese botón.

¿Porque en la hoja entradas empiezas en la línea 4 y no en la 2? de hecho no me importa, supongo que tendrás tus razones. Si lo que pretendes es diferenciarlo de la cabecera ponla en negrita, un color de fondo suave y bloque la primera línea y queda perfecto.

Bueno pues nada más.

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
Val: 177
Bronce
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

guardar modificar

Publicado por Albert (204 intervenciones) el 26/03/2018 10:42:46
Mil gracias por tus explicaciones, me han sido muy útiles.. ya me funciona ....pero (y no es para que me respondas) sigo teniendo la duda de porque en este Form no me funcionaba y en otro si me esta funcionando y sin el val ..... los caminos de la informática son inescrutables... jejejej
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
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

guardar modificar

Publicado por Antoni Masana (498 intervenciones) el 26/03/2018 11:29:20
Seguramente tiene una explicación lógica que desconozco o no la tiene.
Los caminos de la lógica y lo que hace Microsoft son divergentes e inescrutables.
Microsoft es una paradoja en si misma. Lo que pasa aquí no pasa en otros Sistemas operativos.

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