Pequeña ayuda con un par de macros

12/05/2005 - 11:18 por Mukelemulembe | Informe spam
Hola a todos!

Tengo un par de macros que les faltan un par de chorraditas pero no sé
cómo se hacen.

En esta primera macro formateo los bordes del área seleccionada con un
formato personalizado pero si dicha área no tiene más de una fila y una
columna me sale un mensaje de error. ¿Qué tengo que variar para que no
aparezca?

Sub Bordes()
'
' Bordes Macro
' Macro grabada el 10/05/2005 por usuario
'
' Acceso directo: CTRL+a
'
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlDouble
.Weight = xlThick
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlDouble
.Weight = xlThick
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlDouble
.Weight = xlThick
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlDouble
.Weight = xlThick
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlInsideVertical)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.Weight = xlHairline
.ColorIndex = xlAutomatic
End With
End Sub

Esta segunda macro sirve para eliminar las columnas que tengan valor cero
de la celda seleccionada de un autofiltro. La cuestión es que cada vez que
la utilizo el control+Fin se me queda donde estaba antes de eliminar las
filas. ¿Qué tengo que cambiar para que el Crtl+Fin se quede donde acaba la
hoja?

Sub LimpiarFilasCero()
'
' LimpiarFilasCero Macro
' Macro grabada el 10/05/2005 por usuario

' Acceso directo: CTRL+l
'
Selection.AutoFilter Field:=2, Criteria1:="0"
Range(Selection, Selection.End(xlDown)).Select
Selection.EntireRow.Delete
ActiveCell.Offset(0, -1).Range("A1").Select
Selection.End(xlDown).Select
ActiveCell.Offset(2, 0).Range("A1").Select
Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
Selection.EntireRow.Delete
Selection.AutoFilter Field:=2
ActiveCell.SpecialCells(xlLastCell).Select
End Sub

Gracias de antemano y un saludo,

Joel.

Preguntas similare

Leer las respuestas

#1 Fernando Arroyo
12/05/2005 - 11:37 | Informe spam
"Joel" escribió en el mensaje news:%
Hola a todos!

Tengo un par de macros que les faltan un par de chorraditas pero no sé
cómo se hacen.

En esta primera macro formateo los bordes del área seleccionada con un
formato personalizado pero si dicha área no tiene más de una fila y una
columna me sale un mensaje de error. ¿Qué tengo que variar para que no
aparezca?

Sub Bordes()
'
' Bordes Macro
' Macro grabada el 10/05/2005 por usuario
'
' Acceso directo: CTRL+a
'
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlDouble
.Weight = xlThick
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlDouble
.Weight = xlThick
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlDouble
.Weight = xlThick
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlDouble
.Weight = xlThick
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlInsideVertical)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.Weight = xlHairline
.ColorIndex = xlAutomatic
End With
End Sub




Mira si te sirve:

Sub Bordes()
'
' Bordes Macro
' Macro grabada el 10/05/2005 por usuario
'
' Acceso directo: CTRL+a
'
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlDouble
.Weight = xlThick
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlDouble
.Weight = xlThick
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlDouble
.Weight = xlThick
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlDouble
.Weight = xlThick
.ColorIndex = xlAutomatic
End With
If Selection.Columns.Count > 1 Then
With Selection.Borders(xlInsideVertical)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
End If
If Selection.Rows.Count > 1 Then
With Selection.Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.Weight = xlHairline
.ColorIndex = xlAutomatic
End With
End If
End Sub


Esta segunda macro sirve para eliminar las columnas que tengan valor cero
de la celda seleccionada de un autofiltro. La cuestión es que cada vez que
la utilizo el control+Fin se me queda donde estaba antes de eliminar las
filas. ¿Qué tengo que cambiar para que el Crtl+Fin se quede donde acaba la
hoja?

Sub LimpiarFilasCero()
'
' LimpiarFilasCero Macro
' Macro grabada el 10/05/2005 por usuario

' Acceso directo: CTRL+l
'
Selection.AutoFilter Field:=2, Criteria1:="0"
Range(Selection, Selection.End(xlDown)).Select
Selection.EntireRow.Delete
ActiveCell.Offset(0, -1).Range("A1").Select
Selection.End(xlDown).Select
ActiveCell.Offset(2, 0).Range("A1").Select
Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
Selection.EntireRow.Delete
Selection.AutoFilter Field:=2
ActiveCell.SpecialCells(xlLastCell).Select
End Sub

Gracias de antemano y un saludo,

Joel.




No estoy completamente seguro (no puedo probarlo porque no sé cómo están dispuestos los datos en la hoja), pero prueba poniendo la instrucción

ActiveSheet.UsedRange

justo antes de

ActiveCell.SpecialCells(xlLastCell).Select

Un saludo.


Fernando Arroyo
MS MVP - Excel
Respuesta Responder a este mensaje
#2 KL
12/05/2005 - 15:47 | Informe spam
Hola Joel,

Al igual que Fernando desconozco la situacion real a la que tre enfrentas,
pero habiendo analizado tu macro (el segundo) no se si te valdria el que te
pongo a continuacion como un pelin menos complicado:

Sub LimpiarFilasCero()
With Selection.CurrentRegion
For i = .Rows.Count To 2 Step -1
If .Cells(i, 2).Value = 0 Then _
.Rows(i).Delete
Next
.Cells(.Rows.Count, .Columns.Count).Select
End With
End Sub

Saludos,
KL

"Joel" wrote in message
news:%
Hola a todos!

Tengo un par de macros que les faltan un par de chorraditas pero no sé
cómo se hacen.

En esta primera macro formateo los bordes del área seleccionada con un
formato personalizado pero si dicha área no tiene más de una fila y una
columna me sale un mensaje de error. ¿Qué tengo que variar para que no
aparezca?

Sub Bordes()
'
' Bordes Macro
' Macro grabada el 10/05/2005 por usuario
'
' Acceso directo: CTRL+a
'
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlDouble
.Weight = xlThick
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlDouble
.Weight = xlThick
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlDouble
.Weight = xlThick
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlDouble
.Weight = xlThick
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlInsideVertical)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.Weight = xlHairline
.ColorIndex = xlAutomatic
End With
End Sub

Esta segunda macro sirve para eliminar las columnas que tengan valor cero
de la celda seleccionada de un autofiltro. La cuestión es que cada vez que
la utilizo el control+Fin se me queda donde estaba antes de eliminar las
filas. ¿Qué tengo que cambiar para que el Crtl+Fin se quede donde acaba la
hoja?

Sub LimpiarFilasCero()
'
' LimpiarFilasCero Macro
' Macro grabada el 10/05/2005 por usuario

' Acceso directo: CTRL+l
'
Selection.AutoFilter Field:=2, Criteria1:="0"
Range(Selection, Selection.End(xlDown)).Select
Selection.EntireRow.Delete
ActiveCell.Offset(0, -1).Range("A1").Select
Selection.End(xlDown).Select
ActiveCell.Offset(2, 0).Range("A1").Select
Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
Selection.EntireRow.Delete
Selection.AutoFilter Field:=2
ActiveCell.SpecialCells(xlLastCell).Select
End Sub

Gracias de antemano y un saludo,

Joel.

Respuesta Responder a este mensaje
#3 KL
12/05/2005 - 16:06 | Informe spam
Hola Joel,

Respecto al primer macro (Bordes), el problema esta en que el codigo esta
intentando formatear los bordes externos (el perimetro del rango) y los
internos (los que separan las celdas dentro del rango). Cuando se trata de
una fila - no existen Borders(xlInsideHorizontal), en el caso de una clumna
no existen Borders(xlInsideVertical), y en el caso de una celda no existe
ninguno de los dos. Obviamente, al intentar de formatear los bordes
inexistentes Excel se queja mediante el mensaje de error. Para evitar el
error podrias anadir una sentencia condicional o simplemete ignorar el error
mediante la instruccion On Error Resume Next. Te pongo el codigo a
continuacion.

Saludos,
KL

'--Inicio Codigo
Sub Bordes()
With Selection
.Borders(xlDiagonalDown).LineStyle = xlNone
.Borders(xlDiagonalUp).LineStyle = xlNone
With .Borders(xlEdgeLeft)
.LineStyle = xlDouble
.Weight = xlThick
.ColorIndex = xlAutomatic
End With
With .Borders(xlEdgeTop)
.LineStyle = xlDouble
.Weight = xlThick
.ColorIndex = xlAutomatic
End With
With .Borders(xlEdgeBottom)
.LineStyle = xlDouble
.Weight = xlThick
.ColorIndex = xlAutomatic
End With
With .Borders(xlEdgeRight)
.LineStyle = xlDouble
.Weight = xlThick
.ColorIndex = xlAutomatic
End With
On Error Resume Next
With .Borders(xlInsideVertical)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With .Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.Weight = xlHairline
.ColorIndex = xlAutomatic
End With
End With
End Sub
'--Fin Codigo
Respuesta Responder a este mensaje
#4 Mukelemulembe
12/05/2005 - 18:12 | Informe spam
Gracias Fernando y KL!

La de los bordes funciona ahora perfectamente. La otra no. De hecho he
pensado un poco y sería mejor crear una macro que pusiera el Crlt+Fin al
sitio. Es decir, para ajustar el crtl+fin lo que hago ahora es presionar
Alt+F11, Ctrl+G y escribo ? activesheet.usedrange.address (de hecho lo
saqué de este foro). Pero la verdad es que lo tengo que hacer muchas veces
y sería mucho más práctico hacerlo con una macro. ¿Sabéis cómo se puede
hacer? Gracias otra vez.
Respuesta Responder a este mensaje
#5 KL
12/05/2005 - 19:31 | Informe spam
Hola Joel,

Cuando dices "La otra no" funciona ?a que te refieres exactamente? ?Algun
error? ?Cual? ?O es que el resultado no es el esperado?

Saludos,
KL
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida