Visual Basic para Aplicaciones - número de columna donde esta un dato

Life is soft - evento anual de software empresarial
 
Vista:
sin imagen de perfil
Val: 177
Bronce
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

número de columna donde esta un dato

Publicado por Albert (204 intervenciones) el 29/10/2021 09:55:03
Tengo hecha una aplicación que busca los datos de una hoja (en este caso proveedor y año) con un formulario y los guarda en una hoja con el nombre del proveedor que crea si no existe o rellena en la siguiente columna, hasta aquí todo bien.

Ahora lo que pretendo es que si el año que pides ya esta en la hoja (que existe) escriba los datos en esa columna, he intentado encontrar la columna con los siguientes fórmulas pero ninguna me funciona

Año = TextBox1 aquí es donde pones el año a buscar
If año = (Year(Range("B4:L4"))) Then aqui busco si existe el año

las dos siguientes son la manera en que busco la columna
esta = (año = (Year(Sheets(nombre).Range("B4:L4")).Column))
esta = Sheets(nombre).Range("B4:L4").Find(año, LookIn:=xlValues, LookAt:=xlPart).Offset(0, 2).Value

la siguiente relleno la celda que toca en la columna de ese año

ActiveSheet.Cells(4, esta).Value = Usf_PROVEEDOR.TextBox1

ActiveSheet.Cells(5, esta).Value = CDbl(Usf_PROVEEDOR.F1)

Por más que he buscado en Internet no encuentro la manera de hacerlo.
Gracias por vuestra 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 Antoni Masana
Val: 1.134
Oro
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

número de columna donde esta un dato

Publicado por Antoni Masana (498 intervenciones) el 29/10/2021 16:49:51
No entiendo que es lo que estas haciendo, por que no se como tienes los datos. Mejor sube un ejemplo.

Esta instrucción no se si te va a devolver lo que quieres:

1
f año = (Year(Range("B4:L4"))) Then

Pides el año de varias celdas y en teoría podrían tener fechas de diferentes años, ¿Cual te va a devolver?.

Por otro lado una cosa es buscar un valor con fórmulas y otra con macros que tienes mucha más flexibilidad para buscar.

Saludos.
\\//_
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
sin imagen de perfil
Val: 177
Bronce
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

número de columna donde esta un dato

Publicado por Albert (204 intervenciones) el 29/10/2021 17:43:39
Hola, gracias pero esta yo lo tengo puesto así, te adjunto la base de la aplicación explicándote lo que pasa en el módulo que falla, lo veras al abrirlo
Mil Gracias
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 Antoni Masana
Val: 1.134
Oro
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

número de columna donde esta un dato

Publicado por Antoni Masana (498 intervenciones) el 29/10/2021 19:24:47
Veo varios fallos

1º - esto da ERROR
1
if año = (Year(Range("B4:L4"))) Then

2º - La tabla de datos esta mal, me refiero al rango de columnas A:H:
--- sobren las filas vacías 2,3 y 4
--- El 7% esta en mal sitio.

3º - El formulario Usf_PROVEEDOR
--- El comboBox2 no se que finalidad tiene.
--- Tanto cuando introduces la fecha como el proveedor tienen que ir a buscar datos y validar que tienes los dos datos.
--- Selecciono proveedor y fecha Salen datos
--- Selecciono fecha y proveedor SIN DATOS
--- En el primer caso cambio el Proveedor y los datos no cambian
--- No hay boton para salir, siempre va bien

4º - El procedimiento Imprimir2 esta MAL por que es del Formulario y no se debe de ver desde VISTA - MACROS
--- Debe validar si existe la hoja y si no existe crearla.
--- No es correcto duplicar el código, debe estar escrito una sola vez guardar los datos en la hoja.

Y por ultimo no entiendo en que formato quieres guardar la hoja de proveedor.

Saludos.
\\//_
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
sin imagen de perfil
Val: 177
Bronce
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

número de columna donde esta un dato

Publicado por Albert (204 intervenciones) el 29/10/2021 19:54:28
Hola, te respondo por número
1) este error no lo entiendo por que si miras otros módulos funciona bien

2) en la B va el nº de factura y en la aplicación de uso la Dy la E estan juntas para poner el concepto

3) que si cuando abres el combo de proveedor el que buscas no está, vas al otro que es la lista completa, lo hice así por que si escribes el nombre de distinta manera no funciona asi clicas sobre el nombre del combo2 y lo cargas en el combo1

4)valida las hojas con:
On Error GoTo HojaNoExiste 'aqui si la hoja existe
Sheets(nombre).Visible = True
Sheets(nombre).Select
si ni existe la crea nueva con:
HojaNoExiste:
Worksheets("0").Visible = True
nombre = Usf_PROVEEDOR.ComboBox1.Value
_ precisamente lo que quiero es no duplicar los datos en la hoja por eso necesito saber la columna del año

Ultimo) hay una hoja que se llama "0" que es la base

esta fila es solo para ver que la manera de encontrar la columna funciona
ActiveSheet.Cells(18, Col).Value = esta

Gracias por tu ayuda
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
sin imagen de perfil
Val: 177
Bronce
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

número de columna donde esta un dato

Publicado por Albert (204 intervenciones) el 30/10/2021 10:03:59
Buenos días, ya esta resuelto con el siguiente código

Set busco = Sheets(nombre).Range("B4:L4").Find(año, LookIn:=xlValues, lookat:=xlWhole)
If Not busco Is Nothing Then
col3 = busco.Column
ActiveSheet.Cells(5, col3).Value = CDbl(Usf_PROVEEDOR.F1) 'Enero
Else

Gracias por tu ayuda
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