letras fantasma

02/05/2007 - 19:32 por Ivan | Informe spam
hola a todos,

me esta ocurriendo una cosa cuanto menos curiosa:

tengo declaradas estas variables publicas:

Public rDatos As String, rTitulos As String, cFinF As String, _
cFinC As String, cFinR As String, csFiltro As String, _
rCriterios As String, rResultado As String, refResultado As String

que inicializo de esta manera:

Public Sub IniciaRefs()
rDatos = Ltr_Col(C_INI) & F_TIT & ":" & Ltr_Col(C_INI + N_CAMPOS - 1) & _
Worksheets(LISTA).Cells(65536, C_INI).End(xlUp).Row
rTitulos = Ltr_Col(C_INI) & F_TIT & ":" & Ltr_Col(C_INI + N_CAMPOS - 1) &
F_TIT
cFinF = Ltr_Col(N_CAMPOS)
cFinC = Ltr_Col(N_CAMPOS + 85)
cFinR = Ltr_Col(N_CAMPOS + 170)
csFiltro = "a:" & cFinF
rCriterios = "ch1:" & cFinC
rResultado = "fo1:" & cFinR
End Sub

donde las constantes (en mayusculas) son valores numericos validos y la
funcion 'Ltr_Col', que devuelve las letras segun el nº pasado, es la
siguiente:

''*********funcion de Vinchenzo Vinc ***************************************
'
Public Function Ltr_Col(ByVal nroCol As Long) As String
If nroCol < 27 Then _
Ltr_Col = Chr$(64 + nroCol) Else _
Ltr_Col = Chr$(64 + (nroCol \ 26) + CInt(nroCol Mod 26 = 0)) & _
Chr$(64 + IIf(nroCol Mod 26 = 0, 26, nroCol Mod 26))
End Function

y ahora viene lo 'curioso' y que no consigo explicarme a que se debe: en una
de mis pruebas inicializo las variables en el 'Initialice' de un formulario
y las muestro en un MsgBox, de esta forma:

Private Sub UserForm_Initialize()
Dim testMsj As String IniciaRefs
testMsj = "IniciaRefs:" & vbCr & vbCr & _
"rDatos = " & rDatos & vbCr & _
"rTitulos = " & rTitulos & vbCr & _
"cFinF = " & cFinF & vbCr & _
"cFinC = " & cFinC & vbCr & _
"cFinR = " & cFinR & vbCr & _
"csFiltro = " & csFiltro & vbCr & _
"rCriterios = " & rCriterios & vbCr & _
"rResultado = " & rResultado & vbCr
MsgBox testMsj
End Sub

. El misterio (para mi) es que todas las variables se reflejan perfectamente
en el Msgbox excepto 'cFinF', 'cFinC' y 'cFinR', que aparecen en blanco,
como si no se hubieran inicializado, pero sin embargo 'csFiltro',
rCriterios' y 'rResultado', que toman su valor de concatenar una cadena fija
con cada una de las anteriores (cFinF, cFinC y cFinR) si aparecen
perfectamente. Esto es lo que aparece:

IniciaRefs:

rDatos = A1:F6559
rTitulos = A1:F1
cFinF cFinC cFinR csFiltro = A:F
rCriterios = CH1:CM
rResultado = FO1:FT


en fin, que el tema me tiene sobre todo alucinado, pues no le veo el sentido
(he pensado que quizas exista algun tipo de 'incompatibilidad' en nombres
pero sigo sin verlo), aunque realmente parece que si toman el valor con lo
que me serian validas, pero si podeis explicarme el motivo os lo agradezco

un saludo y hasta pronto
Ivan

Preguntas similare

Leer las respuestas

#1 Ivan
02/05/2007 - 20:33 | Informe spam
misterio resuelto,

resulta que tenia duplicada la declaracion de 'esas' variables, en un modulo
normal y en el del formulario, y claro, por lo que se ve en el form se
volvian a inicializar como cadena vacia. Lo que sigo sin comprender del todo
es la secuencia en que se 'desarrollan' las cosas entre el evento initialice
y el activate (cuestion de pruebas), pues si las variables se inicializan
correctamente con el procedimiento 'IniciaRefs' en initialice y el MsgBox
tambien se llama desde este evento, y las variables 'dependientes' si
conservan su valor, suponiendo, tanto que las variables del modulo del form
se inicialicen al 'salir' del evento initialice como que lo hagan en
activate, ¿por que en el msgbox no se ven reflejados los valores, si a este
se le llama antes que ambas circunstancias, aunque luego el valor de las
variables se volviera a inicializar.?

bueno, como veis, uno mas de mis cacaos mentales

disculpad la metedura de pata y hasta pronto
Ivan

PD; en cualquier caso, si alguien se anima a comentar esta ultima duda,
bienvenido sea.
Respuesta Responder a este mensaje
#2 Héctor Miguel
03/05/2007 - 02:43 | Informe spam
hola, Ivan !

... Lo que sigo sin comprender del todo es la secuencia en que se 'desarrollan' las cosas
entre el evento initialice y el activate (cuestion de pruebas)
pues si las variables se inicializan correctamente con el procedimiento 'IniciaRefs' en initialice
y el MsgBox tambien se llama desde este evento, y las variables 'dependientes' si conservan su valor [...]



[hasta donde se]...
1) el evento 'initialize' se ejecuta [precisamente] en el momento de cargar en memoria el formulario [una sola vez]
2) el evento 'activate' se ejecuta cada vez que se activa el formulario [despues de haber sido cargado en memoria]
3) si un formulario se muestra como 'no-modal', el evento 'initialize' no se ejecuta en las siguientes 'activaciones'

prueba usando dos formularios, uno de ellos solo con un boton de comando para mostrar al segundo formulario
y el segundo formulario puedes conservarlo 'libre de controles' :))

en el modulo de codigo del formulario 1:

Private Sub UserForm_Initialize()
MsgBox "Inicializando el formulario 1 ..."
End Sub
Private Sub UserForm_Activate()
MsgBox "Activando el formulario 1 ..."
End Sub
Private Sub CommandButton1_Click()
UserForm2.Show vbModeless
End Sub

en el modulo de codigo del formulario 2:

Private Sub UserForm_Initialize()
MsgBox "Inicializando el formulario 2 ..."
End Sub
Private Sub UserForm_Activate()
MsgBox "Activando el formulario 2 ..."
End Sub

en un modulo de codigo normal [solo para mostrar/lanzar/... el formulario 1]:

Sub A()
UserForm1.Show vbModeless
End Sub

prueba 'alternando' la activacion de cada formulario [incluso cerrando el segundo] ;)

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
#3 Ivan
03/05/2007 - 04:09 | Informe spam
hola Hector Miguel, muchas gracias de nuevo

la verdad es que parece evidente (no lo del no modal, que añado a la
saca) y es lo que mas o menos creia saber, pero con el lio de las
variables me ha hecho dudar.

Supongo que el motivo de que las variables 'dependientes' si mantengan
su valor es porque realmente se cargan 'dentro' del procedimiento
'IniciaRefs' y cuando 'vuelve' al initialice, solo se modifican las
repetidas. Ahora parece claro???, o es mas bien por estar duplicadas
que se 'anulan o algo similar?

bueno, muchas gracias de nuevo y hasta pronto
Ivan

PD: por cierto, y aunque no tiene nada que ver, al fin he conseguido
arrancarme (al menos en una buena parte) aquella espina de los filtros
avanzados. gracias tambien por aqui
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida