Jump to content

Validar códigos sin depender de una hoja


aaquino

Recommended Posts

Buen día, tarde, noche compañeros

Quisiera molestarlos, si me pudieran ayudar con algo que no he podido resolver.

Estoy haciendo una validación de códigos, para lo cual actualmente estoy dependiendo de una hoja para validar. Lo que estoy validando en sí, es el primer dígito del código, y que si este primer dígito no se encuentra en una lista, definida en una hoja, entonces que lance un mensaje de advertencia y que no deje pasar a lo siguiente.

Sin embargo, lo que solicito es que esta lista, se encuentre dentro de una variable, del mismo código, para no depender de una hoja de excel. Estaba pensando en un Array, pero sin embargo no he podido realizar lo que necesito.

Cabe mencionar que no estoy solicitando explícitamente un array, sino que si tienen alguna sugerencia mejor, que me puedan ayudar.

Quedo atento a sus comentarios.

Muestra AE.xlsm

Link to comment
Share on other sites

Hace 49 minutos , aaquino dijo:

Estoy haciendo una validación de códigos, para lo cual actualmente estoy dependiendo de una hoja para validar. Lo que estoy validando en sí, es el primer dígito del código, y que si este primer dígito no se encuentra en una lista, definida en una hoja, entonces que lance un mensaje de advertencia y que no deje pasar a lo siguiente

Hola aaquino

Si se puede usar un array o una sola hoja, pero es relativo a lo que buscas

¿Que tipos de codigos son? ¿Numeros? ¿Numeros y letras?... te lo pregunto asi, porque el array se puede crear desde VBA

 

Hace 51 minutos , aaquino dijo:

Sin embargo, lo que solicito es que esta lista, se encuentre dentro de una variable, del mismo código, para no depender de una hoja de excel. Estaba pensando en un Array, pero sin embargo no he podido realizar lo que necesito.

Puedes dejar esa hoja con los codigos y ocultarla, en VBA la declaras como array y listo

 

Saludos 

Link to comment
Share on other sites

Hola @aaquino,

Te recomiendo que no revuelvas el código, el que es para formularios tratalo en el mismo Módulo del formulario. No en un módulo estandar.

Lo que para mi es más lógico es lo siguiente.

  1. El ARRAY lo hago publico primero con nombre aArray.
  2. Cargar el ARRAY cuando abres el formulario.
  3. Valido lo ingresado al ComboBox, aquí es mejor hacer una función que te valide si lo encontró o no, y que la función te regrese False o True.
  4. Y después sigues lo que quieras en el código del formulario.

Espero me haya dado a entender.

Saludos

P.D.: Espero que sea lo que necesitas,

cualquier duda al respecto... por aquí andamos.

 

Muestra AE.xlsm

Link to comment
Share on other sites

Hace 2 horas, Gerson Pineda dijo:

Hola aaquino

Si se puede usar un array o una sola hoja, pero es relativo a lo que buscas

¿Que tipos de codigos son? ¿Numeros? ¿Numeros y letras?... te lo pregunto asi, porque el array se puede crear desde VBA

 

Puedes dejar esa hoja con los codigos y ocultarla, en VBA la declaras como array y listo

 

Saludos 

Que tal mi estimado @Gerson Pineda , tiempo de no molestar, verdad?.... jajaja

Te comento, el código que se utilizaría sería "Numérico", yo dejaría el formulario para que solo acepte números.

La cuestión de solicitar ayuda, es porque no logro entender muy bien el funcionamiento de los Array, y no deseo una clase, sino que necesito un pequeño empujón (ayuda a solucionar el presente caso), para entender cómo funcionan. El principal motivo de esto es que, al finalizar todo el proyecto, lo que haré es agregar el formulario a un "Addin", en el cual ya tengo varios procedimientos, por lo que dejar la validación hacia una hoja, al final me daría problemas, ya sea de ejecución, compilación, o simplemente no haría lo que solicito.

Quedo atento a tus comentarios.

Link to comment
Share on other sites

Hace 49 minutos , Leopoldo Blancas dijo:

Hola @aaquino,

Te recomiendo que no revuelvas el código, el que es para formularios tratalo en el mismo Módulo del formulario. No en un módulo estandar.

Lo que para mi es más lógico es lo siguiente.

  1. El ARRAY lo hago publico primero con nombre aArray.
  2. Cargar el ARRAY cuando abres el formulario.
  3. Valido lo ingresado al ComboBox, aquí es mejor hacer una función que te valide si lo encontró o no, y que la función te regrese False o True.
  4. Y después sigues lo que quieras en el código del formulario.

Espero me haya dado a entender.

Saludos

P.D.: Espero que sea lo que necesitas,

cualquier duda al respecto... por aquí andamos.

 

Muestra AE.xlsm 23 kB · 1 download

Que tal mi estimado @Leopoldo Blancas

He validado tu solución, sin embargo, tal como le comenté a Gerson, dejar la información grabada en una hoja no me funciona, ya que al final de todo mi proyecto, el formulario y demás, lo dejaré como parte de un "Addin", entonces es por ello que necesito que, ya sea el array o alguna otra solución, quede dentro del mismo código y no ligado a una hoja.

Quedo atento a tus comentarios.

Link to comment
Share on other sites

Hace 11 minutos , aaquino dijo:

Que tal mi estimado @Leopoldo Blancas

He validado tu solución, sin embargo, tal como le comenté a Gerson, dejar la información grabada en una hoja no me funciona, ya que al final de todo mi proyecto, el formulario y demás, lo dejaré como parte de un "Addin", entonces es por ello que necesito que, ya sea el array o alguna otra solución, quede dentro del mismo código y no ligado a una hoja.

Quedo atento a tus comentarios.

En alguna parte del Universo deben de existir esos códigos,..... en el mismo formulario?, en un Archivo de Texto?, van a cambiar?, en una hoja web?.... 

Si me explicas y respondes lo que te pregunto a lo mejor hay una solución...

Saludos.

Link to comment
Share on other sites

Hace 2 minutos , Leopoldo Blancas dijo:

En alguna parte del Universo deben de existir esos códigos,..... en el mismo formulario?, en un Archivo de Texto?, van a cambiar?, en una hoja web?.... 

Si me explicas y respondes lo que te pregunto a lo mejor hay una solución...

Saludos.

Que tal Leopoldo, te comento, y tal vez no me he dado a entender.

Lo único que necesito que quede en el Array, o en la solución propuesta, son los números del 1 al 7, ya que lo único que estoy validando es el primer dígito que se ingrese en el combobox, los códigos ingresados en el combobox serán almacenados en otro lado.

Lo único que necesito es que en alguna Variable me queden almacenados los números del 1 al 7, y que al momento de ingresar el primer dígito en el combobox valide si ese primer dígito existe en la variable, es decir, si el primer dígito ingresado en el combobox es 1, 2, 3, 4, 5, 6 o 7.

Quedo atento a tus comentarios.

Link to comment
Share on other sites

Si lo quieres guardar en una variable puede ser así:

De forma individual en tu formulario con un array.

Private Sub UserForm_Initialize()
    aValidos = Array(1, 2, 3, 4, 5, 6, 7)
End Sub

o Como una cadena de Texto en el mismo Formulario ?

Private Sub UserForm_Initialize()
   
cValidos="1234567"
End Sub

Saludos.

 

P.D.: CREO QUE NO TIENES EXPERIENCIA EN HACER UN LIBRO DE EXCEL COMO COMPLEMENTO Y POR ESO TUS DUDAS... QUE NO DEBE DE HABER.

 

Link to comment
Share on other sites

Hace 8 minutos , Leopoldo Blancas dijo:

Si lo quieres guardar en una variable puede ser así:

De forma individual en tu formulario con un array.

Private Sub UserForm_Initialize()
    aValidos = Array(1, 2, 3, 4, 5, 6, 7)
End Sub

o Como una cadena de Texto en el mismo Formulario ?

Private Sub UserForm_Initialize()
   
cValidos="1234567"
End Sub

Saludos.

 

P.D.: CREO QUE NO TIENES EXPERIENCIA EN HACER UN LIBRO DE EXCEL COMO COMPLEMENTO Y POR ESO TUS DUDAS... QUE NO DEBE DE HABER.

 

Gracias por tus comentarios....

Solo que creo que no has leido:

1. Las normas, donde indican claramente que NO  se puede escribir en mayúsculas, para expresar algo con mayor intensidad lo tienes que hacer con negrita.

2. Lo que le dije a Gerson, que no conozco muy bien el uso de los arrays, no que no supiera hacer un libro como complemento.

Veré si lo que me has dado como solución funciona, sino lo haré saber.

Link to comment
Share on other sites

Hace 6 horas, aaquino dijo:

Lo único que necesito que quede en el Array, o en la solución propuesta, son los números del 1 al 7, ya que lo único que estoy validando es el primer dígito que se ingrese en el combobox, los códigos ingresados en el combobox serán almacenados en otro lado.

Lo único que necesito es que en alguna Variable me queden almacenados los números del 1 al 7, y que al momento de ingresar el primer dígito en el combobox valide si ese primer dígito existe en la variable, es decir, si el primer dígito ingresado en el combobox es 1, 2, 3, 4, 5, 6 o 7.

