Foros del Web » Soporte técnico » Ofimática »

programar 2 macros (codigos) en uno solo para un solo

Estas en el tema de programar 2 macros (codigos) en uno solo para un solo en el foro de Ofimática en Foros del Web. Amigo, mis saludos. Dos macros (codigos) en un formulario VBA en excel Este código en un boton del form que me funciona muy bien Sub ...
  #1 (permalink)  
Antiguo 19/11/2010, 15:47
 
Fecha de Ingreso: agosto-2007
Mensajes: 1.945
Antigüedad: 17 años, 3 meses
Puntos: 39
programar 2 macros (codigos) en uno solo para un solo

Amigo, mis saludos. Dos macros (codigos) en un formulario VBA en excel
Este código en un boton del form que me funciona muy bien
Sub Printe_NombreHoja()
On Error GoTo controlError 'Si sucede un error irá a la línea "controlError" (abajo de todo)
Dim estaHoja 'Creo un variable
estaHoja = ActiveSheet.Name 'La variable toma el nombre de la hoja activa, para
'despúes volver; porque para imprimir una hoja primero la debo activar.
'------------
'El nombre de la hoja a imprimir lo ingreso en un cuadro (InputBox) que se abrirá al ejecutar la macro.
'
Dim ImprimirHoja 'Creo una variable (aquí se almacenará el nombre de la hoja ingresada en el InputBox).
Dim Mensaje, Titulo 'Dos variables para los textos del InputBox
'Establezco los dos textos que aparecerán en el InputBox y que lógicamente tú puedes cambiar.
Mensaje = "Ingrese el nombre de la hoja."
Titulo = " Hoja a imprimir"
'La variable toma desde el InputBox el nombre de la hoja a imprimir.
ImprimirHoja = InputBox(Mensaje, Titulo)
If ImprimirHoja = Empty Then Exit Sub 'Si no escribo nada la variables está vacía y salgo.
'ATENCION: Para imprimir la hoja activa escribe, "Esta" sin las comillas y presiona enter o Aceptar.
If ImprimirHoja = "Activa" Then ImprimirHoja = estaHoja 'Al dejar "Esta", se toma el nombre de la hoja activa.
'Puedes cambiar = "Esta" por otra palabra.
'------------
'Mensaje de confirmación por si te arrepientes
If MsgBox("Se imprimirá la hoja: " & ImprimirHoja & Chr(13) _
& Chr(13) _
& "¿Desea continuar?", vbExclamation + vbDefaultButton1 + vbYesNo, "Por favor confirme la acción") = vbNo Then
Exit Sub
Else
Application.ScreenUpdating = False 'Desactivo la actualización de la pantalla para que no muestre la hoja activa.
Worksheets(ImprimirHoja).Activate 'Activo la hoja a imprimir
ActiveSheet.PrintOut 'Imprimo
Worksheets(estaHoja).Activate 'Vuelvo a la hoja desde donde comencé
Application.ScreenUpdating = True 'Activo la actualización de la pantalla para ver la hoja activa.
End If
Exit Sub
controlError:
'En este caso el único error podría ser un nombre mal escrito, entoces mostramos este mensaje...
MsgBox "El nombre de hoja ingresado no existe.", vbExclamation, "Acción cancelada"
Exit Sub '...y salimos
End Sub
-----------------------------------------------------
y este que tambien me funciona a perfección
Private Sub cmdPrintHoja_Click() 'Ponerle la rutina para Vista Previa sin que se tranque la aplicacion
Application.PrintCommunication = False
Sheets(6).Select
Application.Dialogs(xlDialogPrinterSetup).Show 'Selección y configuración de impresora
Dim Copias As Integer
Solicitar_Copias:
Copias = Val(InputBox("Indica el número de copias a imprimir...", "Copias para imprimir", 1))
If Copias = 0 Then
MsgBox "Usted canceló la acción.", vbInformation, " Impresion cancelada"
Exit Sub
ElseIf Not Copias > 0 Then
MsgBox "Indica un número mayor que cero."
GoTo Solicitar_Copias
End If
'ActiveWindow.SelectedSheets.PrintOut From:=2, To:=3, Copies:=1 'imprimir solo la hoja selecionada(activa) Hay que probar si funciona
'ActiveWindow.SelectedSheets.PrintOut Copies:=Copias 'Imprime la(s) copia(s) selecionadas de la hoja6
ActiveSheet.PrintOut Copies:=Copias
Application.PrintCommunication = True
End Sub
--------------------------------------
Quiero integrar los dos en uno solo pero que no deje de terner las opciones del primero ni las del segundo, es decir, que pueda colocar el nombre de la hoja ademas de los mensages y luego me lleve a la Setup de la impresora, imputbox para cantidad de copias y mensages.
Con muchas ganas pero muy poca experiencia y con ayuda de las WEBs he ido acomodando los codigos pero no se como ni donde colocar lineas entre las lineas para hacer l oque estoy deseando y pidiendo.
Gracias

un solo codigo para usar un solo boton
__________________
Las contraseñas son como la ropa interior: Nunca dejarlas donde la gente pueda verlas
http://i64.tinypic.com/rho40i.jpg
  #2 (permalink)  
Antiguo 22/11/2010, 09:16
Avatar de Monimo  
Fecha de Ingreso: noviembre-2007
Ubicación: Mexico Df
Mensajes: 742
Antigüedad: 17 años, 1 mes
Puntos: 69
Respuesta: programar 2 macros (codigos) en uno solo para un solo

Bien a tu segundo botón cambiale el nombre así:

Sub cmdPrintHoja_Click


en el primer botón antes del Exit Sub escribirás:
cmdPrintHoja_Click

y con esto se ejecutan las dos "macros" que en realidad se llaman "métodos"
__________________
La verdad es que lo que no quisiera dejar de hacer nunca (a parte de comer) es programar
  #3 (permalink)  
Antiguo 22/11/2010, 17:03
 
Fecha de Ingreso: agosto-2007
Mensajes: 1.945
Antigüedad: 17 años, 3 meses
Puntos: 39
Respuesta: programar 2 macros (codigos) en uno solo para un solo

JoaoM reportandose.
Voy probando ya amigo Monimo, ya vendre a reportarme nuevamente

Si le cambio el nombre de Private Sub cmdPrintHoja_Click() a Sub cmdPrintHoja_Click, tengo que meterlo en un modulo, no dejarlo en el codigo general, eso es lo demenos con tal que funcione pero, (siempre un bendito pero no falta)

Son dos metodos de diferente construccion pero con la misma funcionalidad, si en un solo boton creo que llamara el metodo(codigo) uno tras el otro.

voy hacerlo y ya diré algo
---------------------------------------------------------
Reportandome
este es el error que me dá, dá porque al twerminar un metodo (como lo llamas tu), inicia el otro ( cmdPrintHoja_Click)

error de copilacion

El uso de la palabra clave Me no es valido

Entiendo que al terminar de ejecutar un metodo, inicia el otro pero ¿para que? así me imprime la misma pagina dos veces
Explico:
No es que quiera tener los dos metodos de impresion, NO, lo que yo pedia era y sigue siendo que de los dos metodos hacer uno solo con las opciones de los dos en uno solo.
Agarrar los dos metodos de impresion y hacer UNO SOLO que funcionen las mejores opciones com oson los mensages, esto para la impresion de hoja determinada y solicitada en el imputbox.
Por ejemplo, el primer metodo dá la opcion de decirle que nomre de hoja imprimir pero no me dá la opcion de decirle cuantas copias quiero ni la opco nde configurar la impresora.
Esto es lo que pretendo, de los dos, hacer uno solo.
Terminando este tema voy con otra pregunta sobre una macro que grabé para imprimir, esto para tener las opciones como tamaño de papel, si horizontal o no, ect ect
__________________
Las contraseñas son como la ropa interior: Nunca dejarlas donde la gente pueda verlas
http://i64.tinypic.com/rho40i.jpg

Última edición por JoaoM; 22/11/2010 a las 17:48
  #4 (permalink)  
Antiguo 23/11/2010, 11:34
Avatar de Monimo  
Fecha de Ingreso: noviembre-2007
Ubicación: Mexico Df
Mensajes: 742
Antigüedad: 17 años, 1 mes
Puntos: 69
Respuesta: programar 2 macros (codigos) en uno solo para un solo

Sub Printe_NombreHoja()

On Error GoTo controlError 'Si sucede un error irá a la línea "controlError" (abajo de todo)
Dim estaHoja
estaHoja = ActiveSheet.Name

Dim ImprimirHoja
Dim Mensaje, Titulo
Mensaje = "Ingrese el nombre de la hoja."
Titulo = " Hoja a imprimir"
ImprimirHoja = InputBox(Mensaje, Titulo)
If ImprimirHoja = Empty Then Exit Sub
If ImprimirHoja = "Activa" Then ImprimirHoja = estaHoja
If MsgBox("Se imprimirá la hoja: " & ImprimirHoja & Chr(13) _
& Chr(13) _
& "¿Desea continuar?", vbExclamation + vbDefaultButton1 + vbYesNo, "Por favor confirme la acción") = vbNo Then
Exit Sub
Else
Application.Dialogs(xlDialogPrinterSetup).Show 'Selección y configuración de impresora
Dim Copias As Integer
Solicitar_Copias:
Copias = Val(InputBox("Indica el número de copias a imprimir...", "Copias para imprimir", 1))
If Copias = 0 Then
MsgBox "Usted canceló la acción.", vbInformation, " Impresion cancelada"
Exit Sub
ElseIf Not Copias > 0 Then
MsgBox "Indica un número mayor que cero."
GoTo Solicitar_Copias
End If
Application.ScreenUpdating = False
Worksheets(ImprimirHoja).Activate
ActiveSheet.PrintOut
Worksheets(estaHoja).Activate
Application.ScreenUpdating = True
End If
Exit Sub
controlError:
MsgBox "El nombre de hoja ingresado no existe.", vbExclamation, "Acción cancelada"
Exit Sub
End Sub
__________________
La verdad es que lo que no quisiera dejar de hacer nunca (a parte de comer) es programar
  #5 (permalink)  
Antiguo 23/11/2010, 17:43
 
Fecha de Ingreso: agosto-2007
Mensajes: 1.945
Antigüedad: 17 años, 3 meses
Puntos: 39
Respuesta: programar 2 macros (codigos) en uno solo para un solo

Lo veo muy bien para mi necesidad, le di mucha vuelta para solo poder ubicar dos lineas que me funcionaban, lo demas nanai nanai.
Millon de garcias amigo monimo

Con l oque mensioné en mi post anterior, es esto:
la macro la grabe para de una tener la configuracion de la pagina., esta
---------------------
Cita:
Application.PrintCommunication = False
With ActiveSheet.PageSetup

.LeftHeader = ""
.CenterHeader = ""
.RightHeader = "" ''''''''''''''''''''''''''''''''''''''''''''NO SE LA FUNCION POR TERMINAR EN ""
.LeftFooter = ""
.CenterFooter = ""
.RightFooter = ""
.LeftMargin = Application.InchesToPoints(0.708661417322835)
.RightMargin = Application.InchesToPoints(0.708661417322835)
.TopMargin = Application.InchesToPoints(0.748031496062992)
.BottomMargin = Application.InchesToPoints(0.748031496062992)
.HeaderMargin = Application.InchesToPoints(0.31496062992126)
.FooterMargin = Application.InchesToPoints(0.31496062992126)

.PrintHeadings = False
.PrintGridlines = False
.PrintComments = xlPrintNoComments
.PrintQuality = 300

.CenterHorizontally = False
.CenterVertically = False
.Orientation = xlLandscape
.Draft = False
.PaperSize = xlPaperLetter
.FirstPageNumber = xlAutomatic '''''''''''''''''''''''''''''''''''''''''''''''''' '''No se su funcion
.Order = xlDownThenOver '''''''''''''''''''''''''''''''''''''''''''''''''' '''No se su funcion
.BlackAndWhite = False '''''''''''''''''''''''''''''''''''''''''''''''''' ''' negro y blanco
.Zoom = False '''''''''''''''''''''''''''''''''''''¿?
.FitToPagesWide = 1 ''''''''''''''''''''''''''''''''''''''''''''''tamp oco se la funcion
.FitToPagesTall = False ''''''''''''''''''''''''''''''''''''''''''''''tamp oco se la funcion
.PrintErrors = xlPrintErrorsDisplayed
.OddAndEvenPagesHeaderFooter = False
.DifferentFirstPageHeaderFooter = False
.ScaleWithDocHeaderFooter = True ''''''''''''''''''''''''''''''''''''''''''''''tamp oco se la funcion
.AlignMarginsHeaderFooter = False
.EvenPage.LeftHeader.Text = ""
.EvenPage.CenterHeader.Text = ""
.EvenPage.RightHeader.Text = ""
.EvenPage.LeftFooter.Text = ""
.EvenPage.CenterFooter.Text = ""
.EvenPage.RightFooter.Text = ""
.FirstPage.LeftHeader.Text = ""
.FirstPage.CenterHeader.Text = ""
.FirstPage.RightHeader.Text = ""
.FirstPage.LeftFooter.Text = ""
.FirstPage.CenterFooter.Text = ""
.FirstPage.RightFooter.Text = ""
End With
Application.PrintCommunication = True

ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
IgnorePrintAreas:=False
End Sub
Las de rojo se para que son pero las demas ni pato

En esta configuracion, está una linea que es para "Ajustar todas las columnas en una pagina" pero no se cual es esa linea, esa tambien la marcaria en rojo para meterla y quiero meterla;
Quiero pedirte que me ubiques en el metodo que me dejaste ultimo, las lineas marcadas en rojo más la que no se cual es, y si ves alguna que pueda hacerme falta meterla.

Con esas lineas integradas en el metodo de impresion, talves después eliminaré la linea Application.Dialogs(xlDialogPrinterSetup).Show, talves dije.
A parte de las rojas, las demas no sé para que son ni la funcion de las que terminan en "". False sé yo que tenerlas en el codigo y no tenerlas es lo mismo pero las terminadas en "" no se.
¿Podrias hacerme ese ultimo favor de metermelas en el ultimo codigo? (metodo)

Cuando termine psa la factura de una ves para ver si puedo pagartela o pedirte credito, jejejejejeje
__________________
Las contraseñas son como la ropa interior: Nunca dejarlas donde la gente pueda verlas
http://i64.tinypic.com/rho40i.jpg

Última edición por JoaoM; 23/11/2010 a las 17:50
  #6 (permalink)  
Antiguo 24/11/2010, 09:25
Avatar de Monimo  
Fecha de Ingreso: noviembre-2007
Ubicación: Mexico Df
Mensajes: 742
Antigüedad: 17 años, 1 mes
Puntos: 69
Respuesta: programar 2 macros (codigos) en uno solo para un solo

Sinceramente es muchísimo, me tardaría un poco escribiendo todo lo que es cada una, a demás de que no me las sé de memoria. En cambio, te compartiré la herramienta que yo utilizo cuando necesito alguna propiedad, o quiero saber, así como tú, que significan algunas.

Me tome la molestia de buscar exactamente todas alas prodpiedades que necesitas del objeto que estas utilizando: Activesheet.PageSetup y te comparto el link donde vienen toooodas las propiedades, significado y ejemplo. Espero te sirva:


http://msdn.microsoft.com/en-us/libr...ffice.12).aspx


Por ejemplo si le das click a FirstPageNumber Property, que es una que aparece en tus líneas de la macro grabada te despliega esto:

http://msdn.microsoft.com/en-us/libr...ffice.12).aspx






Y creo que la que buscas es esta: .FitToPagesWide = 1 ajusta todas a una sola pagina.

http://msdn.microsoft.com/en-us/libr...ffice.12).aspx
__________________
La verdad es que lo que no quisiera dejar de hacer nunca (a parte de comer) es programar
  #7 (permalink)  
Antiguo 24/11/2010, 15:57
 
Fecha de Ingreso: agosto-2007
Mensajes: 1.945
Antigüedad: 17 años, 3 meses
Puntos: 39
Respuesta: programar 2 macros (codigos) en uno solo para un solo

Muuuuuuuuuuuuuuuuuchas gracias, eres muy amable y se te agradece, aunque de lejos per ocon muchas gracias.
El anterior codigo (metodo) quedó de rechupete.

Solo una pregunta mas para dejarte tranquilito.
(En que parte (punto de ubicacion) del codigo (metodo) que me diste ultimo, deverian ir esas opciones?
__________________
Las contraseñas son como la ropa interior: Nunca dejarlas donde la gente pueda verlas
http://i64.tinypic.com/rho40i.jpg
  #8 (permalink)  
Antiguo 25/11/2010, 15:48
 
Fecha de Ingreso: agosto-2007
Mensajes: 1.945
Antigüedad: 17 años, 3 meses
Puntos: 39
Respuesta: programar 2 macros (codigos) en uno solo para un solo

Monimo, selecioné las que me interesan, las coloque dentro del codigo.

Es como si nada ubiera echo las lineas no hacen nada, las cambie de punto y nada,
¿en que punto del codigo deverian ir las lineas?

Private Sub cmdPrintHoja_Click()
On Error GoTo controlError 'Si sucede un error irá a la línea "controlError" (abajo de todo)
Dim estaHoja
estaHoja = ActiveSheet.Name
Dim ImprimirHoja
Dim Mensaje, Titulo
Mensaje = "Ingrese el nombre de la hoja a imprimir."
Titulo = " Hoja a imprimir"
ImprimirHoja = InputBox(Mensaje, Titulo)
If ImprimirHoja = Empty Then Exit Sub
If ImprimirHoja = "Activa" Then ImprimirHoja = estaHoja
If MsgBox("Se imprimirá la hoja: " & ImprimirHoja & Chr(13) _
& Chr(13) _
& "¿Desea continuar?", vbExclamation + vbDefaultButton1 + vbYesNo, "Por favor confirme la acción") = vbNo Then
Exit Sub
Else
'----------------------------
Application.PrintCommunication = False
With ActiveSheet.PageSetup
.PrintArea = ""
.PaperSize = xlPaperLetter 'formato carta 'xlPaperA4 A4 oficio pequeño
.Orientation = xlLandscape 'orientacion de la hoja horizontal
.LeftMargin = Application.InchesToPoints(0.708661417322835)
.RightMargin = Application.InchesToPoints(0.708661417322835)
.TopMargin = Application.InchesToPoints(0.748031496062992)
.BottomMargin = Application.InchesToPoints(0.748031496062992)
.HeaderMargin = Application.InchesToPoints(0.31496062992126)
.FooterMargin = Application.InchesToPoints(0.31496062992126)
.PrintHeadings = False 'Imprimir encabezados
.PrintGridlines = False 'líneas de división
.BlackAndWhite = False 'incluir colores o no
.FitToPagesWide = 1 'reduce el tamaño de la hoja (ancho)
.FitToPagesTall = False 'reduce el tamaño de la hoja (alto)
.CenterHorizontally = False 'centrar horizontalmente
.CenterVertically = False 'centrar verticalmente
.Draft = False 'No imprime graficos, true si imprime
.OddAndEvenPagesHeaderFooter = False
.PrintComments = xlPrintNoComments 'imprime comentarios xlPrintSheetEnd
.PrintQuality = 300

.ScaleWithDocHeaderFooter = True ' Devuelve o establece si el encabezado y pie de página debe ampliarse con el documento cuando el tamaño de los cambios del documento
.AlignMarginsHeaderFooter = True ' Devuelve True para Excel para alinear el encabezado y el pie de página con los márgenes establecidos en las opciones de configuración de página

End With
Application.PrintCommunication = True
'----------------------------
''Application.Dialogs(xlDialogPrinterSetup).Show 'Selección y configuración de impresora
Dim Copias As Integer
Solicitar_Copias:
Copias = Val(InputBox("Indica el número de copias a imprimir...", "Copias para imprimir", 1))
If Copias = 0 Then
MsgBox "Usted canceló la acción.", vbInformation, " Impresion cancelada"
Exit Sub
ElseIf Not Copias > 0 Then
MsgBox "Indica un número mayor que cero."
GoTo Solicitar_Copias
End If
Application.ScreenUpdating = False
Worksheets(ImprimirHoja).Activate
ActiveSheet.PrintOut
Worksheets(estaHoja).Activate
Application.ScreenUpdating = True
End If
Exit Sub
controlError:
MsgBox "El nombre de hoja ingresado no existe.", vbExclamation, "Acción cancelada"
Exit Sub
End Sub

te agradesco tu posible ayuda
__________________
Las contraseñas son como la ropa interior: Nunca dejarlas donde la gente pueda verlas
http://i64.tinypic.com/rho40i.jpg
  #9 (permalink)  
Antiguo 25/11/2010, 16:19
Avatar de Monimo  
Fecha de Ingreso: noviembre-2007
Ubicación: Mexico Df
Mensajes: 742
Antigüedad: 17 años, 1 mes
Puntos: 69
Respuesta: programar 2 macros (codigos) en uno solo para un solo

Prueba insertando la líneade color en ese espacio de tu código y me comentas.


If ImprimirHoja = "Activa" Then ImprimirHoja = estaHoja
If MsgBox("Se imprimirá la hoja: " & ImprimirHoja & Chr(13) _
& Chr(13) _
& "¿Desea continuar?", vbExclamation + vbDefaultButton1 + vbYesNo, "Por favor confirme la acción") = vbNo Then
Exit Sub
Else
'----------------------------
Application.PrintCommunication = False
Worksheets(estaHoja).Activate

With ActiveSheet.PageSetup
.PrintArea = ""
__________________
La verdad es que lo que no quisiera dejar de hacer nunca (a parte de comer) es programar
  #10 (permalink)  
Antiguo 25/11/2010, 17:44
 
Fecha de Ingreso: agosto-2007
Mensajes: 1.945
Antigüedad: 17 años, 3 meses
Puntos: 39
Respuesta: programar 2 macros (codigos) en uno solo para un solo

A ver si entendi.

De lpunto donde se encuentra, la corto y pego donde tu dices?

Esto para que no queden dos lineas, una abajo y optra arriba
Una sola arriba no?

Edito:

Hice el cambio, elimine la de abajo y la coloque arriba donde recomendaste.
No, sigue sin cojer las lineas de configuracion de pagina

Ya no doy mas, mi capacidad llegó al fondo.

Fuy cambiando de posicion y probando, unos 20 cambios de posicion y respectivas pruebas y ninguna me arrojó positivo.

No sé donde colocar esta configuracion dentro de este codigo
__________________
Las contraseñas son como la ropa interior: Nunca dejarlas donde la gente pueda verlas
http://i64.tinypic.com/rho40i.jpg

Última edición por JoaoM; 25/11/2010 a las 19:28
  #11 (permalink)  
Antiguo 26/11/2010, 07:56
Avatar de Monimo  
Fecha de Ingreso: noviembre-2007
Ubicación: Mexico Df
Mensajes: 742
Antigüedad: 17 años, 1 mes
Puntos: 69
Respuesta: programar 2 macros (codigos) en uno solo para un solo

No, a lo que me refería es que agregaras esta linea

Worksheets(estaHoja).Activate
antes de :
With ActiveSheet.PageSetup

Como sabes que no hace nada?? Cuando imprimes la hoja no sale como querías? o Porque dices que no hace nada?
__________________
La verdad es que lo que no quisiera dejar de hacer nunca (a parte de comer) es programar
  #12 (permalink)  
Antiguo 26/11/2010, 14:36
 
Fecha de Ingreso: agosto-2007
Mensajes: 1.945
Antigüedad: 17 años, 3 meses
Puntos: 39
Respuesta: programar 2 macros (codigos) en uno solo para un solo

Hice la repeticion, es decir, segun tu, hay que repetir la linea arriba donde recomiendas, acabo de hacerlo pero sigue en nada.

Cuando digo no hace nada, quiero decir que no configura la pagina para Horizontal y papel PaperLetter, imprime pero sin la configuracion que mandan las lineas, no agarra una sola linea.

Estoy haciendo las pruebas con solo estas dos para mas facil manejo, cuando me resulte positivo, agregaré las demas lineas en el punto donde logra hacer la configuracion.

No quiero parecer molestoso al hacer el pedido de ayuda sobre el punto de colocacion para la configuracion de pagina al mandar imprimir.
Esto porque donde se trabaja co nel libro, mas que uno usa la impresora y excel, entonces abria que estar configurando pagina siempre que imprimiera datos
__________________
Las contraseñas son como la ropa interior: Nunca dejarlas donde la gente pueda verlas
http://i64.tinypic.com/rho40i.jpg

Etiquetas: codigos, macros, programación
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:36.