Page 1 of 1

OLE Excel ComboBox

Posted: Thu Nov 27, 2014 5:25 am
by Enrrique Vertiz
Buenas noches

Estimados, no tengo idea de como hacer esto, creando una hoja Excel con TOLE, necesito crear un combobox de selección, por ejemplo en la columna 20 filas de la 1 a la 10 guardo 10 códigos, 001, 002, 010.
En la columna 1 quiero que me presente un Combobox para seleccionar los 10 códigos presentados en la columna 20, evitando asi los errores de digitación, se como hacerlo en el Excel pero necesito que el programa FWH lo haga al momento que creo la hoja, algo asi seria :

oSheet:Range( oSheet:Cells( 20, 1 ), oSheet:Cells( 20, 10) ):Select() (pongo como ejemplo el método, no tengo ni idea de como es pero algo asi seria ??)

Gracias ...

Re: OLE Excel ComboBox

Posted: Thu Nov 27, 2014 9:07 am
by Sebastián Almirón
Prueba algo así :

avalores := {}
for n = 1 to 10
aadd(avalores, oExcel:Cells(20,n))
next n

oexcel:Sheets(hoja):Activate() //Hoja donde estará el combobox
oexcel:Range(celda):Select() //Celda donde estará el combobox
oexcel:Selection:Validation:Delete()

for n = 1 to len(avalores)
oexcel:Selection:Validation:Add(3, 1, 1, avalores[n])
next n

oexcel:Selection:Validation:IgnoreBlank(.f.)
oexcel:Selection:Validation:ErrorTitle("Valor no permitido")
oexcel:Selection:Validation:ErrorMessage("Seleccione un valor de la lista")
oexcel:Selection:Validation:ShowError(.t.)
oexcel:Selection:Validation:ShowInput(.t.)

Re: OLE Excel ComboBox

Posted: Thu Nov 27, 2014 6:44 pm
by Enrrique Vertiz
Saludos Sebastian

GRACIAS, por ahi van los tiros, lo estoy probando y ya pinta, ajusto y queda listo
GRACIAS nuevamente.

Re: OLE Excel ComboBox

Posted: Fri Nov 28, 2014 3:36 pm
by Enrrique Vertiz
Sabastian, buenos dias

Ya funciona correctamente, pero el ComboBox va "eliminando" lineas cada vez que hago una seleccion, y deberian quedarse las opciones disponibles en cada linea, todas, sabes por casualdiad que debo hacer, quite :

oExcel:Selection:Validation:Delete()

Pero aun asi del combobox de seleccion me va borrando de una en una las opciones de seleccion por cada linea en la que voy seleccionando, GRACIAS

Re: OLE Excel ComboBox

Posted: Mon Dec 01, 2014 9:18 am
by Sebastián Almirón
Hola, no se porque te pasa eso. Yo en realidad los valores del combobox de las celdas los tomo de una dbf con la función de abajo y me funciona bien. Un usuario autorizado puede indicar en mi programa cuales son los valores del combobox admisibles para ciertas celdas y son muchas, se guardan en la dbf vversion, que tiene _ hoja, celda y valida (cada valor que puede tener el combobox).
Utilizo oexcel := CreateObject( "Excel.Application" )
Prueba a meter todo dentro del bucle, yo lo tengo así.
Saludos

function ponvalid()
sele vversion
go top
set order to 1
do whil !eof()
oexcel:Sheets(alltrim(hoja)):Activate()
oexcel:Range(alltrim(celda)):Select()
oexcel:Selection:Validation:Delete()
oexcel:Selection:Validation:Add(3, 1, 1, valida)
oexcel:Selection:Validation:IgnoreBlank(.f.)
oexcel:Selection:Validation:ErrorTitle("Valor no permitido")
oexcel:Selection:Validation:ErrorMessage("Seleccione un valor de la lista")
oexcel:Selection:Validation:ShowError(.t.)
oexcel:Selection:Validation:ShowInput(.t.)
skip
enddo
return

Re: OLE Excel ComboBox

Posted: Mon Dec 01, 2014 4:42 pm
by Sebastián Almirón
Hola, perdoname pero el funcionamiento es distinto a lo que parecía.

Solo hay que pasarle a Validation:Add(3,1,1,cadena_de_datos_separados_por_punto_y_coma)

Me he liado porque yo en realidad tengo un campo más que es la version del libro y dependiendo de esta los valores pueden ser unos u otros, de ahí lo de utilizar un bucle que para ti no será necesario. En definitiva tiene que ser algo así:

oexcel:Sheets(alltrim(hoja)):Activate() //La hoja donde está la celda
oexcel:Range(alltrim(celda)):Select() // La celda
oexcel:Selection:Validation:Delete() // Si tenía un combobox anterior hay que borrarlo primero
oexcel:Selection:Validation:Add(3, 1, 1, cvalida) // La cadena de opciones separadas por punto y coma
oexcel:Selection:Validation:IgnoreBlank(.f.) //Si el valor se puede dejar en blanco
oexcel:Selection:Validation:ErrorTitle("Valor no permitido") //cabecera del mensaje si introducen un valor a mano que no esté en la lista
oexcel:Selection:Validation:ErrorMessage("Seleccione un valor de la lista") //Mensaje
oexcel:Selection:Validation:ShowError(.t.) //Si se muestran los errores o no
oexcel:Selection:Validation:ShowInput(.t.) //Si se puede poner el valor a mano

La cadena debe terminar en punto y coma o de lo contrario no deja elegir el ultimo valor

Espero que esta vez si

Re: OLE Excel ComboBox

Posted: Mon Dec 01, 2014 8:46 pm
by Enrrique Vertiz
Sebastian, muchas gracias por tu tiempo.

Voy a revisar con tus indicaciones y les comento, gracias nuevamente.