Código VBA en escel 2007

28/11/2007 - 12:57 por Teletreks | Informe spam
Hola a todos y gracias por atender mi pregunta,

Tengo un problemilla con una macro ya que no se cómo hacer que la macro me
seleccione las celdas de una columna que previamente he insertado en un rango
teniendo en cuenta el número de filas del rango (ya que para cada ejecución
de la macro este número será variable). El objetivo final es seleccionar
todas las celdas y pegar en ellas una fórmula que necesito.

Espero haberme explicado con la suficiente claridad (aunque no estoy muy
seguro).

Gracias por anticipado a todos vosotros.

Saludos

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
28/11/2007 - 22:51 | Informe spam
hola, (...) ???

Tengo un problemilla con una macro ya que no se como hacer que la macro me seleccione
las celdas de una columna que previamente he insertado en un rango
teniendo en cuenta el numero de filas del rango
(ya que para cada ejecucion de la macro este numero sera variable).
El objetivo final es seleccionar todas las celdas y pegar en ellas una formula que necesito.
Espero haberme explicado con la suficiente claridad (aunque no estoy muy seguro).



(generalmente) este tipo de re/selecciones se resuelve usando un .Offset (y quizas un .Resize)

seria conveniente si expones el codigo como ya lo estas usando (para poder "ver por donde")
y comentas (de ser necesario) si la insercion de columna/s la hace el codigo o el usuario
(y de pasadita... cual es la formula que necesitas pegar y +/- exactamente "en donde") ;)

saludos,
hector.
Respuesta Responder a este mensaje
#2 Teletreks
29/11/2007 - 08:41 | Informe spam
Hola Hector, como siempre estás dispuesto a darme una mano. Te expongo todo
el código que utilizao para esta macro (esta hecha a base de "retales", por
lo que para un profesional como tú tle resultará un poco "chapucera"...). En
todo caso muchisimas gracias por la ayuda:

El torzo que me falla está en última parte, pero te lo repito para qu no lo
tengas que buscar:

'Insertar columna y copiar en todas las filas la fórmula que obtiene el
saldo acumulado
Columns("P:P").Select
Selection.Insert Shift:=xlToRight
Range("P1").Select
ActiveCell.FormulaR1C1 = "'Saldo"
Range("P2").Select
ActiveCell.FormulaR1C1 = "=SUM(R2C15:RC[-1])"
Selection.Copy
Range(Selection, Selection.End(xlDown)).Select
ActiveCell.Paste



MACRO ENTERA:

Sub ArregloFichas ()
'
' Acceso directo: CTRL+a
'
With Application
.DisplayAlerts = False
.CommandBars.ExecuteMso "TableConvertToRange"
.DisplayAlerts = True
End With
Cells.Select
With Selection.Interior
.Pattern = xlNone
.TintAndShade = 0
.PatternTintAndShade = 0
End With
With Selection.Font
.ColorIndex = xlAutomatic
.TintAndShade = 0
End With
Cells.EntireColumn.AutoFit
Cells.Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
Selection.Borders(xlEdgeLeft).LineStyle = xlNone
Selection.Borders(xlEdgeTop).LineStyle = xlNone
Selection.Borders(xlEdgeBottom).LineStyle = xlNone
Selection.Borders(xlEdgeRight).LineStyle = xlNone
Selection.Borders(xlInsideVertical).LineStyle = xlNone
Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
Rows("1:1").Select
Selection.RowHeight = 28.5
With Selection
.VerticalAlignment = xlTop
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Columns("M:O").Select
Range("O1").Activate
Selection.ColumnWidth = 14
Selection.NumberFormat = "#,##0.00"
Columns("A:J").Select
Range("J1").Activate
With Selection
.HorizontalAlignment = xlGeneral
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
With Selection
.HorizontalAlignment = xlCenter
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Range("M1").Select
Selection.AutoFilter
Range("M2").Select
ActiveWindow.FreezePanes = True
'Seleccionar la celda A1
Range("A1").Select
'Ir hasta la última fila escrita de la columna A
Selection.End(xlDown).Select
'Situarse dos filas más abajo y 10 columnas a la derecha. Para situarse
4 filas más abajo
'y 12 columnas a la derecha poner Offset(4,12)
ActiveCell.Offset(2, 14).Range("A1").Select
'Aplicar la fórmula de los subtotales
ActiveCell.FormulaR1C1 = "=SUBTOTAL(9,R2C:R[-1]C)"
'Seleccionar la celda A1
Range("A1").Select
'Ir hasta la última fila escrita de la columna A
Selection.End(xlDown).Select
'Situarse dos filas más abajo y 10 columnas a la derecha. Para situarse
4 filas más abajo
'y 12 columnas a la derecha poner Offset(4,12)
ActiveCell.Offset(2, 13).Range("A1").Select
'Aplicar la fórmula de los subtotales
ActiveCell.FormulaR1C1 = "=SUBTOTAL(9,R2C:R[-1]C)"
'Seleccionar la celda A1
Range("A1").Select
'Ir hasta la última fila escrita de la columna A
Selection.End(xlDown).Select
'Situarse dos filas más abajo y 10 columnas a la derecha. Para situarse
4 filas más abajo
'y 12 columnas a la derecha poner Offset(4,12)
ActiveCell.Offset(2, 12).Range("A1").Select
'Aplicar la fórmula de los subtotales
ActiveCell.FormulaR1C1 = "=SUBTOTAL(9,R2C:R[-1]C)"
'Insertar columna y copiar en todas las filas la fórmula que obtiene el
saldo acumulado
Columns("P:P").Select
Selection.Insert Shift:=xlToRight
Range("P1").Select
ActiveCell.FormulaR1C1 = "'Saldo"
Range("P2").Select
ActiveCell.FormulaR1C1 = "=SUM(R2C15:RC[-1])"
Selection.Copy
Range(Selection, Selection.End(xlDown)).Select
ActiveCell.Paste
Range("M2").Select
End Sub


