Como poner bordes a celdas con macro

Talvez alguien de ustedes puede ayudarme
necesito una macro que me ayude a poner bordes a celdas, pero quiero que solo a las filas activas.
Tengo una lista en una hoja llamada datos y utilizo un filtro para extraer cierta informacion de esa lista y mandarla a otra hoja llamada datosm, el asunto es que cuando mando esa informacion con el filtro me aparcen los bordes en todas las filas de la hoja y talvez sole he filtrado tres o cuatro o una fila o mas y quiero que solo me aparezcan bordes en las filas filtradas y en el resto no.
Esta es el codigo que utilizo para filtrar:
Private Sub TextBox1_Change()
'activamos la hoja base
Sheets("datos").Activate
'nos posicionamos en la celda a1
Sheets("datos").Range("a1").Select
'limpiamos el listbox
ListBox1.RowSource = Empty
'limpiamos la hoja3 donde se genera el filtro avanzado
Sheets("datosm").Range("A:x").ClearContents
'limpiamos los campos de busqueda del filtro avanzado
Sheets("datos").Range("z2:aw2").ClearContents
'le damos el ancho a las 3 columnas del listbox
'ListBox1.ColumnWidths = "175 pt;118 pt;21 pt;25 pt;50 pt;36 pt;50 pt;50 pt"
'en la celda e2 se transfiere lo que se escribe en el textbox1 en este caso el codigo
'los asteriscos entre comillas son para que busque por cualquier letra que se ingrese
'y los signos & son para unir el asterisco con el valor del textbox
Sheets("datos").Range("z2") = "*" & TextBox1 & "*"
'aqui realizamos el filtro avanzado
Range("a1:x400").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range( _
"z1:z2"), copytorange:=Sheets("datosm").Range("a1"), Unique:=False
'mostramos el resultado del filtro avanzado en el textbox
ListBox1.RowSource = "datosm!a2:x400"
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
UserForm1.Show
'ListBox1.List (ListBox1.ListIndex) this returns the item in the listindex where double clik has happened.'
End Sub

1 respuesta

Respuesta
3

Te anexo la macro actualizada

Private Sub TextBox1_Change()
    'activamos la hoja base
    Sheets("datos"). Activate
    'nos posicionamos en la celda a1
    Sheets("datos").Range("a1").Select
    'limpiamos el listbox
    ListBox1.RowSource = Empty
    'limpiamos la hoja3 donde se genera el filtro avanzado
    Sheets("datosm").Range("A:x").ClearContents
    'limpiamos los campos de busqueda del filtro avanzado
    Sheets("datos").Range("z2:aw2").ClearContents
    'le damos el ancho a las 3 columnas del listbox
    'ListBox1.ColumnWidths = "175 pt;118 pt;21 pt;25 pt;50 pt;36 pt;50 pt;50 pt"
    'en la celda e2 se transfiere lo que se escribe en el textbox1 en este caso el codigo
 'los asteriscos entre comillas son para que busque por cualquier letra que se ingrese
 'y los signos & son para unir el asterisco con el valor del textbox
    Sheets("datos").Range("z2") = "*" & TextBox1 & "*"
    'aqui realizamos el filtro avanzado
    Range("a1:x400").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range( _
    "z1:z2"), copytorange:=Sheets("datosm").Range("a1"), Unique:=False
    '
    'Act.Por.Dante Amor
    With Sheets("datosm").Cells
        .Borders(xlEdgeLeft).LineStyle = xlNone
        .Borders(xlEdgeTop).LineStyle = xlNone
        .Borders(xlEdgeBottom).LineStyle = xlNone
        .Borders(xlEdgeRight).LineStyle = xlNone
        .Borders(xlInsideVertical).LineStyle = xlNone
        .Borders(xlInsideHorizontal).LineStyle = xlNone
    End With
    With Sheets("datosm").UsedRange
        .Borders(xlEdgeLeft).LineStyle = xlContinuous
        .Borders(xlEdgeTop).LineStyle = xlContinuous
        .Borders(xlEdgeBottom).LineStyle = xlContinuous
        .Borders(xlEdgeRight).LineStyle = xlContinuous
        .Borders(xlInsideVertical).LineStyle = xlContinuous
        .Borders(xlInsideHorizontal).LineStyle = xlContinuous
    End With
    '
    'mostramos el resultado del filtro avanzado en el textbox
    ListBox1.RowSource = "datosm!a2:x400"
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    UserForm1.Show
    'ListBox1.List (ListBox1.ListIndex) this returns the item in the listindex where double clik has happened.'
End Sub

Saludos.Dante Amor

gracias, pero no es exactamente lo que pretendo, con lo que agregaste todas las filas se llenan de bordes aunque solo haya filtrado tres o cuatro o una, la idea es que si solo 1 fila contiene datos en la hoja datosm(que es la que recibe el filtro), como escribi arriba solo deseo que las filas que se han filtrado queden con bordes y el resto no.

no se si se puede

Ya no entendí.

¿En dónde quieres los bordes en la hoja datos o en la hoja datosm?

Puedes poner una imagen de cómo quieres que se vea.

Hola

La hoja de recepción es datosm, y la idea es que solo lo que es filtrado quede con bordes. Como ves en la imagen los bordes están en toda la hoja pero la idea es que solo donde hay información hayan bordes, en la imagen hay 7 líneas con información así que solo ahí deberían haber bordes, además la cantidad de líneas con info puede variar de acuerdo al filtro. La hoja datosm es la que recibe el filtro de la hoja datos que es donde esta la tabla.

ojala se pueda hacer. saludos

Cambia en la macro que te envié, esto

Sheets("datosm").Range("A:x"). ClearContents

Por esto

Sheets("datosm"). Cells. Clear

Vuelve a probar

ok, funciona

se te agradece, bendiciones

Lo que sucedió, es que la instrucción que tenías en tu macro no estaba limpiando las líneas.

Al final de mi respuesta dice: “Es una buena respuesta” y puedes seleccionar una de 3 opciones:

  • Excelente
  • Si
  • No

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas