Imprimir filas determinadas

02/06/2007 - 23:25 por José María | Informe spam
En esta ocasión quería preguntaros una cosilla que creo os resultará muy
sencilla, pero que yo o consigo sacarla.
Veréis, en una hoja tengo 5 columnas A, B, C, D, E y F ocupadas normalmente
hasta el número 40 o 50.
En la columna F esta anotado si esta "pagado" o "Pendiente" y quisiera hacer
mediante una macro una selección de los pendientes para poder imprimirla
¿podéis decirme como se hace esto? Gracias
José María

Preguntas similare

Leer las respuestas

#11 Carmen
12/06/2007 - 20:21 | Informe spam
Por favor, hacer un pequeño esfuerzo y ayudarme a zanjar este problema.
Solo quiero que en una hoja en la que tengo ocupado las columnas A hasta G
poniendo los títulos en la primera fila, y en A2, A3, A4 etc... van numeros
sucesivos: 1, 2, 3, 4, 5, 6, 7... etc que se van poniendo
automáticamente cuanto meto datos.
Quisiera imprimir un rango determinado en función de la columna A.
Por ejemplo quisiera que me preguntara "Desde" "Hasta" y si le pongo desde
la 1 a la 15 me imprima esos datos de la hoja.
Muchas gracias
Carmen
Respuesta Responder a este mensaje
#12 Ivan
12/06/2007 - 21:04 | Informe spam
On 12 jun, 20:21, "Carmen" <CJARROBAhotmail.com> wrote:
Por favor, hacer un pequeño esfuerzo y ayudarme a zanjar este problema.
Solo quiero que en una hoja en la que tengo ocupado las columnas A hasta G
poniendo los títulos en la primera fila, y en A2, A3, A4 etc... van numeros
sucesivos: 1, 2, 3, 4, 5, 6, 7... etc que se van poniendo
automáticamente cuanto meto datos.
Quisiera imprimir un rango determinado en función de la columna A.
Por ejemplo quisiera que me preguntara "Desde" "Hasta" y si le pongo desde
la 1 a la 15 me imprima esos datos de la hoja.
Muchas gracias
Carmen



hola Carmen,

¿has probado la propuesta? hace lo que pides

un saludo
Ivan
Respuesta Responder a este mensaje
#13 Carmen
12/06/2007 - 22:37 | Informe spam
Hola Iván, si la probé, pero me imprime solo los encabezados pero no el
contenido y no me pregunta los recibos que quiero imprimir, solo crea una
página nueva y pone los encabezados, seguro que es por qué hago algo mal,
pero no sé cual es.
Si puedes ayudarme te lo agradecería, pues es ya lo único que me queda para
terminar ese trabajo, pero ya ves que soy incapaz
Muchas gracias Iván, y espero no te molestará que te enviara el adjunto sin
permiso previo.
Saludos
Carmen
Respuesta Responder a este mensaje
#14 Ivan
13/06/2007 - 17:57 | Informe spam
hol Carmen,

.., si la probé, pero me imprime solo los encabezados pero no el contenido y no me pregunta los recibos que quiero
imprimir, solo crea una página nueva y pone los encabezados,



creo que no hablamos del mismo codigo. Echale un ojo a los puntos 9, 10 y 11 de 'esta' conversacion:
http://tinyurl.com/35xk9d

El codigo del punto 10 hace lo que pides, a falta del mensaje, que entraba dentro e las adaptaciones que pudieras
necesitar. (y por supuesto adaptandolo a la situacion real, no a la planteada en el 1er mensaje)

de todas formas, si quieres, y sigues 'EXACTAMENTE' los pasos que te comento a continuacion, puedes probar esta otra
propuesta, que mas o menos te dara (casi) todo el trabajo hecho:

Requisitos ej.:

1º) crea un nuevo libro en blanco y pega en la hoja 1 la lista que quieres filtrar, con los datos(solo) de la columna
A a la G, incluidas. Los titulos en la 1ª fila (1) y los datos empezando en la 2ª(2). En la columna A tienen que ir los
numeros que quieres comparar.

2ª) ahora cierra todos los demas libros que tengas abiertos (excepto el recien creado) para evitar posibles lios. Con
el libro que 'hay' abierto (el nuevo)

a) llama a la Hoja1 "DatosClientes" (tal cual te lo he escrito)

b) abre el editor de VB (alt+F11) y en la ventana 'Explorador de proyectos' (si no esta abierta pulsa Ctrl+R) haz
doble click en 'ThisWorkbook' del proyecto del libro (seguramente pondra algo asi: VBProject(Libro1) ) para abrir el
modulo del libro. En este modulo que se abre copia y pega estos codigos: (si te aparece Option Explicit borralo (o
sobreescribelo) primero):


''' pega desde aqui: (en moduo ThisWorkbook)
Option Explicit
'*******************************************************************
' evitamos, en caso de cancelar el cierre, que nos elimine la barra
' con el boton de ver el formulario'
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim msj As Integer
With ThisWorkbook
msj = MsgBox("¿Quieres guardar los cambios efectuados en " & _
.Name & "?", vbExclamation + vbYesNoCancel)
Select Case msj
Case vbYes
.Save
EliminarBarra
Case vbNo
EliminarBarra
.Saved = True
Case Else
Cancel = True
End Select
End With
End Sub
'********************************************************************************
' nos aseguramos al añadir la hoja oculta que los nombres de las otras son adecuados,
' en otro caso nos arriegamos a un error si se han modificado estos en la interfaz
Private Sub Workbook_NewSheet(ByVal Sh As Object)
If Hoja1.Name <> B_Dat Then Hoja1.Name = B_Dat
End Sub
'*********************************************************************************
' cargamos el boton de ver el formulario en una barra flotante, y aunque
' no hace verdadera falta (mientras se haga en NewSheet), se pueden desmarcar
' los comentarios para poner el nombre de las hojas si se han modificado
Private Sub Workbook_Open()
CargarBoton
If Hoja1.Name <> B_Dat Then Hoja1.Name = B_Dat
End Sub
'*********************************************************************************
' para mostrar/ocultar la barra(boton) al des/activar el libro
Private Sub Workbook_WindowActivate(ByVal Wn As Window)
On Error Resume Next
With Application.CommandBars("MiBarra")
.Enabled = True
.Visible = True
End With
End Sub
Private Sub Workbook_WindowDeactivate(ByVal Wn As Window)
On Error Resume Next
Application.CommandBars("MiBarra").Visible = False
End Sub
''' Pega hasta aqui (en thisworkbook)

c) siguiendo en el editor de VBa ve al menu 'Insertar' y elige 'Modulo' (a secas, o quizas ponga Standard, Normal, etc.
¡¡¡Pero NO 'Modulolo de clase'!!!)

d) en el modulo que se abre copia / pega esto (lo mismo de antes si tienes option explicit)

'''pega desde aqui (Modulo normal)
Option Explicit
Public Const B_Dat As String = "DatosClientes"
Public Barra As CommandBar, Boton As CommandBarButton
'**********manipulando Barras *************
'-
Sub CargarBoton()
EliminarBarra
Set Barra = Application.CommandBars.Add("MiBarra", _
msoBarFloating, , True)
With Barra
Set Boton = .Controls.Add(msoControlButton, , , , True)
With Boton
.FaceId = 209
.Caption = "Buscar Registros"
.Style = msoButtonIconAndCaption
.OnAction = "verFormulario"
End With
.Enabled = True
.Visible = True
.Top = 163
.Left = 814
End With
End Sub
'
Sub EliminarBarra()
On Error Resume Next
Application.CommandBars("MiBarra").Delete
End Sub
'-
Sub verFormulario()
UserForm1.Show
End Sub
''' pega hastta aqui (Modulo normal)

e) vuelve al menu 'Insertar' y elige 'Userform'

f) ahora, muy despacito, y asegurandote de que el resultado es el correcto ve insertando en el userform de uno en uno
(clic en el control respectivo del 'Cuadro de herramientas' (si no esta visible activalo en el menu 'Ver') y click
dentro del area del formulario) los siguientes controles

NOTA<no hace falta que los coloques. Da lo mismo si estan unos encima de otros, solo asegurate de poner todos y de que
queden dentro del formulario>:
NOTA<no les cambies el nombre, deja el que traen por defecto, pero por si te equivocas, asegurate de que al final quedan
como los pongo>
Controles:

1.-) 4 Label ( 'Etiqueta') nombres Label1, Label2, Label3 y Label4
2.-) 2 TextBox ('Cuadro de texto') nombres TextBox1 y TextBox2
3.-) 1 CheckBox ('Casilla de verificacion') nombre CheckBox1
4,-) 4 CommandButton ('Boton de comando') nombres CommandButton1, CommandButton2, CommandButton3 y CommandButton4

g) ahora pulsa F7 para abrir el modulo del formulario y en el pega esto (ya sabes lo de option expl)

'''pega desde aqui (modulo del formulario
Option Explicit
Private Sub CommandButton1_Click()
Filtrar_Intervalo
End Sub
Private Sub CommandButton2_Click()
With Worksheets(B_Dat)
If .[ea2] = "" Then MsgBox "No hay coincidencias": Exit Sub
Me.Hide
.[ea:eg].PrintPreview
Me.Show
End With
End Sub
Private Sub CommandButton3_Click()
With Worksheets(B_Dat)
If .[ea2] = "" Then MsgBox "No hay coincidencias": Exit Sub
.[ea:eg].PrintOut
End With
End Sub
Private Sub CommandButton4_Click()
Worksheets(B_Dat).[dy:eg].Clear
Unload Me
End Sub
Sub Filtrar_Intervalo()
Dim Min As Long, Max As Long, Criterio As String, nombreHj As String
If TextBox1 <> "" Then Min = CLng(TextBox1)
If TextBox2 <> "" Then Max = CLng(TextBox2)
Select Case Min + Max
Case Is = 0
If MsgBox("No has introducido ningun criterio de busqueda." & vbCr & _
"¿Quieres volver a intentarlo?", vbQuestion + vbYesNo, _
"Faltan datos") = vbYes Then TextBox1.SetFocus Else _
Unload Me
Exit Sub
Case Else
If Max > 0 Then Criterio = "=and(a2>=" & Min & ",a2<=" & Max & ")" Else _
Criterio = "=(a2>=" & Min & ")"
End Select
With ThisWorkbook.Worksheets(B_Dat)
On Error Resume Next
.ShowAllData
On Error GoTo 0
If .AutoFilterMode Then .AutoFilterMode = False
.[dy1:dy2].ClearContents: .[ea:eg].Clear
.[dy2].Formula = Criterio
.Range("a1:g" & .[a65536].End(xlUp).Row) _
.AdvancedFilter xlFilterCopy, .[dy1:dy2], .[ea1:eg1], False
.[dy2].ClearContents
If CheckBox1 Then
With ThisWorkbook
.Worksheets.Add after:=.Worksheets(.Worksheets.Count)
End With
.[ea:eg].Copy [a1]
End If
Label4 = .[ea65536].End(xlUp).Row - 1
End With
End Sub
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If Not (KeyAscii >= 48 And KeyAscii <= 57) Then KeyAscii = 0
End Sub
Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If Not (KeyAscii >= 48 And KeyAscii <= 57) Then KeyAscii = 0
End Sub
Sub UbicarControles()
Dim ct As Control, n As Byte, Captions
With Me
.Height = 177: .Width = 330: .Caption = "Buscar entre dos cifras"
For Each ct In .Controls
With ct
.Height = 22: .Font.Size = 10
n = Val(Right(.Name, 1))
Select Case .Name
Case "Label1", "Label2", "Label3", "CheckBox1"
.Left = 18
If .Name <> "CheckBox1" Then
.Width = 88: .Top = 18 + (33 * (n - 1))
Captions = Array("Buscar desde el nº:", "Buscar hasta el nº:", _
"Nº de coincidencias:")
.Caption = Captions(n - 1)
If n = 1 Then .Accelerator = "d": .TabIndex = 0
If n = 2 Then .Accelerator = "h": .TabIndex = 2
Else
.Width = 144: .TabIndex = 4: .Caption = _
"Guardar copia en nueva hoja": .Accelerator = "G": .Top = 117
End If
Case "TextBox1", "TextBox2", "Label4"
.Left = 118: .Width = 108: .TextAlign = 2
If .Name = "TextBox1" Then .Top = 18: .TabIndex = 1
If .Name = "TextBox2" Then .Top = 51: .TabIndex = 3
If .Name = "Label4" Then .Caption = "0": .Top = 84: _
.SpecialEffect = 2: .TabIndex = 10
Case Else
.Left = 240: .Width = 72: n = Val(Right(.Name, 1))
.TabIndex = n + 4: .Top = 18 + (33 * (n - 1))
Captions = Array("Buscar", "Vista previa", "Imprimir", "Salir")
.Caption = Captions(n - 1): .Accelerator = Left(Captions(n - 1), 1)
End Select
End With
Next
End With
End Sub
Private Sub UserForm_Initialize()
UbicarControles
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode <> 1 Then Cancel = 1: _
MsgBox "Pulsa Salir para cerrar el formulario": _
CommandButton4.SetFocus
End Sub
''pega hasta aqui (modulo del formulario)

OJO: ten cuidado con los saltos de linea (no los que van en el codigo que se forman con unh espacio y un guion bajo) que
se puedan producir en el editor del foro.
Revisa si alguna parte se te ha puesto en rojo y trata de arreglarlo con logica

conclusion: ahora puedes guardar el libro con el nombre que quieras. Cierralo y vuelve a abrirlo y empieza a practicar.
A ver que tal

un saludo
Ivan

PD: comentas el resultado??

PPD:
espero no te molestará que te enviara el adjunto sin permiso previo.



no, no me molesta, pero dentro de lo posible creo que lo iniciado en el foro, no esta de mas acabarlo en el foro (
aparte de los problemas de tiempo y posibles prioridades)
Respuesta Responder a este mensaje
#15 Ivan
13/06/2007 - 21:49 | Informe spam
hola de nuevo,

no hagas demasiado caso a los comentarios del modulo de ThisWorkbook,
eran de otro archivo y se me ha pasado cambiarlos/actualizarlos/
eliminarlos.

y si has leido el mensaje y no te importa, lo comentas, porque por lo
que se ve, debe de haber unos cuantos que no has visto y que quizas no
te aparezcan por eso de las 'magias' del servidor.

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