Pues mira el adjunto, hay varias formas, y te darás cuenta, que no es para nada complicado

Espero entenderte 

 

Saludos

Buscar variable en array_GP.zip

Link to comment
Share on other sites

Private Sub UserForm_Initialize()
Dim Valores As Variant, i As Integer
Valores = Array(1, 2, 3, 4, 5, 6, 7)
For i = 0 To UBound(Valores)
   ComboBox1.AddItem Valores(i)
Next
End Sub

 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

Guest
This topic is now closed to further replies.
  • Crear macros Excel

  • Posts

    • Primero estabas haciendo referencia a  listboxpalau el cual no existe porque el tuyo se llama ListBox1 y segundo estabas utilizando  RemoveItem que cuando cargas el listbox con RowSource no aplica.
    • @Sergio primeramente pido disculpas por usar este hilo, pero tengo la siguiente consulta porque ya no se me permite adjuntar archivos en el foro?
    • Hola @ffernando, A la espera de que te pueda ayudar alguien con mas conocimientos que yo, a ver si te sirve. Primero de todo, debes tener los 2 archivos excel en una misma carpeta.  Uno con las macros y otro con la "Base de datos" En el archivo con macros debes crear 2 procesos: Function IsFileOpen(FileName As String) Dim iFilenum As Long Dim iErr As Long On Error Resume Next iFilenum = FreeFile() Open FileName For Input Lock Read As #iFilenum Close iFilenum iErr = Err On Error GoTo 0 Select Case iErr Case 0: IsFileOpen = False Case 70: IsFileOpen = True Case Else: Error iErr End Select End Function y este otro  Sub LiberarBarra() Application.StatusBar = False End Sub estos 2 procesos los debe tener en un modulo. Por último debes poner el siguiente código en el botón que hayas asignado para realizar la entrada de datos. Dim objExcel As Application Dim RutaArchivo As String Dim Texto As String Dim Fila As Integer Dim Final As Integer Texto = "Guardando los datos" Application.StatusBar = Texto Set objExcel = CreateObject("Excel.Application") With objExcel RutaArchivo = ThisWorkbook.Path & "\NOMBRE DEL LIBRO QUE ALMACENARA LOS DATOS.xlsx" If IsFileOpen(RutaArchivo) Then MsgBox "El libro debe estar cerrado para proceder." Exit Sub Else With .Workbooks.Open(RutaArchivo) For Fila = 2 To 1000 If .Worksheets("NOMBRE DE TU HOJA DESTINO").Cells(Fila, 1) = "" Then Final = Fila Exit For End If Next COPIA ESTA LINEAS PARA CADA UNO DE TUS BOX PARA REALIZAR LA ENTRADA DE DATOS .Worksheets("NOMBRE DE TU HOJA DESTINO").Cells(Final, 1) = ME.TXT_NOMBRE DE TU BOX .Worksheets("NOMBRE DE TU HOJA DESTINO").Cells(Final, 2) = ME.TXT_NOMBRE DE TU BOX COPIA ESTA LINEAS PARA CADA UNO DE TUS BOX PARA REALIZAR LA ENTRADA DE DATOS ME.TXT_NOMBRE DE TU BOX.Value = Empty .Close SaveChanges:=True End With End If End With Call LiberarBarra MsgBox "Datos guardados correctamente!" End Sub Con esto debería de funcionarte. De todos modos, si compartes el archivo será mucho mejor. Saludos,
    • Hola tod@s!!! me gustaría saber como puedo capturar los datos de un formulario a un otro libro (que no sea el libro que contiene la macro con el form). La idea es que varias personas puedan ir criando datos desde formularios "personales" y que estos datos generados por todos sean grabados  una única hoja. ahora mismo tengo el formulario funcionando, pero cada usuario guarda en "su archivo" la información. :( les agradezco de antemano toda la ayuda!!!
    • Hola sagamoal Ser miembro de paga, te da algunas ventajas, como subir archivos. Prueba esta formula, deberás adecuar a tus rangos =SI(INDICE(MES(Hoja1!$D$5:$D$9)=7,COINCIDIR(B6,Hoja1!$B$5:$B$9,)),INDICE((Hoja1!$D$5:$D$9,Hoja1!$E$5:$E$9),COINCIDIR(B6,Hoja1!$B$5:$B$9,),,SI(Hoja2!C6="i",1,2)),"") B6 es el código, y lo busca en la hoja 1 en la columna que corresponda. te adjunto imágenes para que te guíes. hoja1 Espero te sea de utilidad Saludos, Silvia   Hoja2    
  • Recently Browsing

    No registered users viewing this page.

×
×
  • Create New...

Important Information

Privacy Policy