De primero, te comento como trabajo yo lo que vos estas haciendo, porque lo hago de manera distinta, tal vez te guste o no, te resulte útil o no, pero quizás no deberías realizar muchos cambios en tu trabajo. También te aclaro por las dudas, que cuando hable de "fila" me voy a referir a las filas de las hojas de cálculo, y cuando hable de "renglón", serán las filas o renglones de los listbox que colocas en los formularios.
Primero dejo por defecto la propiedad BoundColumn en 1, cuando creo un listbox. Esta propiedad establece que el valor de la lista (ListBox1. Value), va a estar representado por lo que haya en la columna 1. Es decir, si haces clic en algún renglón de la lista, la lista va a pasar a tener un valor, y este valor va a estar determinado por la fila seleccionada, y por la columna que se haya establecido en la propiedad BoundColumn. En cambio, si no hay nada seleccionado, el valor de la lista es: NULO
Segundo, en cada lista que muestro, siempre en la primer columna tengo todo enumerado de manera ascendente. Entonces, al hacer clic en algún renglón de la lista, ésta pasa automáticamente a valer lo que esté en la columna 1, o sea, un número que hace referencia también, a su ubicación. Por ej:
Fila = ListBox1.Value
En ese caso, si hubiese hecho clic en el renglón 3 de la lista por ejemplo, y si en la primer columna hay un número 3 (como debería ser), entonces ya tengo en una variable la ubicación del renglón que deseo modificar.
Luego mediante macros, modifico la celda que corresponde, por ejemplo:
Private Sub Guardar_Click()
Dim Fila As Integer //Declaramos la variable Fila
Fila = ListBox1.Value //Cargo en Fila, el valor del ListBox
Cells(Fila,"A").Value = TextBox1 //Cambio el valor de la celda A3 por lo que hay en el TextBox
End Sub
Ojo, tal vez esta no sea la mejor manera, así lo hago yo. Pero tenés que tener en cuenta ciertos detalles que terminarían en error si no prestas atención, ya que ahí te mostré algo super simple, pero te pueden salir ciertos errores, como ser:
* Sabemos que Fila es del tipo Integer, entonces, sí o sí, al momento de darle el valor del ListBox1, éste tiene que valer algo, un entero, ya que por defecto no hay ningún renglón seleccionado, y con este código y sin seleccionar nada presionamos en el botón GUARDAR, tendrás un error ya que se ejecutaría algo similar a esto: Fila = NULO. Imposible.
* Por otro lado, si la lista comienza en la tercer fila de la hoja, pero su primer renglón en el listbox vale 1, entonces, tenes que ajustar su ubicación al momento de darle su valor, sino queda defasado, por ejemplo: Cells( Fila + 2, "A").Value = TextBox1. Entonces, al presionar en el primer renglón del listbox que vale 1, pero es la tercer fila de la hoja de excel, tenemos que modificar entonces la tercer fila de "A", por eso, la instrucción quedaría:
Cells(1 + 2, "A").Value = TextBox1
Cells(3,"A").Value = TextBox1
**************************
Unos detalles para agregar:
Si vos tenes la lista de la manera en que te expliqué, uno puede seleccionar el renglón que desea mediante macros, cambiándo el valor de la lista. EJ:
ListBox1.Value = 5
Esa instrucción selecciona directamente la fila 5 del listbox. Tener en cuenta que ese valor (5) debe existir, sino también terminaría en un error.
Y por último, si consideras innecesario que se vean los números o que la lista se mantenga como está en tu trabajo, si agregas la columna como te expliqué, podes ponerle ancho cero (0pt;) y no se va a ver, pero va a funcionar igual.
Espero haber sido claro, aunque no haya buscado el error en tu trabajo, por cuestiones de tiempo, preferí directamente explicarte como lo haría yo.