La idea de todo lo anterior es desplegar la composición del saldo de
uandeterminada cuenta contable que figura en una Tabla Dinámica y darle un
formato más agradable.


Saludos y muchas gracias



"Teletreks" escribió:

Hola a todos y gracias por atender mi pregunta,

Tengo un problemilla con una macro ya que no se cómo hacer que la macro me
seleccione las celdas de una columna que previamente he insertado en un rango
teniendo en cuenta el número de filas del rango (ya que para cada ejecución
de la macro este número será variable). El objetivo final es seleccionar
todas las celdas y pegar en ellas una fórmula que necesito.

Espero haberme explicado con la suficiente claridad (aunque no estoy muy
seguro).

Gracias por anticipado a todos vosotros.

Saludos
Respuesta Responder a este mensaje
#3 Héctor Miguel
30/11/2007 - 04:20 | Informe spam
hola, (...) ???

Te expongo todo el codigo que utilizao para esta macro (...)
La idea de todo lo anterior es desplegar la composicion del saldo de una determinada cuenta contable
que figura en una Tabla Dinamica y darle un formato mas agradable...



tambien es necesario obtener un ejemplo de la tabla sobre la que aplicas este codigo :D
y que confirmes/rectifiques si los offset que hace el codigo son "estandar" (o sea para toda tabla que obtengas)
ya que la primera vez tienes .Offset(2, 14) la segunda .Offset(2, 13) y en la tercera .Offset(2, 12)

te sugiero "subir" un ejemplo en algun sitio de hospedajes... con la tabla "ANTES Y DESPUES"
(o incluir dos tablas ANTES por si hubiera diferencias "de peso" entre los arreglos de las mismas) -?-

(o ponerlo a disposicion del grupo, para que aumentes tus probabilidades de propuestas y alternativas)
(si no encuentras sitios de hospedaje, mandame un ZIP con dos o tres ejemplos de tabla ANTES y uno de DESPUES)
(solo quita de la direccion que aparece para mi correo el "NO...SPAM...PLS") :))

saludos,
hector.

__ el codigo expuesto __
Sub ArregloFichas ()
With Application
.DisplayAlerts = False
.CommandBars.ExecuteMso "TableConvertToRange"
.DisplayAlerts = True
End With
Cells.Select
With Selection.Interior
.Pattern = xlNone
.TintAndShade = 0
.PatternTintAndShade = 0
End With
With Selection.Font
.ColorIndex = xlAutomatic
.TintAndShade = 0
End With
Cells.EntireColumn.AutoFit
Cells.Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
Selection.Borders(xlEdgeLeft).LineStyle = xlNone
Selection.Borders(xlEdgeTop).LineStyle = xlNone
Selection.Borders(xlEdgeBottom).LineStyle = xlNone
Selection.Borders(xlEdgeRight).LineStyle = xlNone
Selection.Borders(xlInsideVertical).LineStyle = xlNone
Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
Rows("1:1").Select
Selection.RowHeight = 28.5
With Selection
.VerticalAlignment = xlTop
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Columns("m:o").Select
Range("o1").Activate
Selection.ColumnWidth = 14
Selection.NumberFormat = "#,##0.00"
Columns("a:j").Select
Range("j1").Activate
With Selection
.HorizontalAlignment = xlGeneral
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
With Selection
.HorizontalAlignment = xlCenter
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Range("m1").Select
Selection.AutoFilter
Range("m2").Select
ActiveWindow.FreezePanes = True
' Seleccionar la celda A1
Range("a1").Select
' Ir hasta la ultima fila escrita de la columna A
Selection.End(xlDown).Select
' Situarse dos filas mas abajo y 10 columnas a la derecha. Para situarse 4 filas mas abajo y 12 columnas a la derecha poner Offset(4,12)
ActiveCell.Offset(2, 14).Range("a1").Select
' Aplicar la formula de los subtotales
ActiveCell.FormulaR1C1 = "=SUBTOTAL(9,R2C:R[-1]C)"
' Seleccionar la celda A1
Range("a1").Select
' Ir hasta la ultima fila escrita de la columna A
Selection.End(xlDown).Select
' Situarse dos filas mas abajo y 10 columnas a la derecha. Para situarse 4 filas mas abajo y 12 columnas a la derecha poner Offset(4,12)
ActiveCell.Offset(2, 13).Range("a1").Select
' Aplicar la formula de los subtotales
ActiveCell.FormulaR1C1 = "=SUBTOTAL(9,R2C:R[-1]C)"
' Seleccionar la celda A1
Range("a1").Select
' Ir hasta la ultima fila escrita de la columna A
Selection.End(xlDown).Select
' Situarse dos filas mas abajo y 10 columnas a la derecha. Para situarse 4 filas mas abajo y 12 columnas a la derecha poner Offset(4,12)
ActiveCell.Offset(2, 12).Range("a1").Select
' Aplicar la formula de los subtotales
ActiveCell.FormulaR1C1 = "=SUBTOTAL(9,R2C:R[-1]C)"
' Insertar columna y copiar en todas las filas la formula que obtiene el saldo acumulado
Columns("p:p").Select
Selection.Insert Shift:=xlToRight
Range("p1").Select
ActiveCell.FormulaR1C1 = "' Saldo"
Range("p2").Select
ActiveCell.FormulaR1C1 = "=SUM(R2C15:RC[-1])"
Selection.Copy
Range(Selection, Selection.End(xlDown)).Select
ActiveCell.Paste
Range("m2").Select
End Sub
Respuesta Responder a este mensaje
#4 Héctor Miguel
01/12/2007 - 05:26 | Informe spam
hola, Jaume !

Te expongo todo el codigo que utilizao para esta macro (...)
La idea de todo lo anterior es desplegar la composicion del saldo de una determinada cuenta contable
que figura en una Tabla Dinamica y darle un formato mas agradable...





prueba con el siguiente codigo, y si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.

Sub ArregloFichas()
Dim Fx As Integer
Fx = Cells.Find("*", Range("a1"), _
xlValues, xlWhole, xlByRows, xlPrevious).Row
With Application
.ScreenUpdating = False
.DisplayAlerts = False
.CommandBars.ExecuteMso "TableConvertToRange"
.DisplayAlerts = True
End With
Cells.ClearFormats
Columns("d").NumberFormat = "m/d/yy"
Cells.EntireColumn.AutoFit
With Rows("1:1")
.Font.Bold = True
.RowHeight = 28.5
.VerticalAlignment = xlTop
.HorizontalAlignment = xlCenter
End With
With Columns("m:o")
.ColumnWidth = 14
.NumberFormat = "#,##0.00"
End With
With Range("m" & Fx + 2)
.Formula = "=subtotal(9,m2:m" & Fx + 1 & ")"
.AutoFill .Resize(, 3), xlFillDefault
End With
Range("p1").EntireColumn.Insert
Range("p1") = "' Saldo"
With Range("p2")
.Formula = "=sum($o$2:o2)"
.AutoFill .Resize(Fx - 1), xlFillDefault
End With
Range("m2").Select
ActiveWindow.FreezePanes = True
Range("a1").AutoFilter
End Sub
Respuesta Responder a este mensaje
#5 Teletreks
03/12/2007 - 08:24 | Informe spam
Gracias Hector, estoy alucinado, se ejecuta perfectamente y a una velocidad
increible.
Eres un fenómeno, gracias, de verdad.

Saludos.

"Héctor Miguel" escribió:

hola, Jaume !

>> Te expongo todo el codigo que utilizao para esta macro (...)
>> La idea de todo lo anterior es desplegar la composicion del saldo de una determinada cuenta contable
>> que figura en una Tabla Dinamica y darle un formato mas agradable...

prueba con el siguiente codigo, y si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.

Sub ArregloFichas()
Dim Fx As Integer
Fx = Cells.Find("*", Range("a1"), _
xlValues, xlWhole, xlByRows, xlPrevious).Row
With Application
.ScreenUpdating = False
.DisplayAlerts = False
.CommandBars.ExecuteMso "TableConvertToRange"
.DisplayAlerts = True
End With
Cells.ClearFormats
Columns("d").NumberFormat = "m/d/yy"
Cells.EntireColumn.AutoFit
With Rows("1:1")
.Font.Bold = True
.RowHeight = 28.5
.VerticalAlignment = xlTop
.HorizontalAlignment = xlCenter
End With
With Columns("m:o")
.ColumnWidth = 14
.NumberFormat = "#,##0.00"
End With
With Range("m" & Fx + 2)
.Formula = "=subtotal(9,m2:m" & Fx + 1 & ")"
.AutoFill .Resize(, 3), xlFillDefault
End With
Range("p1").EntireColumn.Insert
Range("p1") = "' Saldo"
With Range("p2")
.Formula = "=sum($o$2:o2)"
.AutoFill .Resize(Fx - 1), xlFillDefault
End With
Range("m2").Select
ActiveWindow.FreezePanes = True
Range("a1").AutoFilter
End Sub



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