Excel - Ayuda con un cuadro de texto

 
Vista:
Imágen de perfil de Jorge

Ayuda con un cuadro de texto

Publicado por Jorge (39 intervenciones) el 29/07/2021 20:18:47
Hola, buenas tardes... Tengo un problema que no hallo como resolver. Explicare los mas detallado posible. Tengo una hoja donde tengo miles de nombres, en otra hoja están los siguientes campos:

Screenshot_1

En un formulario tengo un campo de texto donde coloco la cédula y un cuadro de texto de mayor tamaño donde se tendrán que incrustar los datos de la cédula:

Screenshot_2

Tal como edite esa captura es el objetivo que quiero que se procese, para eso al campo "masGente" que es al que me refiero a "CEDULA" de mi formulario le asigne el siguiente código:

1
2
3
4
5
6
7
8
Private Sub masGente_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
 
If KeyCode = 13 Then
    Hoja3.Range("masCedula") = Val(masGente)
    text_more.Text = Hoja3.Range("masCedula")
End If
 
End Sub

Esto se ejecuta después de escribir la cédula en el TextBox y presionar la tecla "Intro". Despues de seleccionar la tecla intro, los datos tal como es la cédula, el cargo y el nombre tendrán que incrustarse en el textbox de mayor tamaño y hacer un salto de linea para incrustar mas datos similares al momento de volver a colocar otra cédula.

Screenshot_3

Tal como el ejemplo en la tercera imagen debería ser el resultado pero me quede varado en la linea de código donde jalo la información de la cédula al textbox de mayor tamaño (esto se convirtió en un reto). Por favor, pido su ayuda.
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 Nolberto
Val: 84
Ha aumentado su posición en 6 puestos en Excel (en relación al último mes)
Gráfica de Excel

Ayuda con un cuadro de texto

Publicado por Nolberto (121 intervenciones) el 30/07/2021 00:48:45
No se cual sea el objetivo final de esto, pero un cuadro de lista es mejor que un cuadro de texto grande para el resultado.

realice un ejemplo rápido sin optimizar, pero funciona.

El siguiente código es para el formulario.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Option Explicit
 
Private Sub txtCedula_AfterUpdate()
    Dim fila As Integer
    Dim cedula As String, cargo As String, nombre As String
 
    cedula = Me.txtCedula.Text
    cargo = GetCargo(cedula)
    nombre = GetNombreEmpleado(cedula)
 
    If cargo <> "" Then
        Me.lstEmpleados.AddItem
        fila = Me.lstEmpleados.ListCount - 1
        Me.lstEmpleados.List(fila, 0) = cedula
        Me.lstEmpleados.List(fila, 1) = cargo
        Me.lstEmpleados.List(fila, 2) = nombre
    End If
 
    Me.txtCedula.Text = ""
 
End Sub

Este otro código es de un modulo donde se ponen las funciones que devuelven los datos de cargo y nombre de empleado, esto no esta optimizado, de hecho se repite mucho código, pero debería dar una idea de como hacer que funcione.

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
Option Explicit
 
Function GetDataEmpleado() As Variant
    Dim data() As Variant
 
    GetDataEmpleado = ThisWorkbook.Sheets("Hoja1").Range("A1").CurrentRegion.Value
End Function
 
Function GetCargo(cedula As String) As String
    Dim data() As Variant
    Dim i As Long
 
    data = GetDataEmpleado
 
    For i = 1 To UBound(data)
        If data(i, 1) = cedula Then
            GetCargo = data(i, 2)
        End If
    Next i
End Function
 
Function GetNombreEmpleado(cedula As String) As String
    Dim data() As Variant
    Dim i As Long
 
    data = GetDataEmpleado
 
    For i = 1 To UBound(data)
        If data(i, 1) = cedula Then
            GetNombreEmpleado = data(i, 3)
        End If
    Next i
End Function

Aunque este código no esta optimizado, tiene ciertas ventajas, la principal es que se puede reutilizar, de tal forma que esas funciones se pueden llamar desde cualquier otro modulo o formulario y obtener el resultado, es decir, no hay que volver a generar mas código para el mismo resultado, simplemente llamas la función con sus parámetros y el resultado se pone en una variable.
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 Jorge

Ayuda con un cuadro de texto

Publicado por Jorge (39 intervenciones) el 30/07/2021 20:25:22
Hola Nolberto, buenas tardes amigo puse a prueba el código sin embargo le hice algunas modificaciones que las voy a compartir para quien necesite la ayuda.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Private Sub txtCedula_AfterUpdate()
    Dim fila As Integer
    Dim masCedula As String, cargo As String, nombre As String
 
    Hoja3.Range("masCedula") = Val(txtCedula)
 
    masCedula = Me.txtCedula.Text
    cargo = GetCargo(masCedula)
    nombre = GetNombreEmpleado(masCedula)
 
    If cargo <> "" Then
        Me.lstEmpleados.AddItem
        fila = Me.lstEmpleados.ListCount - 1
        Me.lstEmpleados.List(fila, 0) = masCedula
        Me.lstEmpleados.List(fila, 1) = cargo
        Me.lstEmpleados.List(fila, 2) = nombre
    End If
 
    Me.txtCedula.Text = Empty
 
End Sub

En el formulario tuve que anexarle esta línea para que "txtCedula" pueda interactuar sobre la celda de la hoja que contiene la formula BUSCARV y así si se pudo obtener los datos ya que sin eso no los extraía.

1
Hoja3.Range("masCedula") = Val(txtCedula)

De igual manera, coloque una forma de que cuando se presione la tecla "Intro" en una fila del "listBox" seleccionada se elimine, en tal caso de que se equivoquen.

1
2
3
4
5
6
7
8
9
10
''ELIMINAR MAS INVOLUCRADOS EN CASO DE INGRESAR UN ERRONEO
Private Sub lstEmpleados_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
 
On Error Resume Next
 
If KeyAscii = 13 Then
    lstEmpleados.RemoveItem lstEmpleados.ListIndex
End If
 
End Sub

Ahora se me presenta el siguiente detalle que explico a continuación Nolberto, si podes ayudarme en esto, en mi formulario tengo un botón para guardar la información. El identificador de cada registro es el número de cédula, la sección de ahora es para anexarle a ese mismo registro mas personas y en la base de datos, tiene obviamente sus columnas como lo es la identificación que es la columna de las cédulas, sigue el cargo, después el nombre, etc... hay una columna que se llama "Otros" que es donde se tiene que guardar la información de lstEmpleados, pero obviamente si en un registro coloco 10 personas en el lstEmpleados, esas 10 personas tienen que aparecer en la celda de esa columna, por eso queria hacer lo del listBox en un textBox ya que al momento de cargar la información en el formulario a mi pensar es mas fácil pero de la manera en que me lo planteaste se ve mas organizado, como se haría si deseo que al presionar "GUARDAR" toda la información de lstEmpleados quede en la celda de la columna "OTROS". No se si seria posible esto o habria que retomar la idea de hacerlo en un textBox.

Del resto, la explicacion suya es increíble, funciono de maravilla.
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 Nolberto
Val: 84
Ha aumentado su posición en 6 puestos en Excel (en relación al último mes)
Gráfica de Excel

Ayuda con un cuadro de texto

Publicado por Nolberto (121 intervenciones) el 01/08/2021 18:29:50
Pasar los datos del listBox a una o mas celdas es sencillo, la cuestión es que le falto poner el avance que tiene sobre esa parte, por lo que no es posible ayudarle.
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