Valor de variables.

15/07/2005 - 22:59 por Desastres | Informe spam
Buenas tardes.
Tengo unas variables levantiscas. Recogen datos del tipo Código de documento, fecha y valor del documento.
Quería declararlas como Single, pero si lo hago, con las instrucciones siguientes:

If variable = "" then msgbox " Toca la trompeta"
If variable <>"" then msgbox " Toca la trompeta"

resulta que la trompeta no se calla.

Para conseguir que se calle la trompeta la mitad de las veces, tengo que declar las variables como Variant y utrilizar :

If IsEmpty(Variable) then MsgBox " Toca la trompeta"
If Not IsEmpty(Variable) then MsgBox " Toca la trompeta"

Pero no es lo que deseaba hacer. ¿Como puedo tener la seguridad de que una variable tiene algún valor y obtenerlo? y
¿como anular ese valor ( no cero que es un valor posible ) ?

Saludos
Des

Preguntas similare

Leer las respuestas

#11 Héctor Miguel
19/07/2005 - 07:14 | Informe spam
hola, Des !

Siento, en este caso no poder aplicar lo que me propones. Aun asi lo guardo para cuando sepa hacerlo.



-> con los datos 'conocidos' y de acuerdo con el 'contenido original' de la consulta de este 'hilo'...
[segun yo]... 'pudiera' ser aplicable [obviamente] quizas haran falta 'ciertas' adaptaciones/modificaciones/... :D

-> 'aprovechando' que con los [nuevos] comentarios 'describes' una situacion [mas bien]... distinta...
[igual y -nuevamente- mi imaginacion 'ha volado mas alla'... de lo necesario :))]
te comento 'entre lineas' ;)

si cualquier duda... o equivoque el camino... o informacion adicional... comentas?
saludos,
hector.
=> ... problema... entender... que pasa y como obtengo los elementos de la matriz... y no encontrando documentacion, no me salgo
... en castellano es muy sencillo pero no consigo hacerlo con matrices... no encuentro la forma de utilizar lo que he "metido" en la matriz



1) podrias 'pensar' en las matrices como [si fueran] rangos en hojas [matrices estaticas o dinamicas] p.e.
Dim Mis_filas(6) => 'genera' una matriz uni-dimensional [como si se tratara -solo- de 6 filas en una hoja de calculo]
Dim Mi_rango(6, 2) => 'genera' una matriz bi-dimemsional ['hablamos' de un rango de 6 filas y 2 columnas]
-> la 'cuenta' de los elementos en una matriz se inicia desde 0 [cero] hasta n_elementos MENOS 1 [sean filas o columnas]
[a menos que al inicio del modulo se especifique: ->Option Base 1<-]
2) una vez que has 'metido' datos en la matriz [entiendo no hay problemas aqui]... puedes 'traerlos/llamarlos' segun su posicion [fila/columna]
MsgBox Mis_filas(3) [trae la fila 4... o a menos que tengas 'Option Base 1'... => MsgBox Mis_filas(4) <=]
MsgBox Mi_rango(3, 1) [trae la fila 4 de la segunda columna... o... MsgBox Mi_rango(4, 2) ->Option Base 1<- ??]

... en lugar de WorkbookArticulos, wbArticulos, libroArticulos, lArticulos, lArt... utilizar lArt para libro, hArt para hoja, cArt para cabecera en Art
... hasta aqui es cuestion de reparas macro a macro y cambiar l-libro, h-hoja, etc... queria hacerlo... con matrices y es donde me pierdo
... pretendia algo asi como:
Option base =1
Dim GrupoAlbaranes()
GupoAlbaranes=array(Art,Cli,Ban,Est,Com,Fam)
y luego decir
Por cada elemento de la matriz



3) [solo una duda]... si por la expresion: 'Por cada elemento de la matriz'... te refieres a un bucle 'For Each ... Next'
[creo que] no tiene 'impacto' si 'dejas/omites' Option Base 0 [por omision] o cambias a Option Base 1 [si no se necesita de un 'contador'] -?-

on error resume next
Set "l"&Art(((un elemento de la matriz))) = workbooks("l"& "elemento de la matrz" &".xls")
if error <>0 then set "l"&Art(((un elemento de la matriz))) = Workbooks.Open(PATH & workbooks("l"& "elemento de la matrz" &".xls"))
... me sigue dando calabazas.



-> y ['por lo que veo'...] seguiras 'recibiendo calabazas' :-(( [perdon por el 'chascarrillo' :D y...] enseguida mi [intento de] 'explicacion'...
4) si a la variable 'declarada' ->Dim GrupoAlbaranes()<- le 'metes' un array que [supongo] se referira a libros ->=array(Art,Cli,Ban,Est,Com,Fam)<-
-> los parentesis 'indican' que se trata de una matriz [de dimension/es] 'variable/s' y... ANTES de que sea posible de usarla...
'tendras que' establecer cuantos elementos va a contener [ReDim] y... 'llenar' UNO A UNO... [filas/columnas o... ReDim Preserve]
o... si la vas a llenar a traves de la funcion Array(...)... deberas declararla SIN los parentesis
con respecto de la instruccion donde 'intentas'... 'generar'... 'variables al vuelo'...
=> Set "l"&Art(((un elemento de la matriz))) = workbooks("l"& "elemento de la matrz" &".xls") < a) NO es posible 'pedirle' a un codigo que 'genere' variables... al azar, al vuelo... o 'segun sean necesarias' :-(
=> toma en cuenta que 'tratas' de GENERAR variables de un 'tipo' -de objeto- 'controlado' por la aplicacion [workbooks, worksheets, etc.] < => a menos que estes dispuesto a usar 'codigo que genere codigo' <= [lo que conlleva otro tipo de visicitudes] :))
=> ademas de que te estaras 'alejando' de lograr un codigo +/- 'delgado' <= :-(
b) SI puedes hacer que el codigo [re]'asigne/llene/establezca/...' valores a variables ->ya declaradas<- [explicita o implicitamente]
Respuesta Responder a este mensaje
#12 Desastres
19/07/2005 - 15:16 | Informe spam
Hola Héctor. ! y Gracias

-> con los datos 'conocidos' y de acuerdo con el 'contenido original' de la consulta de este 'hilo'...
[segun yo]... 'pudiera' ser aplicable [obviamente] quizas haran falta 'ciertas' adaptaciones/modificaciones/... :D


Estoy seguro de ello

-> 'aprovechando' que con los [nuevos] comentarios 'describes' una situacion [mas bien]... distinta...


Más que distinta, multiple. El que me respondieras con Proceso = Array("Pedido", "F. Prof", "F. Com") me dió ìe a
comentar un procerso que quise implementar en otro programa (aún sin exito)

[igual y -nuevamente- mi imaginacion 'ha volado mas alla'... de lo necesario :))]


No se exactamente en qué estas pensando, pero ... puede ser.

> ... problema... entender... que pasa y como obtengo los elementos de la matriz... y no encontrando documentacion, no


me salgo
> ... en castellano es muy sencillo pero no consigo hacerlo con matrices... no encuentro la forma de utilizar lo que


he "metido" en la matriz

1) podrias 'pensar' en las matrices como [si fueran] rangos en hojas [matrices estaticas o dinamicas] p.e.
Dim Mis_filas(6) => 'genera' una matriz uni-dimensional [como si se tratara -solo- de 6 filas en una hoja de


calculo]
Esta parte , hasta las de cuatro dimensiones, creo que las puedo imaginar

->los elementos en una matriz se inicia desde 0 [cero] hasta n_elementos MENOS 1 [sean filas o columnas]
[a menos que al inicio del modulo se especifique: ->Option Base 1<-]



Yo prefiero "ver" directamente a que elemento, o en que numero de elemento pienso es decir Option base=1

2) una vez que has 'metido' datos en la matriz [entiendo no hay problemas aqui]... puedes 'traerlos/llamarlos' segun


su posicion [fila/columna]
MsgBox Mis_filas(3) [trae la fila 4... o a menos que tengas 'Option Base 1'... => MsgBox Mis_filas(4) <=]
MsgBox Mi_rango(3, 1) [trae la fila 4 de la segunda columna... o... MsgBox Mi_rango(4, 2) ->Option Base 1<- ??]



lo que me cuesta trabajo , mejor dicho no sé hacer es:
For each "cosa" in "la matriz"
Call abrirLibro(cosa)
next
o
for bucle = 1 to "numero contado de elementos de la matriz"
call abrirLibro(bucle)
next bucle
Y esto si es que el numero de orden (bucle) puede sustituir al nombre de libro al cual representa.

