Como introducir variable en Range()

Tengo un problemilla con un codigo de macro. Mi intención es pedir el valor de una variable por pantalla (mi_variable, ya que si pongo otro nombre no me funciona), la cual será un número, 8 por ejemplo, y que se cree una tabla en el rango desde una celda determinada hasta una celda con una fila fijada y 8 columnas, que es el valor en este caso de la variable introducida por teclado. El código es el siguiente:

Sub Tabla()

Dim i As Integer

mi_variable = Application.InputBox("Introduzca numero de periodos", "MRP")
Range("E10").Select
i = mi_variable
h = ActiveCell.Offset(0, mi_variable).Address
Cells(2, 3).Value = h

ActiveSheet.ListObjects.Add(xlSrcRange, Range(Cells(10, 5), Cells(2, i)), , xlYes).Name = "Table1"
ActiveSheet.ListObjects("Table1").TableStyle = "TableStyleMedium10"

End Sub

Mi problema está en la parte Range(Cells(10, 5), Cells(2, i)).

Gracias de antemano por la ayuda! Puntuaré positivamente!

1 Respuesta

Respuesta
2

Haciendo correr tu macro y habiendo ingresado el nro 8 en el InputBox, en C2 me devuelve la última col a partir de E10. Hasta ahí correcto.

Luego le puse un Msgbox para comprobar qué rango le estás asignando a la tabla y me devuelve $E$2:$H$10 cuando seguramente esperas que sea M10.

Es porque Cells indica primero celda y luego col, a diferencia de Range("E10") donde primero se indica la col.

Entonces: Range(Cells(10, 5), Cells(2, i)). Address dice que será desde fila 10 y col 5 (E10) hasta fila 2 col i (H2)

Espero que estas aclaraciones te sirvan para terminar tu macro, sino indicame qué rango en concreto deseas asignar a tu tabla para pasarte la instrucción correcta... trata de no demorarte 3 meses ;)

PD) En la sección Macros de mi sitio encontrarás otras maneras de ubicar rangos.

Hola Elsa,

he leído tus aclaraciones pero no termino de entenderlo. En el código estoy poniendo la entrada del InputBox para que ese sea el número de columnas que tiene la tabla.

El rango concreto que necesito es, desde una celda cualquiera, crear una tabla de N columnas, donde N es el número que introduces en el InputBox, y 7 filas exactas, osea, el único tamaño que varía en la tabla es el de el número de columnas.

Muchas gracias por tu ayuda!

Con estas instrucciones estás colocando en C2, cuál es la última columna a partir de E10 según la cantidad solicitada.

mi_variable = val(Application.InputBox("Introduzca numero de periodos", "MRP"))
Range("E10").Select
Cells(2, 3).Value = Range("E10").Offset(0, mi_variable).Address

Es decir que si ingresas 8, desde E10 la última col es M ... entonces en C2 aparecerá $M$10. Hasta aquí correcto...

Pero no es necesario guardarlo en otra celda salvo que lo necesites para alguna otra tarea.

Para 'redimensionar' un rango podemos utilizar la función RESIZE . Y para que sean solamente 7 filas desde E10 hacia abajo y sería:

Sub consulta()
'x Elsamatilde
'celda origen
Range("E10").Select
'solicita cant de col, convierte a valor el dato del inputbox
mi_variable = Val(Application.InputBox("Introduzca numero de periodos", "MRP"))
'cant de filas = 7
rgo = Range("E10").Resize(7, mi_variable).Address
'se crea la tabla
ActiveSheet.ListObjects.Add(xlSrcRange, Range(rgo), , xlYes).Name = "Table1"
ActiveSheet.ListObjects("Table1").TableStyle = "TableStyleMedium10"
End Sub

Lo que dará por resultado la tabla de la imagen:

Sdos. Si todo quedó aclaraco no olvides valorar la respuesta.

Elsa

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas