problemas con viaul Basic de excel

27/08/2004 - 09:55 por David | Informe spam
Mi problema es el siguiente. Tengo en un formulario un
ComboBox y 2 TextBox. Lo que quiero hacer es que al
escoger del Combo un valor se relenen automaticamente los
dos TextBox. El codigo que he usado es el siguiente:

Private Sub ComboBox_config_auxiliar_change()

Worksheets("Visual").Range("B32").Value =
ComboBox_config_auxiliar.Value
TextBox_poder_calorifico.Value = Worksheets("Visual").Cells
(35, 2).Value
TextBox_precio.Value = Worksheets("Visual").Cells(36,
2).Value

End Sub

El problema que tengo es que solo se me actualiza el
primero de los dos TextBox y el otro se queda con el mismo
valor que tenia antes. Si ejecuto el codigo paso a paso
funciona a la perfeccion pero ejecutandolo normalmente
solo se actualiza el primero de los 2 TextBox. He
conseguido medio areglarlo poniendo un retardo de 1
segundo antes de salirme de la funcion. El codigo que he
usado es:

Application.Wait Now + TimeValue("00:00:01")

El problema que se me plantea con esta solucion es que el
codigo se relentiza demasiado.

Si a alguien se le ocurre una solucion mejor sería de
agradecer ya que me urge mucho terminar dicho programa.

Un saludo y gracias
 

Leer las respuestas

#1 Héctor Miguel
28/08/2004 - 07:50 | Informe spam
hola, David !

Mostrar la cita
'basado' en que la instruccion 'wait' suspende ->todo EXCEPTO<- 'procesos internos' [como el recalculo]...
es posible que la 'complejidad' de las formulas de tu modelo... [por si solas] ->se tomen 'su tiempo'<- :))
lo que [y si fuera aplicable] 'sumado' a una [posible] vinculacion de celdas 'precedentes y dependientes' ...
NO esta 'dando el suficiente tiempo' para que el valor de dicha celda ya 'hubiera sido actualizado'
al momento en que este es 'tomado' [por el codigo] para 'depositarlo' en el segundo textbox [???]

si usas excel xp [2002] en adelante... podrias usar un bucle 'vacio' [mientras excel 'termina' de recalcular el modelo]
[quizas no 'se tarde' un segundo... pero debe 'andar muy cerca'] :))
==> suponiendo que la aplicacion 'se encuentra' en modo de calculo ->automatico<- <==Private Sub ComboBox_config_auxiliar_change()
Worksheets("Visual").Range("B32") = ComboBox_config_auxiliar

Do While Application.CalculationState <> xlDone
DoEvents
Loop
TextBox_poder_calorifico = Worksheets("Visual").Cells(35, 2)
TextBox_precio = Worksheets("Visual").Cells(36, 2)
End Sub

o... [para cualquier version de excel] 'forzar' al recalculo ANTES de continuar con la 'carga' de los valores
[se 'espera' que al forzar un recalculo por codigo, la 'siguiente' instruccion en vba tambien 'se espere'] :))
Private Sub ComboBox_config_auxiliar_change()
Worksheets("Visual").Range("B32") = ComboBox_config_auxiliar
Application.Calculate
TextBox_poder_calorifico = Worksheets("Visual").Cells(35, 2)
TextBox_precio = Worksheets("Visual").Cells(36, 2)
End Sub

¿comentas?
saludos,
hector.

Preguntas similares