Saltar al contenido

Recommended Posts

publicado

Hola:

Cada vez es mas difícil encontrar algo que no se haya hecho ya.

Por lo que no me queda mas remedio que volver a inventar la rueda.

Os adjunto un sistema de como realizar una validación de datos sin utilizar la "Validación de datos" de Excel. ¿ Que ventajas tiene ?, Absolutamente ninguna, pero, ya sabeis, ........, como me aburría.....

Saludos a todos.

Tranquilo Toldeman, que te tengo presente en mis oraciones.

Validacion.zip

publicado

Hey Antoni, muy bueno y practico, aunque notar que el combobox no se cargaba, hacia falta el .value (ComboBox1.AddItem Cells(x, ActiveCell.Column).Value) dentro del bucle y claro no mostraba error por el controlador de errores ON ERROR RESUME NEXT ojo no pretendo hacer ver que se mas que tu, solo que no se cargaba el combo por lo ya explicado y para el resto que tuviesen dificultad, por lo demas esta excelente mi estimado

Saludos

publicado
Hey Antoni, muy bueno y practico, aunque notar que el combobox no se cargaba, hacia falta el .value (ComboBox1.AddItem Cells(x, ActiveCell.Column).Value) dentro del bucle y claro no mostraba error por el controlador de errores ON ERROR RESUME NEXT ojo no pretendo hacer ver que se mas que tu, solo que no se cargaba el combo por lo ya explicado y para el resto que tuviesen dificultad, por lo demas esta excelente mi estimado

En ese sentido no he tenido ningún problema, "debería" funcionar ya que la propiedad por defecto (que yo sepa) es .Value.

No debería funcionar igual si la variable está declarada en el módulo de hoja, en lugar de variable public en un módulo estándar.

publicado
En ese sentido no he tenido ningún problema, debería funcionar ya que la propiedad por defecto (que yo sepa) es .Value.

Pues a mi no me carga el combobox y que yo sepa el combo se carga con su rango como "Celda.Value", al menos asi lo he experimentado cuando los he ocupado

Saludos

publicado

#include <FrikiPosting.h>

void main(hola)

{

Antoni, felicitaciones por tu creatividad en periodo de aburrimiento. Me han llamado la atención 3 cosas, 2 cosas por las que felicitarte, la otra es algo vengo notando que te he visto hacer varias veces que no me acaba de convencer (no todo va a ser bueno), pero eso sí, sigues siendo mi maestro ;)

Felicitaciones por: "If Selection.Cells.Count > 1", super simple y mira que lo he usado veces pero no se me había ocurrido usarlo en una sentencia condicional, ¡MUY BUENA IDEA! :D

"ComboBox1.Top/Left/etc = Target.etc", solo lo había usado con imágenes, no tenía ni idea que el ComboBox se alimentara de este mismo principio pero pensándolo bien, es otro objeto mas así que ahora le veo más sentido a las cosas en VB.

Motivado por lo aprendido de tus conocimientos y tras el comentario de Gerson, me ha parecido bien explicar con esta respuesta en plan friki y decidirme por fin a decirte cual es el código que quizás deberías depurar para que tus aportes fueran aun más exquisitos y es el tema de los errores, que es la tercera cosa que te iba a comentar.

Una vez leí en un foro guiri, no recuerdo donde, que aquel que usaba "On Error Resume Next" en el programa principal era un novato que no sabía programar, absolutamente absurdo desde mi punto de vista pero que fue algo que me caló, absurdo también porque está claro que aquí hay mucho nivel en la comunidad pero aun así sigue habiendo muchos casos de "On Error Resume Next", y no me refiero solo a este caso Antoni, esto aparece en muchos más foros, cosa a lo que le voy a tener que dar la razón a Gerson, es bastante lioso si no eres el autor del programa ya que pueden surgir errores de mil tipos diferentes y si eres la víctima, no te va a hacer mucha gracia ver eso de "OERN" en el código.

Yendo al grano y hablando en general, diré que solucioné este problema muy fácilmente con el uso de funciones auxiliares pasándole parámetros por valor, (en algunos casos parámetros por referencia), y recibiendo como respuesta un argumento bolean, que puede sonar ambiguo y difícil de primeras pero es tan simple como lo siguiente: vas a poner un "On Error Resume Next", la cosa es que sabes el motivo del porque lo vas a poner, es decir, sabes la línea que puede crear ese error, así que en lugar de poner "OERN", creas una función, metes allí la frase, creas dentro de ese procedimiento la sentencia "OERN" y devuelves un bolean. En el programa principal en lugar de obtener ERROR, directamente puedes usar un condicional con ese bolean para actuar según Verdadero o Falso.

Un saludo a todos, en especial a Antoni y Gerson que son con los que he tratado en este tema.

}//Fin de programa

publicado

Hola verzulsan

Que gran analisis el tuyo muchacho! solo asi es como aprendemos, como los foros son sinonimos de discusion, y mientras Antoni se despierta de sus ciestecita jeje, quiciera saber si a ti te carga/funciona bien el ComboBox sin el .Value lo he intentado sin el pero no me fuciona, de verdad quiero saber que pasa? o es mi Office o no se la razon, pero si en ese metodo no me muestra nada el Combobox, a espera de tus comentarios amigo y un gusto compartir con Antoni/tuve porsupuesto

Saludos

publicado

Hola

de verdad quiero saber que pasa? o es mi Office o no se la razon

Si efectivamente como lo sospeche, en mi trabajo el Microsoft Office Excel 2003 me muestra error y si alguien puede saber a que se debe, espero lo comente, lo estoy probando en mi casa y me funciona si declararlo como valor (.Value)

Saludos

publicado

Hola pueblo:

A Gerson:

Como bien dice tuve, yo tampoco consigo entender que es lo que te sucede.

Dada mi vagancia genética, escribo lo menos posible, y jamás he utilizado .Value

no solo en los controles ComboBox, si no, absolutamente en todos los objetos de Excel, salvo en los bucles For Each y con With, ya que algunas veces se confunde el valor con el objeto.

A verzulsan:

A ti quería yo pillarte,.....jeje.

Así que utilizo el On Error Resume Next a la ligera,.....vale, vale, pues ahora te vas a enterar:

Un momento que tengo que ir al baño,...... que me ha dado un apretón.

¡ Uff ...! Que tranquilo me he quedado,... sigamos.

Utilizo Resume Next, si y solo si, tengo controlados absolutamente todas las posibilidades de error y continuar con el proceso, no constituye un problema para la normal finalización de la operación.

En el caso que nos ocupa, es decir el aporte realizado, solo se produce un error, y es cuando se selecciona la totalidad de la hoja.

En este caso se produce el error "Desbordamiento", dado que para la normal funcionalidad del aporte, el seleccionar la totalidad de las celdas no tiene ningún sentido, dejo terminar el procedimiento ya que su rango solo se aplica a las columnas 1-4 y a partir de la fila 10 y cuando se ha seleccionado una sola celda.

Apuntar que con On Error GoTo Errores, desvías la ejecución a la etiqueta Errores:, que con Resume Next después de la etiqueta Errores: continúas inmediatamente después de donde se produjo el error y que con On Error GoTo 0, desactivas cualquier control sobre los errores que se puedan producir, y el procedimiento queda listo para usar otro On Error en cualquier otro punto.

Decir también, que una instrucción On Error desactiava el On Error anterior y que si se produce un error en un procedimiento que no tiene control de érrorres, es como si el error se hubiera producido en el punto de la llamada a ese procedimiento.

¡Ah! y para finalizar, no te creas todo lo que leas en las páginas "guiris", que van todo el día "mamaos".

Y recuerda On Error GoTo Consultar foro de Ideas y Aportes.

Esperando que los idus de noviembre os hayan sido propicios.

Antoni, alias "El Resume Next".

publicado

Jajaja que cachondo Antoni, ya sabia que te lo tomarias por ese sentido. Tal como lo explicas entonces si que te dare la razon y me parece logico que lo uses asi.

De todas maneras yo seguire con mi metodo, por que el GOTO, el ON ERROR machacando ON ERROR anterior, etc, ya lo he utilizado y mucho, y siempre he terminado perdiendo de una u otra forma el control de la hoja. Todo se hacia mas complicado hasta que empece a aislar los errores y tratarlos con condicionales Verdadero y Falso, pero eso soy solo yo, no he visto a muchos que lo hagan asi. Si a ti te va bien con ese metodo me parece perfecto que lo sigas usando.

Ya subire algun ejemplo de los mios algun dia que tenga tiempo para hacer algo que no sean estudios, que es que nos estan machacando en el modulo... Me voy a pegar un tiro xD

Un saludo!

  • 1 month later...
publicado

Ya jovenes, ninguno o todos tiene la razon amedias, lo mas sano si queires controlar todos los errores posibles, es utilizando On Error Resume Next, y mucho mejor que On Error GoTo, pero haciendolo en conjunto con Err, pero solo en donde sabemos que puede surgir un error por falta de datos o que estos no sean los correctos o esperados, lo podemos de la siguiente manera:

Err.Clear

On Error Resume Next

x = 1 / 0

If Err <> 0 Then

MsgBox Err.Description

End If

De esta forma como dice Antonio, se continua desde donde se produce el error, y como en el ejemplo, nos damos cuenta que es una división entre CERO, y podemos avisarle al usuario que introduzca un valor correcto.

Pero despues y por las razones que menciono verzulsan lineas arriba, para tener buenas tecnicas de programación, lo mas sano si no queremos perder el control del resto del programa es desactivar On Error Resume Next mediente:

On Error GoTo 0

De esta manera podremos detectar y corregir errores depurando nuestro codigo.

En pocas palabras:

Ni se debe de abusar de On Error Resume Next, ni de On Error GoTo.

Gracias.

Conéctate para comentar

Podrás dejar un comentario después de conectarte



Conéctate ahora
×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.