Conocer la celda seleccionada en un listbox

Es la primera vez que utilizo este servicio de ayuda, así que perdona mis posibles fallos de forma; espero no liarme demasiado y dejarte clara mi cuestión:
Actualmente estoy diseñando una pequeña macro con la que generar para mi centro educativo un libro de registro de títulos académicos. Una vez rellenas las celdas de manera automática con datos procedentes de un archivo importado desde la página de gestión del centro, necesito que la persona que maneja la aplicación pueda realizar una entrada de fechas una vez que el alumno retira su titulo del centro. Para ello he realizado un listbox en el que se cargan los nombres de los alumnos y sus números de identidad:
Private Sub CommandButton1_Click()
ListBox1.Clear
ListBox1.ColumnCount = 3
ListBox1.ColumnWidths = "8cm;4cm;5cm"
Sheets("TÍTULOS").Select
Cells(2, 2).Select
pepe = Range("B65536").End(xlUp).Row
ListBox1.RowSource = "B2:D" & pepe
End Sub
Así, la persona que manera la aplicación puede ver en las tres columnas el nombre del alumno y sus números de identificación personal. Luego, mediante un textbox, una vez seleccionado el alumno que ha retirado el titulo, la secretaria debe introducir la fecha justo en la casilla correspondiente al alumno seleccionado en el listbox anterior, y en la columna 7. Mi pregunta es: ¿Cómo puedo saber qué número de fila es el que se ha seleccionado de manera manual en el listbox, para luego utilizarlo de manera que el dato de fecha del textbox se guarde en la fila adecuada?. Éste es el textbox que no me funciona: (Perdona mi ignorancia. Soy profesor de francés, no de informática, y lo que sé lo aprendo poquito a poco por ensayo y error.)
Private Sub TextBox1_change()
Dim z As Integer
ActiveCell = ListBox1(0)
z = ActiveCell.Row
Cells(z, 7).Select
ActiveCell.FormulaR1C1 = TextBox1
End Sub

2 Respuestas

Respuesta
1
Te dejo la rutina para el textbox (el evento más apropiado es el de AfterUpdate o Exit)
Private Sub TextBox1_AfterUpdate()
Dim z As Integer
'como los datos empiezan en fila2 se incrementa al nro de índice del listbox
z = ListBox1.ListIndex + 2
Cells(z, 7) = CDate(TextBox1)
End Sub
Agregué la función CDate para que lo vuelques con formato fecha y no texto.
Excelente solución, ahora sí que se ingresan los datos donde corresponde y sin ningún contratiempo. Muchísimas gracias por tu ayuda. Un abrazo desde Sevilla.
Respuesta
1
Podrías hacerlo más fácil asignando al evento DoubleClick del ListBox esta instrucción:
Activecell(0, 7) = TextBox1.Text
Si es una fecha lo que hay en el TextBox, entonces:
Activecell(0, 7) = CDate(TextBox1.Text)
En el TextBox no tienes que incluir nada en ningún evento del mismo.
[email protected]
Muchas gracias por tu respuesta, pero tu solución no funcionaba del todo; me explico: la fecha introducida en el textbox terminaba en la celda 1 de la columna 7. Seguramente que era un fallo mío por no saber donde colocar tu línea de Activecell... De todas formas, he recibido una respuesta de Elsa, experta también, y esta solución me ha funcionado perfectamente:
Private Sub TextBox1_AfterUpdate()
Dim z As Integer
'como los datos empiezan en fila2 se incrementa al nro de índice del listbox
z = ListBox1.ListIndex + 2
Cells(z, 7) = CDate(TextBox1)
End Sub
De todas formas, muchísimas gracias por tu ayuda. Espero contar contigo para próximas dudas. Un abrazo desde Sevilla

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas