Saltar al contenido

Modificar datos mediante Userform


erpunta

Recommended Posts

publicado

Tengo un userform para insertar/modificar/borrar datos en una tabla. El problema surge cuando intento editar o modificar parte de los datos, pero no me realiza ninguna accion o me da error.

Sub EditCrew()

     Dim UltFila As Long, rango As String, FilaRegistro As Long, ans As Integer

    Sheet5.Visible = True
    Sheet5.Unprotect ("xxxx")
    UltFila = Range("A" & Rows.Count).End(xlUp).Row
    rango = "A2:A" & UltFila

    If Len(frmCrew.TxtPassport) = 0 Then
        MsgBox "Write True Passport", vbExclamation, "BALEARIA"
        Exit Sub
    End If

    
    FilaRegistro = filaexisteregistro(frmCrew.TxtPassport, rango)
    If FilaRegistro = 0 Then
    MsgBox "ID don´t exist", vbExclamation, "BALEARIA"
    Exit Sub
    End If
    
    
    Sheet5.Cells(FilaRegistro, 2) = frmCrew.TxtPassport
    Sheet5.Cells(FilaRegistro, 3) = frmCrew.TxtName
    Sheet5.Cells(FilaRegistro, 4) = frmCrew.TxtSurname
    Sheet5.Cells(FilaRegistro, 5) = frmCrew.ComboRank
    Sheet5.Cells(FilaRegistro, 6) = frmCrew.TxtNationality
    Sheet5.Cells(FilaRegistro, 7) = frmCrew.TxtBirth
    Sheet5.Cells(FilaRegistro, 8) = frmCrew.TxtPlace
    Sheet5.Cells(FilaRegistro, 9) = frmCrew.TxtSeamanbook
    Sheet5.Cells(FilaRegistro, 10) = frmCrew.TxtVISA
    Sheet5.Cells(FilaRegistro, 11) = frmCrew.TxtCAD
    Sheet5.Cells(FilaRegistro, 12) = frmCrew.TxtGENDER
    Sheet5.Cells(FilaRegistro, 12) = frmCrew.TxtCompetency
    Sheet5.Cells(FilaRegistro, 13) = frmCrew.TxtBasic
    Sheet5.Cells(FilaRegistro, 14) = frmCrew.TxtPax
    Sheet5.Cells(FilaRegistro, 15) = frmCrew.TxtCraft
    Sheet5.Cells(FilaRegistro, 16) = frmCrew.TxtFire
    Sheet5.Cells(FilaRegistro, 17) = frmCrew.TxtFRB
    Sheet5.Cells(FilaRegistro, 18) = frmCrew.TxtAid
    Sheet5.Cells(FilaRegistro, 19) = frmCrew.TxtCare
    Sheet5.Cells(FilaRegistro, 20) = frmCrew.TxtMedical
    Sheet5.Cells(FilaRegistro, 21) = frmCrew.TxtForklift
    Sheet5.Cells(FilaRegistro, 22) = frmCrew.TxtArpa
    Sheet5.Cells(FilaRegistro, 23) = frmCrew.TxtGmdss
    Sheet5.Cells(FilaRegistro, 24) = frmCrew.TxtHSC
    Sheet5.Cells(FilaRegistro, 25) = frmCrew.TxtAssist
    Sheet5.Cells(FilaRegistro, 26) = frmCrew.TxtSecurity
    Sheet5.Cells(FilaRegistro, 27) = frmCrew.TxtEcdis
    Sheet5.Cells(FilaRegistro, 28) = frmCrew.TxtEcdis2
    Sheet5.Cells(FilaRegistro, 29) = frmCrew.TxtCook
    Sheet5.Cells(FilaRegistro, 30) = frmCrew.TxtFood
    

    MsgBox "EDIT Crew OK", vbInformation, "BALEARIA"

    Sheet5.Visible = False
    Sheet5.Protect ("xxxx")
    Sheet1.Select

End sub

publicado

Buenos dias, seguramente el problema lo tendras en la funcion que no muestras "filaexisteregistro", 

lo mejor seria que subieras el archivo de ejemplo incluyendo todo el codigo

saludos.

 

publicado

Archivo demasiado grande:

Private Function filaexisteregistro(noIdentificacion As String, rangoconsulta As String) As Long
    Dim numerofila As Long
    numerofila = 0
    With Sheet5.Range(rangoconsulta)
    Set c = .Find(noIdentificacion, Lookat:=xlWhole)
    If Not c Is Nothing Then
    numerofila = c.Row
    End If
    End With
    filaexisteregistro = numerofila
End Function

 

Sub ConsultarCrew()

    Sheet5.Visible = True
    Sheet5.Unprotect ("xxxx")
    
    Dim UltFila As Long, rango As String, FilaRegistro As Long, RutaImagen As String

    RutaImagen = "C:\Users\Usuario\Documents\"

    UltFila = Range("B" & Rows.Count).End(xlUp).Row
    rango = "B2:B" & UltFila

    If Len(frmCrew.TxtPassport) = 0 Then
        che = MsgBox("Write True Passport", vbExclamation, "BALEARIA")
        Exit Sub
    End If

    FilaRegistro = filaexisteregistro(frmCrew.TxtPassport, rango)
    If FilaRegistro = 0 Then
        ans = MsgBox("ID don´t exist", vbExclamation, "BALEARIA")
        Exit Sub
    End If

    frmCrew.TextoID = Sheet5.Cells(FilaRegistro, 1)
    frmCrew.TxtPassport = Sheet5.Cells(FilaRegistro, 2)
    frmCrew.TxtName = Sheet5.Cells(FilaRegistro, 3)
    frmCrew.TxtSurname = Sheet5.Cells(FilaRegistro, 4)
    frmCrew.ComboRank = Sheet5.Cells(FilaRegistro, 5)
    frmCrew.TxtNationality = Sheet5.Cells(FilaRegistro, 6)
    frmCrew.TxtBirth = Sheet5.Cells(FilaRegistro, 7)
    frmCrew.TxtPlace = Sheet5.Cells(FilaRegistro, 😎
    frmCrew.TxtSeamanbook = Sheet5.Cells(FilaRegistro, 9)
    frmCrew.TextoID = Sheet5.Cells(FilaRegistro, 1)
    frmCrew.TxtVISA = Sheet5.Cells(FilaRegistro, 10)
    frmCrew.TxtCAD = Sheet5.Cells(FilaRegistro, 11)
    frmCrew.TxtGENDER = Sheet5.Cells(FilaRegistro, 12)
    frmCrew.TxtCompetency = Sheet5.Cells(FilaRegistro, 13)
    frmCrew.TxtWatch = Sheet5.Cells(FilaRegistro, 14)
    frmCrew.TxtBasic = Sheet5.Cells(FilaRegistro, 15)
    frmCrew.TxtPax = Sheet5.Cells(FilaRegistro, 16)
    frmCrew.TxtCraft = Sheet5.Cells(FilaRegistro, 17)
    frmCrew.TxtFire = Sheet5.Cells(FilaRegistro, 18)
    frmCrew.TxtFRB = Sheet5.Cells(FilaRegistro, 19)
    frmCrew.TxtAid = Sheet5.Cells(FilaRegistro, 20)
    frmCrew.TxtCare = Sheet5.Cells(FilaRegistro, 21)
    frmCrew.TxtMedical = Sheet5.Cells(FilaRegistro, 22)
    frmCrew.TxtForklift = Sheet5.Cells(FilaRegistro, 23)
    frmCrew.TxtArpa = Sheet5.Cells(FilaRegistro, 24)
    frmCrew.TxtGmdss = Sheet5.Cells(FilaRegistro, 25)
    frmCrew.TxtHSC = Sheet5.Cells(FilaRegistro, 26)
    frmCrew.TxtAssist = Sheet5.Cells(FilaRegistro, 27)
    frmCrew.TxtSecurity = Sheet5.Cells(FilaRegistro, 28)
    frmCrew.TxtEcdis = Sheet5.Cells(FilaRegistro, 29)
    frmCrew.TxtEcdis2 = Sheet5.Cells(FilaRegistro, 30)
    frmCrew.TxtCook = Sheet5.Cells(FilaRegistro, 31)
    frmCrew.TxtFood = Sheet5.Cells(FilaRegistro, 32)

    If Dir(RutaImagen & frmCrew.TxtPassport & ".jpg") = "" Then
        MsgBox "Dont exist photo crew", vbExclamation, "BALEARIA"
    Else
        frmCrew.imgCrew.Picture = LoadPicture(RutaImagen & frmCrew.TxtPassport & ".jpg")
    End If

    Sheet5.Visible = False
    Sheet5.Protect ("xxxx")
    Sheet1.Select
    Sheet1.Protect ("xxxx")
End Sub

Sub EditCrew()

     Dim UltFila As Long, rango As String, FilaRegistro As Long, ans As Integer

    Sheet5.Visible = True
    Sheet5.Unprotect ("xxxx")
    UltFila = Range("A" & Rows.Count).End(xlUp).Row
    rango = "A2:A" & UltFila

    If Len(frmCrew.TxtPassport) = 0 Then
        MsgBox "Write True Passport", vbExclamation, "BALEARIA"
        Exit Sub
    End If

    
    FilaRegistro = filaexisteregistro(frmCrew.TxtPassport, rango)
    If FilaRegistro = 0 Then
    MsgBox "ID don´t exist", vbExclamation, "BALEARIA"
    Exit Sub
    End If
    
    
    Sheet5.Cells(FilaRegistro, 2) = frmCrew.TxtPassport
    Sheet5.Cells(FilaRegistro, 3) = frmCrew.TxtName
    Sheet5.Cells(FilaRegistro, 4) = frmCrew.TxtSurname
    Sheet5.Cells(FilaRegistro, 5) = frmCrew.ComboRank
    Sheet5.Cells(FilaRegistro, 6) = frmCrew.TxtNationality
    Sheet5.Cells(FilaRegistro, 7) = frmCrew.TxtBirth
    Sheet5.Cells(FilaRegistro, 😎 = frmCrew.TxtPlace
    Sheet5.Cells(FilaRegistro, 9) = frmCrew.TxtSeamanbook
    Sheet5.Cells(FilaRegistro, 10) = frmCrew.TxtVISA
    Sheet5.Cells(FilaRegistro, 11) = frmCrew.TxtCAD
    Sheet5.Cells(FilaRegistro, 12) = frmCrew.TxtGENDER
    Sheet5.Cells(FilaRegistro, 12) = frmCrew.TxtCompetency
    Sheet5.Cells(FilaRegistro, 13) = frmCrew.TxtBasic
    Sheet5.Cells(FilaRegistro, 14) = frmCrew.TxtPax
    Sheet5.Cells(FilaRegistro, 15) = frmCrew.TxtCraft
    Sheet5.Cells(FilaRegistro, 16) = frmCrew.TxtFire
    Sheet5.Cells(FilaRegistro, 17) = frmCrew.TxtFRB
    Sheet5.Cells(FilaRegistro, 18) = frmCrew.TxtAid
    Sheet5.Cells(FilaRegistro, 19) = frmCrew.TxtCare
    Sheet5.Cells(FilaRegistro, 20) = frmCrew.TxtMedical
    Sheet5.Cells(FilaRegistro, 21) = frmCrew.TxtForklift
    Sheet5.Cells(FilaRegistro, 22) = frmCrew.TxtArpa
    Sheet5.Cells(FilaRegistro, 23) = frmCrew.TxtGmdss
    Sheet5.Cells(FilaRegistro, 24) = frmCrew.TxtHSC
    Sheet5.Cells(FilaRegistro, 25) = frmCrew.TxtAssist
    Sheet5.Cells(FilaRegistro, 26) = frmCrew.TxtSecurity
    Sheet5.Cells(FilaRegistro, 27) = frmCrew.TxtEcdis
    Sheet5.Cells(FilaRegistro, 28) = frmCrew.TxtEcdis2
    Sheet5.Cells(FilaRegistro, 29) = frmCrew.TxtCook
    Sheet5.Cells(FilaRegistro, 30) = frmCrew.TxtFood
    

    MsgBox "EDIT Crew OK", vbInformation, "BALEARIA"

    Sheet5.Visible = False
    Sheet5.Protect ("xxxx")
    Sheet1.Select
End Sub


Sub DeleteCrew()
    
    Sheet5.Visible = True
    Sheet5.Unprotect ("xxxx")

    Dim UltFila As Long, rango As String, FilaRegistro As Long

    With Sheets("Nombre")

    UltFila = Range("B" & Rows.Count).End(xlUp).Row
    rango = "B2:B" & UltFila

    If Len(frmCrew.TxtPassport) = 0 Then
        MsgBox "Write True Passport", vbExclamation, "BALEARIA"
        Exit Sub
    End If

    FilaRegistro = filaexisteregistro(frmCrew.TxtPassport, rango)
    If FilaRegistro = 0 Then
        ans = MsgBox("ID don´t exist", vbExclamation, "BALEARIA")
        Exit Sub
    End If
    
    .Visible = True
        .Unprotect ("xxxx")
        .Rows(FilaRegistro).ClearContents
        .Visible = False
        .Protect ("xxxx")
    End With
    Sheets("Data").Select

End Sub
 

 

Arriba escribo las tres funciones para insertar, editar y eliminar valores de la tabla en cuestion

publicado

Uno puede suponer que el archivo es "grande" por la cantidad de registros que tienes y las posibles cantidades de imágenes que le insertas (¿o consultas?), por qué no haces una copia de tipo binario, eliminas todos esos datos sensibles de los trabajadores (supongo) y lo compartes. Si solo es un formulario, donde al parecer son 5 Hojas con unas sentencias no requerirían una gran cantidad de espacio.

El ejemplo se necesita para evitar ambigüedades y si un Maestro pasa por el tema podría en lo posible ayudarte de la mejor manera en el menor tiempo posible. Toma en cuenta que hacen esto de manera desinteresada, así que "ayúdales a ayudarte".

Mencionas parte del problema sobre editar o modificar aunque no mencionas nada de insertar nuevos, parece que tienes una especie de registros de empleados, pero no se sabe si la hoja1 y la hoja5 son las mismas que "Data" y "Nombre", aunque la Hoja5 es la que recibe todo aparentemente y cada fila es un miembro de esa ¿Tripulación? y cada columna es información de pasaporte, nombre, rango, nacionalidad, etc. Varias cosas que están en el código, donde parece que intentas insertar una imagen de acuerdo al número de pasaporte del empleado ¿Lo usas para ver las fotos de los empleados?

En resumen, sin un ejemplo limitas la ayuda que podrías recibir.

Saludines

publicado

He añadido el archivo, espero no haber eliminado nada que sirva para ejecutarlo.

Como bien dices, al insertar datos nuevos no me da problemas, introduzco los datos en el userform y me los coloca ordenadamente en la tabla (Hoja "Nombre" - Shhet5). El problema viene cuando quiero editar o modificar algun valor, le doy a buscar por el numero de pasaporte y me lo hace perfectamente, cambio los valores que necesite y al presionar un boton (en este caso "Editar") me salta el mensaje de error "MsgBox "ID don´t exist", vbExclamation, "BALEARIA"", pero la ID (numero que asigno a cada empleado) no lo modifico y no me realiza ningun cambio.

En cuanto a la imagen, era un idea que tenia que arrastre de otro excel, pero no lo estoy usando, o mas bien estoy desechando la opcion, pero como voy aprendiendo paso a paso, prefiero centrarme en lo mas importante de inicio, que es colocar a cada tripulante en su lugar correspondiente y de forma ordenada para despues ya trasladarlo a los documentos que se generen a posterior.

 

Mos Docs - copia.xlsm

publicado

Muchas gracias

Cuando lo reciba me pondré a revisar para intentar comprender un poco mas el vba ya que veo que aun me queda mucho.

 

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.