Macro de Impresión

Hola, agradezco todos tus comentarios, pero cuanto más aprendo más consultas surgen.
Quería saber si se puede, es que como viste en un archivo que te mande (formulario) hay uma macro de impresión pero es grande dado de que son varias áreas las que hay que imprimir, por ejemplo tengo este código:
Private Sub cmbAceptar_Click()
Dim icopias As Integer
If opbDGene.Value = True Then GoTo DGene
If opbDPrograma.Value = True Then GoTo DPrograma
If OpbRecursos.Value = True Then GoTo Recursos
If OpbProy1.Value = True Then GoTo Proy1
If opbProy2.Value = True Then GoTo Proy2
If opbProy3.Value = True Then GoTo Proy3
DGene:
Application.GoTo Reference:="DatosGenerales"
ActiveSheet.PageSetup.PrintArea = "DatosGenerales"
With ActiveSheet.PageSetup
.CenterHorizontally = True
.CenterVertically = False
.Orientation = xlPortrait
.PaperSize = xlPaperLetter
.FitToPagesWide = 1
.FitToPagesTall = 1
End With
icopias = InputBox("cuantas copias desea??")
ActiveWindow.SelectedSheets.PrintOut Copies:=icopias, Collate:=True
If MsgBox("Desea Imprimir otro cuadro??", vbYesNo) = vbYes Then GoTo empesar
If vbNo Then GoTo despedida
End
DPrograma:
Application.GoTo Reference:="DatosPrograma"
ActiveSheet.PageSetup.PrintArea = "DatosPrograma"
With ActiveSheet.PageSetup
.CenterHorizontally = True
.CenterVertically = False
.Orientation = xlPortrait
.PaperSize = xlPaperLetter
.FitToPagesWide = 1
.FitToPagesTall = 1
End With
icopias = InputBox("cuantas copias desea??")
ActiveWindow.SelectedSheets.PrintOut Copies:=icopias, Collate:=True
If MsgBox("Desea Imprimir otro cuadro??", vbYesNo) = vbYes Then GoTo empesar
If vbNo Then GoTo despedida
End
¿Cómo puedo hacer, dado de que si uno las ve, solo son las dos primras lineas las que cambian, es decir las que le dicen que es lo que tiene que tomar par impresión, sabes una manera más fácil de poderlo hacer? ¿O qué impleque menos código?, muchísimas gracias

1 respuesta

1
Respuesta de
Buenas, Gerardo!
Hasta donde probé, este código reemplazaría todo lo que tienes bajo el modulo de formulario "frmImpresión" e, incluso me atrevería a decir en el que se llama "frmImpre"
(Creo que hay un llamamiento cruzado entre ellos, que no sería necesario)
Haz lo siguiente, graba tu último archivo con otro nombre, utiliza este de prueba, reemplazando los códigos para tal formulario de impresión. Si lo pruebas y funciona bien, luego podrás reemplazar al otro por este.
En frmImpresión:
Private Sub cmbAceptar_Click()
Dim icopias
Select Case True
Case opbDGene.Value
prnRange = "DatosGenerales"
Case opbDPrograma.Value
prnRange = "DatosPrograma"
Case OpbRecursos.Value
prnRange = "RecursosPrograma"
Case OpbProy1.Value
prnRange = "Producto_1"
Case opbProy2.Value
prnRange = "Proy2"
Case opbProy3.Value
prnRange = "Proy3"
Case Else
Unload Me
If MsgBox("NO SELECCIONO REPORTE" & Chr(10) & "¿Desea Imprimir otro cuadro??", vbYesNo) = vbYes Then
frmImpresion.Show
Else
End
End If
End Select
icopias = InputBox("cuantas copias desea??") '<- si incorpora opción a formulario, eliminar esta línea
If Len(icopias) <> 0 Then
Application.GoTo Reference:=prnRange
ActiveSheet.PageSetup.PrintArea = prnRange
With ActiveSheet.PageSetup
.CenterHorizontally = True
.CenterVertically = False
.Orientation = xlPortrait
.PaperSize = xlPaperLetter
.FitToPagesWide = 1
.FitToPagesTall = 1
End With
' ActiveWindow.SelectedSheets.PrintOut Copies:=icopias, Collate:=True
Unload Me
If MsgBox("Desea Imprimir otro cuadro??", vbYesNo) = vbYes Then
frmImpresion.Show
Else
End
End If
Else
MsgBox "No seleccionó cantidad de copias. Salgo"
Unload Me
Exit Sub
End If
End
End Sub
-----
Verás que usé la estructura "Select Case" que prevé, incluso el caso de que se presione aceptar sin haber hecho selección alguna de reportes.
Existe otro control para el caso de que se presione Cancelar en la cantidad de copias o no se ingrese valor.
En particular, la selección de cantidad de copias la pondría en el mismo formulario donde se selecciona lo que se va a imprimir. Luego tendrás que adpatar la macro para que tome de él la cantidad.
Finalmente, una sugerencia:
Es posible configurar para que no se impriman, tanto el botón de "Impresiones" como la casilla de selección "Ingresar un nuevo registro" (y el borde alrededor). ¿Cómo?
Botón derecho del mouse sobre ellos, selecciona "Propiedades" (para el botón) o "Formato de control" (en los otros), y quita la marca de "Imprimir objeto" que está en la solapa "Propiedades"
Bueno, Gerardo, prueba la macro y coméntame.
Un gran abrazo!
Fernando
Añade un comentario a esta respuesta
Añade tu respuesta
Haz clic para o
Escribe tu mensaje
¿No es la respuesta que estabas buscando? Puedes explorar otras preguntas del tema Microsoft Excel o hacer tu propia pregunta: