buscar segun combobox

buscar segun combobox

Notapor aulio » 15 Ene 2014 15:57

Sres.

necesito realizar lo siguiente: tengo un formulario con un combobox y un textbox que trabajan sobre una hoja "BDMateriales" en donde la columna A se encuentra con nombre de producto y la columna B con un codigo interno asignado al producto. lo que quiero es seleccionar mediante un combobox un producto de mi lista de la columna A, luego en el textbox ingrese el codigo correspondiente a ese producto cuyo valor quede en la columna B. mi idea es usar Vlookup para encontrar el valor del combobox de mi lista, se posicione en la celda del producto seleccionado, luego se mueva 1 celda a la derecha e ingrese el codigo del textbox.tengo la idea pero no se como escribirla en codigo.

Agradezco de antemano su esfuerzo por ayudar.

Saludos desde Chile
aulio
Miembro Nuevo
Miembro Nuevo
 
Mensajes: 4
Registrado: 20 Abr 2012 09:52

Re: buscar segun combobox

Notapor Victor Luis » 30 Ene 2014 04:40

Holas... AULIO

Lo ideal seria que desarrolles tu proyecto en VBA y guardaes tu indormacion en Archivos y/o Ficheros aleatorios que seran tu base de datos; pero si lo haras en Hojas de Excel, te sugiero lo siguiente:

○ DECLARAR ESTRUCTURA para VARIABLE PERSONALIZADA
* Inserta un Modulo y ahi declara la Estructura con la que asignaras a una variable, vector, etc que contendra los datos de cada registro.
* Aqui debes "PLANIFICAR" tu proyecto, las funciones que tendra o realizara, la informacion a guardar y/o registrar, actualizar o eliminar. Si guardas en archivos y/o ficheros, es mas seguro, facil y eficiente.
* Para no tener un archivo o lista con todos tus productos, deberias organizarlos por Tipo de Productos o tipo de materiales, de modo que tanto a vos o cualquiera le sea facil ubicar y seleccionar un producto. En tal caso tendrias que declarar otra estructura para esto. Ej:

Type Producto '** Estructura para Datos de PRODUCTOS
nopro As String*35
cod As String*10
can As Long
cos As Double
End type

Type TProd '** Estructura para Tipos de Productos
notp As String*35
cod As String*5
rut as String*50
topro as Long
End type

• Como veras en la estructura para los productos, la variable contendra los datos de: nombre del producto, codigo, cantidad y costo; tu puedes agregar otros mas que necesites. La estructura para Tipos de Productos contendra los datos de: nombre para el tipo de producto, su codigo, la ruta del archivo y el total de productos registrados para cada tipo.

○ CONTROL DE REGISTROS Y ARCHIVOS.
* Al Inicializar tu Formulario, cargas en una Lista (ListBox) los tipos de productos registrados en el archivo. Si no tienes mucha practica en trabajar directamente con archivos o trabajar con archivos abiertos, puedes cargar en un vector los registros de cada archivo, para esto declararias:

Dim vtp(100) As TProd '** Vector para Tipos de Productos
Dim vp(1000) As Producto '** Vector para Productos

* Para los Tipos de Productos, si no deseas usar una lista podrias usar un SpinButton ◄► para que el usuario seleccione un tipo de producto y en su evento click o change, envias a un Procedimiento que cargue en el vector "VP" los productos de ese tipo desde el archivo correspondiente y al mismo tiempo cargue en la lista los nombres de los productos.
* Para esto usarias variables publicas en tu formulario, con las cuales indicaras el archivo y/o registro a leerse y/o mostrarse.

○ CREAR NUEVO TIPO DE PRODUCTOS.
* Agregaras los objetos necesarios para que el usuario cree un nuevo tipo de producto, como un boton y una etiqueta de texto (TextBox) en la cual escribira el nombre del tipo de producto a crearse.
* En el procedimiento del boton [NUEVO TIPO PRODUCTO] verificas que el nombre exista y sea valido, osea que no existan 2 tipos de productos con el mismo nombre. En una variable declarada para tipo de producto:
Dim dtp As TProd, dpro As Producto
Cargas el nombre, le asignas el codigo correspondiente y la ruta.
* Para el "CODIGO" prefiero asignarle el numero de secuencia de los registros, osea si tu vector VTP() tiene ya 3 tipos de producto, el nuevo tipo seria el 4º donde su codigo seria TP04 y este mismo podrias usarlo como "Ruta" para el archivo o agregarle el nombre del tipo de producto.
* Cargas todos los datos en la variable, lo guardas en el vector y lo Archivas.
vtp(5)= dtp
Open "D:\ARTPROD.txt" For Randon As#1 Len=Len(dtp)+2
Put#1,5,dtp
Close#1
* Lo mejor es tener una Carpeta para tus archivos, lo que seria tu Base de Datos, entonces si esta carpeta es BADAS la ruta del Open seria:
Open "D:\BADAS\ARTPROD.txt" For Randon As#1 Len=Len(dtp)+2
* El tipo de producto ya esta archivado y creado. Para finalizar, tendrias que crear el archivo para sus productos
Open "D:\BADAS\TP04.txt" For Randon As#2 Len=Len(dpro)+2
Close#2
* Por ultimo, cargas en la lista de tipos de productos el nuevo tipo y lo seleccionas para que el usuario registre Productos. Si usas un SpinButton, aumentarias su propiedad .max=5 y lo enfocas con su propiedad .value=5 y luego para que se efectue el codigo de su procedimiento pones _Change
→Como te dije, sea lista o spinbutton, en su procedimiento, pondra en una variable la posicion del tipo de producto seleccionado y enviara a un procedimiento el cual leera del vector vtp(5) en nuestro ejemplo, leera su ruta vtp(5).rut que es="TP04" la ruta del archivo, con el cual cargara en el vector vp() los productos de ese archivo y al mismo tiempo los mostrara en la lista correspondiente los nombres de los productos existentes.

○ REGISTRO DE PRODUCTOS.
* Practicamente seria lo mismo que crear un nuevo tipo de producto, con la diferencia que verificaras los datos del producto como costo, cantidad, etc.
* Respecto al "Codigo del Producto" si fuera al primer producto en registrarse para ese tipo, su codigo seria: TP05-PD001 como te daras cuenta, el codigo del producto nos indica a que tipo de producto corresponde y la posicion de su registro dentro del archivo, lo cual hace que sea un codigo unico para identificarlo en cualquier otro procedimiento o funcion.
* Aqui tambien, deberas cargar al vector vp(1)=dpro y agregarlo en la lista de productos, seleccionandolo automaticamente.

○ ACTUALIZACION DE PRODUCTOS.
* Al seleccionar un producto de la lista, pondras en una variable (npd) la posicion del producto seleccionado y lo envias a un procedimeinto, el cual leera el registro del vector vp(npd) y mostrara sus datos correspondiente.
* Si el usuario modifica algunos datos, en el procedimiento de un boton [GUARDAR PRODUCTO] cargaras sus datos en una variable (dpro), la cual lo pondras en el vector vp(npd)=dpro y lo archivaras, ya sea sacando la ruta del codigo del producto o con la ruta del tipo de producto seleccionado del vector vtp(ntp).rut

☼ Bueno amigo, como te diste cuenta, no es dificil crear una eficiente base de datos, que sera realmente util para tu proyecto.
Espero te sirva... suerte y adelante.

Atte. viluarte22@hotmail.com
Victor Luis
Miembro Frecuente
Miembro Frecuente
 
Mensajes: 348
Registrado: 27 Jun 2013 20:53

Re: buscar segun combobox

Notapor aulio » 30 Ene 2014 15:11

Muchísimas gracias Victor Luis, pero debo ser bien sincero...la verdad es que solo lei un par de parrafos de tu respuesta, sin embargo, comprendi inmediatamente tu cabal conocimiento en el tema, por lo que agradezco tu voluntad de ayudar. La verdad es que el tema ya lo habia solucionado utilizando la inmortal forma del "prueba y error"...demoreé un poco pero lo logré.
Agradezco nuevamente la ayuda, por lo que les dejo el codigo utilizado a ver si alguien podria ayudarle.

Saludos desde Chile

Private Sub btningresasap_Click()
Application.ScreenUpdating = False
Sheets("BDMaterialess").Activate
Range("c1").Select
ActiveCell.Value = UserForm2.cmbmateriales.Text
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = UserForm2.TBSAP.Text
Cells.Find(What:=Range("C1"), After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
, SearchFormat:=False).Activate
ActiveCell.Offset(0, 1).Select
ActiveCell = Range("D1")
ActiveCell.Copy
ActiveCell.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Sheets("Datos").Activate
End
End Sub
aulio
Miembro Nuevo
Miembro Nuevo
 
Mensajes: 4
Registrado: 20 Abr 2012 09:52

Re: buscar segun combobox

Notapor Victor Luis » 01 Feb 2014 00:42

Holas...

Bien desarrollado, veo que te defiendes muy bien en Macros; pero a mi parecer llegaras al final al mismo problema que todos y es que usas las celdas y hojas como base de datos, lo cual no siempre es seguro.. claro que debes insertar en varias partes el codigo para guardar el libro de Excel, porque si no perderas datos importantes... Yo a un principio realizaba de esa manera pero al ver las deficiencias, preferi aprender de Macros a VBA Excel, y trabajar con archivos secuenciales, aleatorios y binarios, lo que me permite manejar todo tipo de informacion con eficiencia ilimitada y rapidez.

Bueno amigo.. sigue adelante y suerte... Saludos de Bolivia.
Victor Luis
Miembro Frecuente
Miembro Frecuente
 
Mensajes: 348
Registrado: 27 Jun 2013 20:53


Volver a OTROS FOROS

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado
cron