> ... pretendia algo asi como:
> Option base =1
> Dim GrupoAlbaranes()
> GupoAlbaranes=array(Art,Cli,Ban,Est,Com,Fam)
> y luego decir
> Por cada elemento de la matriz

3) [solo una duda]... si por la expresion: 'Por cada elemento de la matriz'... te refieres a un bucle 'For Each ...


Next'
sí, me referia a esto
no tiene 'impacto' si 'dejas/omites' Option Base 0 [por omision] o


Blas se puede ir a la cama.

cambias a Option Base 1 [si no se necesita de un 'contador'] -?-


me siento mas seguro con Axe, perdoón con Option base=1

> on error resume next
> Set "l"&Art(((un elemento de la matriz))) = workbooks("l"& "elemento de la matrz" &".xls")
> ... me sigue dando calabazas.
-> y ['por lo que veo'...] seguiras 'recibiendo calabazas' :-((


Ya decia yo...
-> [perdon por el 'chascarrillo' :D


ego te absolvo in nomine

4) si a la variable->Dim GrupoAlbaranes()<- le 'metes' un array que [supongo] se referira a


libros ->=array(Art,Cli,Ban,Est,Com,Fam)<-


-> los parentesis 'indican' una matriz [de dimension/es] 'variable/s' y... ANTES de que sea posible de usarla...
'tendras que' establecer cuantos elementos va a contener [ReDim] y... 'llenar' UNO A UNO...


¿ se necesita hacer a "dedos" o se puede hacer con bucles, por ejemplo desde una hoja?
[filas/columnas o... ReDim Preserve]
Mandeeee!

o... si la vas a llenar a traves de la funcion Array(...)... deberas declararla SIN los parentesis


Blas ya tiene bastante sueño

con respecto de la instruccion donde 'intentas'... 'generar'... 'variables al vuelo'...
=> Set "l"&Art(((un elemento de la matriz))) = workbooks("l"& "elemento de la matrz" &".xls") <> a) NO es posible 'pedirle' a un codigo que 'genere' variables... al azar, al vuelo... o 'segun sean necesarias'


:-(
¿ Ni siquiera si te declaras amigo?¿ o por hacer un favor?

=> toma en cuenta que 'tratas' de GENERAR variables de un 'tipo' -de objeto- 'controlado' por la aplicacion


[workbooks, worksheets, etc.] <No percibo la gravedad de mis intenciones

=> a menos que estes dispuesto a usar 'codigo que genere codigo' <= [lo que conlleva otro tipo de visicitudes]


:))
! Hay si pudiera/ supiera ¡
=> ademas de que te estaras 'alejando' de lograr un codigo +/- 'delgado' <= :-(


Algunas veces, las cosas interesantes estan lejanas

b) SI puedes hacer que el codigo [re]'asigne/llene/establezca/...' valores a variables ->ya declaradas<-


[explicita o implicitamente]
Sí, esto ya lo hago en alguna ocasion

Saludos
Des
Respuesta Responder a este mensaje
#13 Héctor Miguel
20/07/2005 - 04:01 | Informe spam
hola, Des !

lo que me cuesta trabajo, mejor dicho no se hacer es:
For each "cosa" in "la matriz"
Call abrirLibro(cosa)
next
o
for bucle = 1 to "numero contado de elementos de la matriz"
call abrirLibro(bucle)
next bucle
Y esto si es que el numero de orden (bucle) puede sustituir al nombre de libro al cual representa.



[p.e.]
Dim GrupoAlbaranes ' suponiendo que la variable sera llenada con la funcion Array(...)
Dim Elemento ' si vas a manejar los bucles de tipo For Each ... Next
Dim Libro As Byte ' si vas a manejar los bucles de tipo For Contador = 1 To n ... Next
GrupoAlbaranes = Array("Mi libro de articulos", "Mi libro de clientes", "Mi libro de bancos", "Mi libro esto", "Mi libro com", "Mi libro fam")

op1: usando bucles for each - next
For Each Elemento In GrupoAlbaranes
Call AbrirLibro(GrupoAlbaranes(Elemento))
Next

op2: usando bucles for contador - next
For Libro = 1 To Ubound(GrupoAlbaranes)
Call AbrirLibro(GrupoAlbaranes(Libro))
Next

=> [obviamente] se asume que la extension -.xls- y/o la ruta de acceso las majena el procedimiento 'llamado' -?-
y que existe alguna verificacion que evite que un libro se abra [o se intente abrir] dos veces -?-

o... suponiendo que la variable sera llenada por un bucle que 'tome' el dato del nombre de los libros de un rango en una hoja...
Dim GrupoAlbaranes(), Fila As Integer, Filas As Integer
With Worksheets("hoja1")
Filas = .Range("a65536").End(xlUp).Row
ReDim GrupoAlbaranes(Filas)
For Fila = 1 To Filas
GrupoAlbaranes(Fila) = .Range("a" & Fila)
Next
End With

=> lo que 'responderia' a tu inquietud acerca de...
¿se necesita hacer a "dedos" o se puede hacer con bucles, por ejemplo desde una hoja?



=> con respecto a... 'generar'... 'variables al vuelo'... [me temo que queda incluido]...
¿Ni siquiera si te declaras amigo? ¿o por hacer un favor?



loco... ntinuamos ?
saludos,
hector.
Respuesta Responder a este mensaje
#14 Desastres
20/07/2005 - 09:57 | Informe spam
Hola Héctor. Gracias.

Creo que me has dado base para remodelar, una vez mas, el planteamiento de apertura de conjuntos de libros,.
En el futuro creo que lo modificaré de nuevo para seguir lo que alguien definió como " al vuelo", es decir:
en este momento abro varios libro, trabajo en cada momento con uno de ellos ( manteniendo todos abiertos) y luego los
cierro todos.
Es una idea que no esta mal para empezar, pero que se puede mejorar siguiendo un símil de puertas oscilantes ( abrir,
ver o pasar y cerrar) .
Y en el siguiente futuro, abrir, pasar a matriz y cerrar. Modificar la matriz y pasar dato a dato de nuevo a los libro
bases de datos.
Pero para eso necesito aún mucha seguridad del dominio de las matrices, para estar seguro del resultado.
Quizás siga teniendo que llamar a tu puerta.

=> [obviamente] la extension -.xls- y/o la ruta de acceso las majena el procedimiento 'llamado' -?-


Sí , asi es
y que existe alguna verificacion que evite que un libro se abra [o se intente abrir] dos veces -?-


Tambien esta hecho.

o... suponiendo que la variable sera llenada por un bucle que 'tome' el dato del nombre de los libros de un rango en


una hoja...
Dim GrupoAlbaranes(), Fila As Integer, Filas As Integer
With Worksheets("hoja1")
Filas = .Range("a65536").End(xlUp).Row
ReDim GrupoAlbaranes(Filas)
For Fila = 1 To Filas
GrupoAlbaranes(Fila) = .Range("a" & Fila)
Next
End With

=> lo que 'responderia' a tu inquietud acerca de...
> ¿se necesita hacer a "dedos" o se puede hacer con bucles, por ejemplo desde una hoja?

=> con respecto a... 'generar'... 'variables al vuelo'... [me temo que queda incluido]...
> ¿Ni siquiera si te declaras amigo? ¿o por hacer un favor?

loco... ntinuamos ?


ah orate respondo que creo que aún no estoy preparado ( tiempo y conocimientos), pero si estas disponible en el futuro,
puede que llegue el momento.

saludos,
hector.


Saludos
Des
Respuesta Responder a este mensaje
#15 Héctor Miguel
20/07/2005 - 10:48 | Informe spam
hola, Des !

Creo que me has dado base para remodelar... el planteamiento de apertura de conjuntos de libros.
Pero para eso necesito... seguridad del dominio de las matrices, para estar seguro del resultado.
Quizas siga teniendo que llamar a tu puerta. [...]
ah orate respondo que creo que aun no estoy preparado ( tiempo y conocimientos)
pero si estas disponible en el futuro, puede que llegue el momento.



ya sea que [me] respondas 'ah ora'... o despues... que 'lames' a la puerta o que este disponible [yo?... o alguien mas] :))
[creo que] la seguridad en 'el dominio'... es 'cosa de tiempo'... y los conocimientos... es 'cosa de practica' ;)
[y como te mencione alguna vez]... 'mientras nos aguanten...' :D

saludos,
hector.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida