constante de constantes

12/08/2007 - 03:56 por Ivan | Informe spam
hola a todos, hoy voy por partida doble

1.-¿existe una forma de 'encadenar' varias constantes en una sola, como una especie de matriz?

creo recordar por un ejemplo que me mandaron (pero que ahora mismo no tengo disponible), que si se puede, pero no se
como hacerlo

[si no recuerdo mal el caso era con constantes de alguna API, aunque en este caso seria con/para codigo 'normal' vba].¿
Sabeis si es posible y como??

2.-y, por otro lado, ¿es posible declarar matrices [de constantes] como constantes?

un saludo y hasta pronto
Ivan

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
12/08/2007 - 06:39 | Informe spam
hola, Ivan !

1.- existe una forma de 'encadenar' varias constantes en una sola, como una especie de matriz?
creo recordar por un ejemplo que me mandaron (pero que ahora mismo no tengo disponible)
que si se puede, pero no se como hacerlo
[si no recuerdo mal el caso era con constantes de alguna API, aunque en este caso seria con/para codigo 'normal' vba]. Sabeis si es posible y como??



1) para codigos 'normales' de VBA... [me temo que no... ya que] segun la ayuda en linea:
"No es posible usar variables, funciones definidas por el usuario o funciones intrinsecas de VB[A]... en expresiones asignadas a constantes"
"A diferencia de las variables, las constantes no se pueden cambiar inadvertidamente mientras el programa se esta ejecutando"

2.- por otro lado, es posible declarar matrices [de constantes] como constantes?



2) de acuerdo con lo anterior, no podrias declarar una *constante* usando [p.e.] un *Array* :-(( [p.e.]

a) la siguiente *forma* y procedimiento no son *ejecutables*...

Const Array_1 = Array("uno", "dos", "tres")
Sub Lista_Array()
Dim Sig As Byte
For Sig = LBound(Array_1) To UBound(Array_1)
MsgBox Array_1(Sig)
Next
End Sub

b) podrias *simular* la declaracion de [semi]matrices [p.e.] de la siguiente *alteracion* a la forma anterior...

Const Array_2 = "uno,dos,tres"
Sub Lista_Array_2()
Dim Sig As Byte, n_Array
n_Array = Split(Array_2, ",")
For Sig = LBound(n_Array) To UBound(n_Array)
MsgBox n_Array(Sig)
Next
End Sub

[claro que] requiere ejecutarse a partir de excel 2000 [VBA6] por la funcion Split :-((
si necesitas que sea operable desde la version xl97, deberas *proveer* tu propia funcion *Split*
lo que puedes hacer con el siguiente codigo [p.e.] al final de tu modulo *normal*...

#If Not VBA6 Then
Function Split(Cadena As String, Delimitador As String) As Variant
Split = Evaluate("{""" & Application.Substitute(Cadena, Delimitador, """,""") & """}")
End Function
#End If

saludos,
hector.
Respuesta Responder a este mensaje
#2 Ivan
12/08/2007 - 13:30 | Informe spam
hola Hector, gracias de nuevo

a) la siguiente *forma* y procedimiento no son *ejecutables*...

Const Array_1 = Array("uno", "dos", "tres")



=>es lo que me parecia, tras leer la ayuda y algunas pruebas, pero no estaba seguro si seria posible sin el uso de array
(la verdad es que estoy mal acostumbrado y acabo usando [casi] siempre 'Array' al inicializar matrices, con lo que el
resto de formas apenas las conozco)

b) podrias *simular* la declaracion de [semi]matrices [p.e.] de la siguiente *alteracion* a la forma anterior...

Const Array_2 = "uno,dos,tres"
...
n_Array = Split(Array_2, ",")



=> es exactamente lo que habia pensado

[claro que] requiere ejecutarse a partir de excel 2000 [VBA6] por la funcion Split :



=> es exactamente lo que me habia echado para atras

lo que puedes hacer con el siguiente codigo [p.e.] al final de tu modulo *normal*...

#If Not VBA6 Then
Function Split(Cadena As String, Delimitador As String) As Variant
Split = Evaluate("{""" & Application.Substitute(Cadena, Delimitador, """,""") & """}")
End Function
#End If



=> es . ¡¡¡ un autentico tesoro !!! ... y me va a ser muy, pero que muy util. A la saca con vitola de
preferente. Gracias otra vez.

una duda respecto a esto: "al final de tu modulo *normal*..."

=> ¿ lo de al final es solo una forma de hablar, o es que este tipo de ¿instrucciones? debe ir efectivamente al final
del modulo?

bueno, lo dicho, muchas gracias y un saludo
Ivan

PD: luego le echo un ojo a tu otra respuesta ( tengo que salir)
Respuesta Responder a este mensaje
#3 Héctor Miguel
12/08/2007 - 23:36 | Informe spam
hola, Ivan !

una duda respecto a esto: "al final de tu modulo *normal*..."

=> lo de al final es solo una forma de hablar, o es que este tipo de instrucciones? debe ir efectivamente al final del modulo?



no *necesariamente*... puede ir despues de las declaraciones de constantes y funciones de llamada a las API's ;)
es solo que si acostumbras usar un *separador* de procedimientos [una linea que divide cada procedimiento del modulo]
el signo '#' causara que la linea para este tipo de instrucciones quede justo antes de la linea con el #End IF :-((
[es solo por *estetica visual*] :))

saludos,
hector.
Respuesta Responder a este mensaje
#4 Ivan
13/08/2007 - 00:10 | Informe spam
hola Hector,

muchas gracias por la aclaracion ( ademas me pone bastante 'nervioso' cuando las citadas lineas no estan donde deberian
[pej. a causa de comentarios])

un saludo
Ivan

"Héctor Miguel" escribió en el mensaje news:
hola, Ivan !

una duda respecto a esto: "al final de tu modulo *normal*..."

=> lo de al final es solo una forma de hablar, o es que este tipo de instrucciones? debe ir efectivamente al final
del modulo?



no *necesariamente*... puede ir despues de las declaraciones de constantes y funciones de llamada a las API's ;)
es solo que si acostumbras usar un *separador* de procedimientos [una linea que divide cada procedimiento del modulo]
el signo '#' causara que la linea para este tipo de instrucciones quede justo antes de la linea con el #End IF :-((
[es solo por *estetica visual*] :))

saludos,
hector.

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida