Alta de registro en tabla Excel a través de un formulario

Para Dante Amor. Hola, gracias por tu inestimable ayuda que me está encaminando a terminar una estructura en la que trabajar con mis formularios, sin tí no lo conseguiría. ¡GRACIAS!

Y aún a riesgo de abusar de tu generosidad te pido por favor si puedes complementar el código del formulario "Agregar_registro" para que funcione como necesito (está en el "formularios dam4.xlsm" y se abre con un botón desde el formulario "consola"):

1.- Cuando añado un registro a través de este formulario y voy a verlo a la tabla de excel, veo que el número introducido en los campos "nº expediente" (columna L) y "Referencia" (columna R) aparecen con un punto verde en la esquina superior izquierda de la celda, con el comentario "El número de celda tiene formato de texto o va precedido por un apóstrofo", y alinea el número a la izquierda (te pongo un pantallazo que muestra lo que te digo).

 Y esto me da problemas con alguna fórmula que he utilizado en ocasiones (p.e =MAX(REGISTRO!L:L), ya que no toma en cuenta ese número mientras esté a la izquierda).

2.- Pretendo que en el Textexpediente (textbox que agrega dato en nuevo registro de comuna L) me aparezca al abrir el formulario "Agregar_Registro" el resultado de la fórmula =MAX(REGISTRO!L:L)+1, pero que pueda editarlo para poner finalmente el número que yo quiera. El objetivo es que ese campo se rellene automaticamente en un primer momento, asignando un nuevo número de expediente consecutivo al mayor que se encuentre en la columna L, y lo muestre, pero si no me interesa pueda ponerle cualquier otro número (cuando la información que esté grabando pertenezca a un expediente que ya existe).

Te adjunto el código:

'Alta de un registro
Private Sub Botonagregar_registro_Click()
'Declaración de variables
'
Dim strTitulo As String
Dim Continuar As String
Dim TransRowRng As Range
Dim NewRow As Integer
Dim Limpiar As String
'
strTitulo = "Agrega un evento al Registro"
'
Continuar = MsgBox("Dar de alta los datos?", vbYesNo + vbExclamation, strTitulo)
If Continuar = vbNo Then Exit Sub
'
Cuenta = Application.WorksheetFunction.CountIf(Range("R:R"), Me.Textreferencia)
'
If Cuenta > 0 Then
    '
    MsgBox "El formulario '" & Me.Textreferencia & "' ya se encuentra registrado", vbExclamation, strTitulo
    '
Else
    '
    Set TransRowRng = ThisWorkbook.Worksheets("Registro").Cells(1, 1).CurrentRegion
    NewRow = TransRowRng.Rows.Count + 1
    With ThisWorkbook.Worksheets("Registro")
        .Cells(NewRow, 11).Value = Me.Texttramitador
        .Cells(NewRow, 12).Value = Me.Textexpediente
        .Cells(NewRow, 18).Value = Me.Textreferencia
        .Cells(NewRow, 27).Value = Me.Textinicio
        .Cells(NewRow, 28).Value = Me.Textfin
    End With
    '
    MsgBox "Alta exitosa.", vbInformation, strTitulo
    '
    Unload Me
End If
End Sub

3.- Que el textbox "tramitador", columna K, fuera una lista desplegable en vez de un textbox con tres valores: AS, JG Y MG de los cuales elegiré uno en el momento de agregar un registro.

1 Respuesta

Respuesta
1

H o l a : Envíame tu archivo con el formulario y con un ejemplo me explicas cómo quieres la alta del registro. Recuerda poner tu nombre de usuario en el asunto.

Te anexo el código

Dim h1
Private Sub Botonagregar_registro_Click()
'Por.Dante Amor
'Alta de un registro
    If Textreferencia = "" Then
        MsgBox "Falta referencia"
        Textreferencia.SetFocus
        Exit Sub
    End If
    If IsNumeric(Textreferencia) Then valor = Val(Textreferencia) Else valor = Textreferencia
    Set b = h1.Columns("R").Find(valor, lookat:=xlWhole)
    If Not b Is Nothing Then
        res = MsgBox("Esa referencia ya existe, quieres continuar ", vbQuestion + vbYesNo)
        If res = vbNo Then
            Textreferencia.SetFocus
            Exit Sub
        End If
    End If
    '
    If Not IsNumeric(Textexpediente) Or Textexpediente = "" Then
        MsgBox "Falta el expediente"
        Textexpediente.SetFocus
        Exit Sub
    End If
    '
    u = h1.Range("R" & Rows.Count).End(xlUp).Row + 1
    h1.Cells(u, 11).Value = ComboBox1
    h1.Cells(u, 12).Value = IIf(IsNumeric(Textexpediente), Val(Textexpediente), Textexpediente)
    H1. Cells(u, 18).Value = IIf(IsNumeric(Textreferencia), Val(Textreferencia), Textreferencia)
    h1.Cells(u, 27).Value = Textinicio
    h1.Cells(u, 28).Value = Textfin
    h1.Cells(u, 15).Value = TextBox1
    MsgBox "Alta exitosa.", vbInformation, "Agrega un evento al Registro"
End Sub
'
Private Sub UserForm_Activate()
'Por.Dante Amor
    Set h1 = Sheets("REGISTRO")
    u = h1.Range("R" & Rows.Count).End(xlUp).Row + 1
    wmax = WorksheetFunction.Max(h1.Range("L2:L" & u)) + 1
    Textexpediente = wmax
    '
    ComboBox1. AddItem "AS"
    ComboBox1. AddItem "JG"
    ComboBox1. AddItem "MG"
End Sub
'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

Simplemente ¡Genial!. Todo correcto y funcionando. Ahora me toca darle "mi" forma y trabajarlo a conveniencia. Sinceramente, sin ti no lo habría conseguido. Creo que con esto doy por terminadas mis preguntas....al no ser que me surja alguna peguilla ;.), que en tal caso, si no te importa, te trasladaré.

Un trabajo, una atención y un resultado EXCELENTE. ¡Gracias!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas