Problema con debugging (un problema con VB)

03/12/2005 - 20:07 por Alejandro Garrammone | Informe spam
Hola grupo! les comento un poco, he hecho una macro en word (perdon que no
sea de excel, pero en el fondo es una funcion de VB la que tiene problemas)
para imprimir documentos largos, pero al hacer el debug correspondiente me
he dando cuenta de que nunca se ejecuta la sentencia FOR, o mejor dicho, se
evalúa y no se ejecuta su contenido. Alguien sabe por qué puede llegar a
pasar esto?
Aqui les transcribo el código:

Sub Impresion()
'
' Impresion Macro
' Macro recorded 28/11/2005 by Alejandro Garrammone
'

Dim tiempo As Date
Dim cant_rep As Integer
Dim cant_pag As Integer
Dim hora, min, seg As Integer
Dim tiempo_entre1 As Date
Dim tiempo_entre2 As Date
Dim flag As Byte
Dim inicio As Integer
Dim fin As Integer
Dim concat As String
Dim contador as integer



'inicio del cuerpo del programa
cant_pag = Selection.Information(wdNumberOfPagesInDocument)
cant_rep = cant_pag \ 240
'cant_rep + 1 es lo que tengo que tomar para el rango final
tiempo = Time()
hora = Hour(tiempo)
min = Minute(tiempo)
seg = Second(tiempo)
tiempo_entre1 = TimeSerial(hora, min + 15, 0)
tiempo_entre2 = TimeSerial(hora, min + 15, 59)

If cant_pag > 240 Then
For contador = 1 To can_rep Step 1 'ESTE ES EL FOR CON PROBLEMAS!
flag = 0
Do
If flag < 1 Then
fin = 240 * contador
inicio = fin - 239
concat = inicio & "-" & fin
Application.PrintOut FileName:="",
Range:=wdPrintRangeOfPages, Item:= _
wdPrintDocumentContent, Copies:=1, Pages:=concat, PageType:=
_
wdPrintAllPages, ManualDuplexPrint:=False, Collate:=True,
Background:= _
True, PrintToFile:=False, PrintZoomColumn:=0,
PrintZoomRow:=0, _
PrintZoomPaperWidth:=0, PrintZoomPaperHeight:=0
flag = 1
End If
tiempo = Time()
Loop Until (tiempo > tiempo_entre1) Or (tiempo < tiempo_entre2)
tiempo = Time()
hora = Hour(tiempo)
min = Minute(tiempo)
seg = Second(tiempo)
tiempo_entre1 = TimeSerial(hora, min + 15, 0)
tiempo_entre2 = TimeSerial(hora, min + 15, 59)
Next contador
fin = contador * 240
inicio = fin - 239
fin = cant_pag
concat = inicio & "-" & fin
Application.PrintOut FileName:="", Range:=wdPrintRangeOfPages, Item:= _
wdPrintDocumentContent, Copies:=1, Pages:=concat, PageType:= _
wdPrintAllPages, ManualDuplexPrint:=False, Collate:=True, Background:= _
True, PrintToFile:=False, PrintZoomColumn:=0, PrintZoomRow:=0, _
PrintZoomPaperWidth:=0, PrintZoomPaperHeight:=0
Else
inicio = 1
fin = cant_pag
concat = incio & "-" & fin
Application.PrintOut FileName:="", Range:=wdPrintRangeOfPages, Item:= _
wdPrintDocumentContent, Copies:=1, Pages:=concat, PageType:= _
wdPrintAllPages, ManualDuplexPrint:=False, Collate:=True, Background:= _
True, PrintToFile:=False, PrintZoomColumn:=0, PrintZoomRow:=0, _
PrintZoomPaperWidth:=0, PrintZoomPaperHeight:=0
End If
End Sub
 

Leer las respuestas

#1 Héctor Miguel
04/12/2005 - 06:48 | Informe spam
hola, Alejandro !

... una macro en word ... para imprimir documentos largos... la sentencia FOR... se evalua y no se ejecuta su contenido [...]



serviria si comentas que es lo que esperas que haga que no esta haciendo :))
si [como parece] lo unico que quieres es 'darle un respiro' entre bloques de 240 paginas a la impresora...
[creo que] necesitas 'sacar' las instrucciones de impresion... 'fuera' del bloque 'Do...Loop'
[y quizas te queden sobrando algunas 'variables'] ;)
prueba modificando el bucle 'For...Next' [y dentro el 'Do...Loop' pero en distinta posicion] +/- a lo siguiente...
[toma nota que he cambiado tus variables 'tiempo_entre1' y 'tiempo_entre2' por una que se llama... 'Espera' :))
=Dim Espera as Date
If cant_pag > 240 Then
For contador = 1 To can_rep Step 1 'ESTE ES EL FOR CON PROBLEMAS!
fin = 240 * contador
inicio = fin - 239
concat = inicio & "-" & fin
Espera = Now + TimeSerial(0, 0, 16)
Application.PrintOut FileName:="", Range:=wdPrintRangeOfPages, Item:= _
wdPrintDocumentContent, Copies:=1, Pages:=concat, PageType:= _
wdPrintAllPages, ManualDuplexPrint:=False, Collate:=True, Background:= _
True, PrintToFile:=False, PrintZoomColumn:=0, PrintZoomRow:=0, _
PrintZoomPaperWidth:=0, PrintZoomPaperHeight:=0
Do
tiempo = Time()
Loop Until (tiempo > Espera)
Next contador
Else ' [...]

[probablemente] podrias 'sacrificar' la -nueva- variable 'Espera' y el 'Do...Loop' por el metodo 'Wait' -?-
[que suspende las acciones del usuario y otras macros... PERO NO los procesos internos, como la impresion] ;)
[p.e. en lugar de la variable y el bucle do...loop intenta con]...
-> Application.Wait Now + TimeSerial(0, 0, 16)

comentas [si hubiera] algun detalle adicional ?
saludos,
hector.

p.d. creo que...
-> no es correcto que postees la misma pregunta en dos [o mas] grupos de forma 'indistinta' :(
pudiera resultar en un 'desgaste innecesario' de 'busquedas de soluciones'...
y... las respuestas en un grupo NO 'beneficiaran' a los demas grupos 'excluidos' [por 'indistintos'] :\
-> si consideras que es de interes para otros grupos... prueba haciendo 'cross-posting' [NO 'multi-posting'] ;)

Preguntas similares