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
 

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.

Preguntas similares