Incremento de tiempo en for... next

17/09/2006 - 13:11 por Ivan | Informe spam
Hola a todos

estoy intentando hacer un bucle con OnTime para ejecutar un
procedimiento cada segundo durante 5 segundos. Seguramente estoy
haciendo una burrada, pero tras varias pruebas con diferentes errores,
he acabado intentando hacer un bucle poniendo como contador una
variable date, pero aunque no hay errores, no se produce ningun
resultado.

Expongo el codigo, que posiblemente sea mas explicito:

Dim Aum As Date, Salida As Boolean
Dim Alt As Double, Anch As Double


Sub FotoCreciente()
Dim Nueva As Date
Nueva = Now
With Image1
Alt = .Height: Anch = .Width
For Aum = TimeValue("00:00:01") To TimeValue("00:00:05")
Nueva = Nueva + Aum
Application.OnTime Nueva, "AumentarFoto"
If Salida = True Then
Application.OnTime Nueva, "AumentarFoto", , False
Exit Sub
End If
Next
End With
End Sub

como indica el nombre del procedimiento, se trata de ir aumentando un
formulario y una imagen contenida en un control image hasta un tamaño
determinado durante 5 segundos

Este es el codigo "AumentarFoto"

Sub AumentarFoto()
Salida = False
With Image1
Me.Height = Alt + 108
.Height = Alt + 108
Me.Width = Anch + 168
.Width = Anch + 168
If Alt >= 540 Or Anch >= 840 Then Salida = True
End With
End Sub

Si podeis ayudarme os lo agradezco

un saludo y hasta pronto
Ivan

Preguntas similare

Leer las respuestas

#6 Héctor Miguel
19/09/2006 - 08:39 | Informe spam
hola, Ivan !

__ 1 __
como se pueden conocer las cordenadas de pantalla, o de una hoja de excel
para saber cuantos puntos incrementar una posiscion tratandose de imagenes o formas?


__ 2 __
como puedo saber el tama#o (en puntos?) con que me va a abrir excel una foto?
y si el tama#o es igual al original como lo traduzco a puntos, que creo que es en lo que la mide excel? [...]



1) te expongo al final una forma de 'conocer' las coordenadas de pantalla [medidad en puntos de documento]
usando las propiedades de objetos 'range' y de la aplicacion [Usable...]
-> .Width-> horizontal -> coordenadas 'X' inician en la parte izquierda de la columna 1 (A)
-> .Height -> vertical -> coordenadas 'Y' inician en la parte superior de la fila 1

2) no creo que puedas conocer las dimensiones 'originales' de una imagen... ANTES de incrustarla en una hoja de calculo
[ademas] como estas usando el metodo 'Shapes.AddPicture(...' desde donde puedes 'obligar' a unas dimensiones 'discrecionales'...
y [todavia mas] 'forzando' un 'bloqueo' de la relacion del aspecto [.LockAspectRatio = msoTrue]
-> habras 'perdido' [totalmente] la posibilidad de 'reconstruir' las dimensiones 'originales' de la figura insertada

3) modifica/prueba/juega/analiza/... con los siguientes ejemplos y podras ir sacando conclusiones
el primero inserta una imagen... toma sus dimensiones 'originales'... aplica una 'escala'... y reporta los resultados
el segundo muestra un mensaje con la ubicacion [en el documento] del 'rango visible' y de la imagen insertada
-> nota 'que' reportan las propiedades .Top y .Left -> cuando mueves el rango visible en la hoja n_filas/columnas abajo/derecha

4) el 'efecto' del metodo 'Shapes.AddPicture(...' estableciendo las coordenadas Top y Left en ceros
equivaldria a seleccionar la celda 'A1' al de ejecutar el codigo propuesto como 'Inserta_figura' [en lugar de la celda 'C5' en el mismo]
[solo que el metodo '.Pictures.Insert' se encarga de insertar la imagen en sus dimensiones 'originales' al 100%]

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

Sub Inserta_figura()
Dim Alto_original As Single, Ancho_original As Single, _
Alto_actual As Single, Ancho_actual As Single
Application.ScreenUpdating = False
Range("c5").Select
With ActiveSheet.Pictures.Insert("C:\Documents and Settings\Ivan\" & _
"Mis documentos\Libreria 3-7\Introduccion\Foto1.jpg")
Alto_original = .Height
Ancho_original = .Width
.Parent.Shapes(.Name).LockAspectRatio = msoFalse
.Parent.Shapes(.Name).ScaleHeight 0.01, True
.Parent.Shapes(.Name).ScaleWidth 0.01, True
Alto_actual = .Height
Ancho_actual = .Width
End With
MsgBox "Las dimensione de la imagen insertada son:" & vbCr & vbCr & _
"Alto original = " & Alto_original & vbCr & _
"Ancho original = " & Ancho_original & vbCr & _
"Alto actual = " & Alto_actual & vbCr & _
"Ancho actual = " & Ancho_actual & vbCr & _
"Escala de ajuste = " & Ancho_actual / Ancho_original * 100 & "%"
End Sub

Sub Medidas_de_pantalla()
With ActiveWindow.VisibleRange
MsgBox "El rango visible " & .Address & vbCr & _
"Arriba - X - .Top = " & .Top & vbCr & _
"Izqda - Y - .Left = " & .Left & vbCr & _
"Ancho - X2 - .Width = " & .Width & vbCr & _
"Alto - Y2 - .Height = " & .Height & vbCr & _
vbCr & _
"La aplicacion pued usar..." & vbCr & _
"Ancho = " & Application.UsableWidth & vbCr & _
"Alto = " & Application.UsableHeight & vbCr & _
vbCr & _
"La figura 1 esta ubicada en..." & vbCr & _
"Arriba = " & ActiveSheet.Pictures(1).Top & vbCr & _
"Izqda = " & ActiveSheet.Pictures(1).Left & vbCr & _
"Ancho = " & ActiveSheet.Pictures(1).Width & vbCr & _
"Alto = " & ActiveSheet.Pictures(1).Height
End With
End Sub

__ el codigo expuesto __
PD: este es el nuevo codigo de momento
Sub ProbarFoto()
Dim MiHj As Worksheet, MilSeg As Long
Set MiHj = ThisWorkbook.Worksheets(2)
MiHj.Shapes.AddPicture("C:\Documents and Settings\Ivan\" & _
"Mis documentos\Libreria 3-7\Introduccion\Foto1.jpg", msoTrue, _
msoFalse, 0, 0, 3, 3).LockAspectRatio = msoTrue
With MiHj.Shapes(1)
.Placement = xlFreeFloating
For MilSeg = 2 To 100
DoEvents
Retardo 1
.Height = .Height * (MilSeg / (MilSeg - 1))
.IncrementLeft 1
If MilSeg < 51 Then
.IncrementTop 1
ElseIf MilSeg > 50 Then
.IncrementTop -1
End If
Next
End With
End Sub
Respuesta Responder a este mensaje
#7 Ivan
19/09/2006 - 11:43 | Informe spam
Hola Hector Miguel, muchas gracias

Ya he conseguido que la imagen se pasee por la pantalla mas o menos
armoniosamente,

ahora, a falta de probar, creo que con esta nueva ayuda tuya, ya
incluso las puedo ir colocando en un destino mas concreto sin que se
pisen las unas a las otras.

gracias de nuevo
Un saludo y hasta pronto
Ivan
Respuesta Responder a este mensaje
#8 Ivan
20/09/2006 - 03:06 | Informe spam
Hola de nuevo, Hector Miguel

este mensaje tiene dos motivos:

el 1º y mas importante:

tras probar los codigos que me has facilitado, no he tenido mas remedio
que volver a escribir para darte las gracias de nuevo:

¡¡¡ SON UNA MARAVILLA!!! , al menos para mi, y si hay alguien
leyendo esto que como yo este intentando aprender vba, le recomiendo
que los guarde a buen recaudo. Si alguna vez empieza a trabajar con
imagenes, o con formas, creo que los agradecera.

y el 2ª es una nueva consulta sobre el tema, pero solo por si tienes
tiempo y lo consideras oportuno:

creo recordar que he leido en alguna respuesta tuya en el foro (que
ahora no he logrado encontrar), que existe un cierto riesgo de
corrupcion si se manipulan excesivamente imagenes y ¿puntos? en
archivos de excel. Solo me suenan campanas, y no estoy muy seguro de si
tiene alguna relacion con lo que trato de hacer,. pero por si acaso te
consulto por si recuerdas a que me refiero .

Y, aprovechando, una ultima consulta:

como ya he comentado, estas practicas con las imagenes son para hacer
una especie de introduccion. Como seguramente habras adivinado, son
para 'aquella' dichosa/eterna biblioteca que quizas 'alguna vez acabe'
(y te envíe). ¿seria recomendable poner la introduccion en un libro
diferente, para no cargar mucho el archivo, o quizas ralentizaria mas?.


Aunque no lo he decidido aun, la introduccion constara de entre 5 y
diez fotos, que solo estaran vinculadas(lo cual pienso que es mejor por
el mismo motivo: no cargar el archivo¿¿o no es asi??. La introduccion
se podra saltar si se desea, por lo que, si se va a omitir no tiene
sentido que ocupe espacio??

Y por ultimo, expongo el codigo tal y como esta por el mometo, por si
vieras algo importante a mejorar/evitar:

el codigo va abriendo una foto en cada esquina(+/-) y tras crecer
rebotando por la pantalla vuelve a ponerla en su esquina. Hay que
ajustar muchas cosas en cuanto a 'itinerario', ritmos, tamaños,
posiciones, etc,..pero se le va viendo color a la cosa

Private Declare Sub Retardo Lib "kernel32" Alias "Sleep" (ByVal
Milisegundos As Long)

Sub ProbarFoto2()
Dim MiHj As Worksheet
Dim MilSeg As Long
Dim Sup As Double, Lat As Double, nroFoto As Single
Set MiHj = ThisWorkbook.Worksheets(2)
For nroFoto = 1 To 4
Select Case nroFoto
Case 1: InSup = 0: InIzq = 0: IncreSup = 5: IncreIzq = 5
Case 2: InSup = 0: InIzq = 592: IncreSup = 5: IncreIzq = -5
Case 3: InSup = 312: InIzq = 592: IncreSup = -5: IncreIzq = -5
Case 4: InSup = 312: InIzq = 0: IncreSup = -5: IncreIzq = 5
End Select
MiHj.Shapes.AddPicture "C:\Documents and Settings\Ivan\" & _
"Mis documentos\Libreria 3-7\Introduccion\Foto" & nroFoto & ".jpg",
msoTrue, _
msoFalse, InIzq, InSup, 142.5, 142.5
With MiHj.Shapes(nroFoto)
.LockAspectRatio = msoTrue
.Placement = xlFreeFloating
.ScaleHeight 0.01, True
For MilSeg = 1 To 100
DoEvents
Retardo 20
.ScaleHeight MilSeg / 100, True
.ScaleWidth MilSeg / 100, True
.IncrementLeft IncreIzq
If MilSeg < 50 Then
.IncrementTop IncreSup
ElseIf MilSeg > 49 Then
.IncrementTop IncreSup * -1
End If
Next
For MilSeg = 100 To 2 Step -1
DoEvents
Retardo 20
.IncrementLeft IncreIzq * -1
If MilSeg > 49 Then
.IncrementTop IncreSup
ElseIf MilSeg < 50 Then
.IncrementTop IncreSup * -1
End If
Next
End With
' Medidas_de_pantalla
Next
End Sub

Un saludo y lo dicho: gracias por todo
Ivan
Respuesta Responder a este mensaje
#9 Héctor Miguel
23/09/2006 - 05:35 | Informe spam
hola, Ivan !

tarde... :-(( pero 'sin sue#o' :))

creo recordar que he leido en alguna respuesta... que existe un cierto riesgo de corrupcion si se manipulan excesivamente imagenes...



-> [hasta donde se]... siempre existira un riesgo al incrustar objetos en las hojas :-(
[sobre todo... si el exceso llegara a ser... 'excesivo'] :))

... estas practicas con las imagenes son para hacer una especie de introduccion...
... seria recomendable poner la introduccion en un libro diferente, para no cargar mucho el archivo, o quizas ralentizaria mas?.



-> si son pocas [probablemente] convendria mantenerlas en el archivo [obviamente usando la opcion de vinculadas]
[es decir... incrustarlas por codigo una sola vez y proveerlas en la misma ubicacion si vas a distribuir la aplicacion]
y dejar que el codigo solamente las vaya modificando en dimensiones y posicion -?-

saludos,
hector.
Respuesta Responder a este mensaje
#10 Ivan
23/09/2006 - 16:40 | Informe spam
Gracias Hector Miguel

Tomo nota, y, a ver lo que me sale.

Un saludo y hasta pronto
Ivan
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida