> ... un userform... un Listbox... elegir uno, varios o todos los elementos para imprimir
> ... cada elementos contiene datos distintos por lo cual... la macro se actualiza la hoja
> ... cuando actualiza el libro me borra la seleccion del cuadro de lista
> ... forma de evitar que al actualizar la hoja se borren los elementos seleccionados en el cuadro de lista?
- conservar en (alg)un rango de (alg)una hoja los elementos seleccionados (puede ser una hoja oculta)
- actualizar dinamicamente los elementos (de)seleccionados en "ese" lugar (rango/hoja/...)
- instruir a la macro para que "reaccione" segun esos elementos/rangos/... (y lo que represente cada uno)
o puedes comentar los detalles necesarios/suficientes (Y CLAROS)
para poder (re)construir un modelo de trabajo (exactamente) "igual al tuyo" (incluyento tus macros ?)
saludos,
hector.
Primeramente muchas gracias por tu respuesta. A continuación te facilito el
código:
1/ En primer lugar muestro el UserForm
Sub ImpresionMultiple()
UfCentros.Show
End Sub
2/ Marco por ejemplo 4 elementos (consta en total de 53 el ListBox) y le doy
al comandbutton "Aceptar" que ejecuta el siguiente codigo:
Private Sub CbOkButton_Click()
Call imprimemultiple
UFCentros.Hide
End Sub
Sub imprimemultiple()
Application.ScreenUpdating = False
Contar = UfCentros.LbCentros.ListCount
For i = 0 To UfCentros.LbCentros.ListCount - 1
If UfCentros.LbCentros.Selected(i) = True Then
Range("centroTM1") = i + 1
Call SeleccionCentro
ActiveSheet.PrintOut
End If
Next
Application.ScreenUpdating = True
End Sub
Sub SeleccionCentro()
On Error Resume Next
Application.ScreenUpdating = False
Application.Run "TM1RECALC"
Application.ScreenUpdating = True
End Sub
Aclararte que utilizo una aplicación de IBM para trabajar con excell llamada
TM1 y que almacena información en cubos tridimensionales. Pues bien,
"TM1RECALC" es una función integrada de estre programa que lo que hace es
recalcular la hoja cuando se solicitan datos distintos a los que la hoja está
mostrando en ese momento. El problema radica en que cuando ejecuta esta
función integrada el Listbox también se actualiza y deshace la selección
realizada con anterioridad, por lo cual solo imprime un elemento de todos los
seleccionados.
Aclararte también, que el rango "CentroTM1" es donde se encuentran los datos
que el programa TM1 necesita para evaluar los datos.
He omitido parcialmente código adicional en los procedimientos que no era
relevante para el caso.
No se si está suficientemente claro, pero si necesitas más datos, por favor
no dudes en pedirmelos.
Muchas gracias y un saludo,
"Héctor Miguel" escribió:
si el conttrol de lista esta vinculado a algun rango en alguna hoja que se (auto)actualiza por correr "TM1RECALC"
prueba a meter en una matriz los resultados de la seleccion "original" y ejecutas tus (re)procesos con esos elementos
(p.e.) cambia el procedimiento que usas ("imprimemultiple") por algo +/- como lo siguiente:
Sub imprimemultiple()
Dim Seleccionados(), n As Byte
Application.ScreenUpdating = False
With UfCentros.LbCentros
For i = 0 To .ListCount - 1
If .Selected(i) Then
ReDim Preserve Seleccionados(n)
Seleccionados(n) = i + 1
n = n + 1
End If
Next
End With
For n = LBound(Seleccionados) To UBound(Seleccionados)
Range("centroTM1") = Seleccionados(n)
Call SeleccionCentro
ActiveSheet.PrintOut
Next
End Sub
si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.
__ OP __
> 1/ En primer lugar muestro el UserForm
> Sub ImpresionMultiple()
> UfCentros.Show
> End Sub
>
> 2/ Marco por ejemplo 4 elementos (consta en total de 53 el ListBox)... comandbutton "Aceptar" que ejecuta el siguiente codigo:
> Private Sub CbOkButton_Click()
> Call imprimemultiple
> UFCentros.Hide
> End Sub
>
> Sub imprimemultiple()
> Application.ScreenUpdating = False
> Contar = UfCentros.LbCentros.ListCount
> For i = 0 To UfCentros.LbCentros.ListCount - 1
> If UfCentros.LbCentros.Selected(i) = True Then
> Range("centroTM1") = i + 1
> Call SeleccionCentro
> ActiveSheet.PrintOut
> End If
> Next
> Application.ScreenUpdating = True
> End Sub
>
> Sub SeleccionCentro()
> On Error Resume Next
> Application.ScreenUpdating = False
> Application.Run "TM1RECALC"
> Application.ScreenUpdating = True
> End Sub
>
> Aclararte que utilizo una aplicacion de IBM para trabajar con excell llamada TM1 y que almacena informacion en cubos tridimensionales.
> Pues bien, "TM1RECALC" es una funcion integrada de estre programa que lo que hace es recalcular la hoja
> cuando se solicitan datos distintos a los que la hoja esta mostrando en ese momento.
> El problema radica en que cuando ejecuta esta funcion integrada el Listbox tambien se actualiza
> y deshace la seleccion realizada con anterioridad, por lo cual solo imprime un elemento de todos los seleccionados.
> Aclararte tambien, que el rango "CentroTM1" es donde se encuentran los datos que el programa TM1 necesita para evaluar los datos.
>
> He omitido parcialmente codigo adicional en los procedimientos que no era relevante para el caso...
Muchas gracias por tu ayuda; funciona perfectamente. Unicamente le he
agregado un control de error en el caso de que no se seleccione ningún
elemento del Listbox no de un error en tiempo de ejecución y en lugar de esto
abandone el procedimiento.
Muchas gracias otra vez y un saludo,
"Héctor Miguel" escribió:
> hola, Fernando !