Tema Objeto Range

10/11/2005 - 19:12 por César G. | Informe spam
Saludos a tod@s

Espero que esten bien, bueno, la pregunta es la siguiente

Tengo que pegar varios datos en una plantilla desde un documento principal,
el tema es que al intentar hacer el famosisimo "Copy - Paste " me genera una
serie de errores, Aqui les mando el codigo de la macro que utilizó para
saber si pueden, por favor, explicarme como tengo que declarar el objeto
para poder manejar rangos de celdas y poder seleccionarlos

Dim Plantilla As Workbook
Dim Tabular As Worksheet

Set Plantilla = Application.Workbooks.Add(Ruta)

'Set Tabular = Application.Windows("Francia.xls")
Set Tabular = Application.Workbooks("Francia.xls").Worksheets(1)


For x = 1 To 9
Tabular.Activate

'Tabular.Range(Cells(121, x + 1), Cells(124, x + 1)).Select


'Tabular.Worksheets("Francia").Range(Cells(121, x + 1), Cells(124, x +
1)).Select
'Tabular.Range(Cells(121, x + 1), Cells(124, x + 1)).Select

'Range(Cells(121, x + 1), Cells(124, x + 1)).Select


Cualquiera de estos metodos para seleccionar el rango de B121:B124 me
devolvia los errores 400 o bien, el error 1004 " Error en el método Range de
Objeto '_Worksheet'", ... en fin,

aqui es donde intento pegar la selección,

Selection.Copy
Plantilla.Worksheets(2).Activate

Cells(8, 3).Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=
_
False, Transpose:=True
Next x

El "metodo" que me funcionó fue, el siguiente

Tabular.Range("B" & 121 & ":B" & 124).Select

Aunque me gustaría saber cual es la forma correcta de hacer esta seleccion
con la forma
range(cells(row, col), cells(row, col)).select

Agradeciendo de antemano su atención a este mensaje, espero sus comentarios

César Galicia
Soporte Técnico
TNS-Gallup

Preguntas similare

Leer las respuestas

#1 Alejandro Garrammone
11/11/2005 - 03:47 | Informe spam
una forma básica sería la siguiente:

Sheets("Sheet1").Select
Range("B121:B124").Select
Selection.Copy
Sheets("Sheet2").Select
Range("B121:B124").Select
ActiveSheet.Paste
Application.CutCopyMode = False

si quieres concatenar cosas en una variable para utilizarla dentro de Range
lo puedes hacer con "&".

Espero que te sirva,

Alejandro.

"César G." escribió en el mensaje
news:Oh30$

Saludos a

Espero que esten bien, bueno, la pregunta es la siguiente

Tengo que pegar varios datos en una plantilla desde un documento
principal, el tema es que al intentar hacer el famosisimo "Copy - Paste "
me genera una serie de errores, Aqui les mando el codigo de la macro que
utilizó para saber si pueden, por favor, explicarme como tengo que
declarar el objeto para poder manejar rangos de celdas y poder
seleccionarlos

Dim Plantilla As Workbook
Dim Tabular As Worksheet

Set Plantilla = Application.Workbooks.Add(Ruta)

'Set Tabular = Application.Windows("Francia.xls")
Set Tabular = Application.Workbooks("Francia.xls").Worksheets(1)


For x = 1 To 9
Tabular.Activate

'Tabular.Range(Cells(121, x + 1), Cells(124, x + 1)).Select


'Tabular.Worksheets("Francia").Range(Cells(121, x + 1), Cells(124, x +
1)).Select
'Tabular.Range(Cells(121, x + 1), Cells(124, x + 1)).Select

'Range(Cells(121, x + 1), Cells(124, x + 1)).Select


Cualquiera de estos metodos para seleccionar el rango de B121:B124 me
devolvia los errores 400 o bien, el error 1004 " Error en el método Range
de Objeto '_Worksheet'", ... en fin,

aqui es donde intento pegar la selección,

Selection.Copy
Plantilla.Worksheets(2).Activate

Cells(8, 3).Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=
_
False, Transpose:=True
Next x

El "metodo" que me funcionó fue, el siguiente

Tabular.Range("B" & 121 & ":B" & 124).Select

Aunque me gustaría saber cual es la forma correcta de hacer esta seleccion
con la forma
range(cells(row, col), cells(row, col)).select

Agradeciendo de antemano su atención a este mensaje, espero sus
comentarios

César Galicia
Soporte Técnico
TNS-Gallup


Respuesta Responder a este mensaje
#2 Héctor Miguel
11/11/2005 - 04:30 | Informe spam
hola, César !

1) [aparentemente] no hay causa 'visible' para el error 400 ni el 1004 con la forma que estas usando -?-

2) [probablemente] alguna libreria 'perdida' en el proyecto de macros ?
-> revisa en el editor de vba, en [menu] herramientas / referencias...
si existe alguna que 'diga': FALTA... o... MISSING... -?-

3) tampoco es indispensable andar 'danzando' entre rangos/hojas/libros ni 'seleccionando' para hacer copy/paste :D
[usando 'metodos directos' podrias incluso 'ahorrar' tiempo de proceso] ;)
p.e. al utilizar una instruccion 'Workbooks.Add' el 'nuevo' libro 'se queda' [en la sesion] como libro 'activo'
despues de lo anterior, podrias utilizar los objetos...
-> 'ThisWorkbook' para hacer referencia al libro que contiene las macros
-> y 'ActiveWorkbook' para hacer referencia al libro 'recien' abierto
[con lo que tambien podrias 'ahorrarte' una que otra 'variables'] ;)

4) suponiendo que 'Workbooks("Francis.xls")' es el libro con las macros [ThisWorkbook]...
haz una prueba con el siguiente codigo...
[... otras lineas de tu codigo original ...]
With ThisWorkbook.Worksheets(1)
.Range(.Cells(121, 2), .Cells(124, 10)).Copy
End With
ActiveWorkbook.Worksheets(2).Cells(8, 3).PasteSpecial xlPasteValues, , , True
Application.CutCopyMode = False

[... otras lineas de tu codigo original ...]

5) si te sigue 'fallando' el metodo range(cells(row, col), cells(row, col))
y no existen librerias 'perdidas' en tu proyecto de macros...
-> prueba modificando al metodo range("b" & ... etc. etc. etc.

comentas ?
saludos,
hector.

... pegar varios datos en una plantilla desde un documento principal
... al intentar hacer el famosisimo "Copy - Paste " me genera una serie de errores
... macro que utilizo... como tengo que declarar el objeto para poder manejar rangos de celdas y poder seleccionarlos
Dim Plantilla As Workbook
Dim Tabular As Worksheet
Set Plantilla = Application.Workbooks.Add(Ruta)
'Set Tabular = Application.Windows("Francia.xls")
Set Tabular = Application.Workbooks("Francia.xls").Worksheets(1)
For x = 1 To 9
Tabular.Activate
'Tabular.Range(Cells(121, x + 1), Cells(124, x + 1)).Select
'Tabular.Worksheets("Francia").Range(Cells(121, x + 1), Cells(124, x + 1)).Select
'Tabular.Range(Cells(121, x + 1), Cells(124, x + 1)).Select
'Range(Cells(121, x + 1), Cells(124, x + 1)).Select
... estos metodos para seleccionar el rango de B121:B124... devolvia los errores 400 o bien, el error 1004
aqui es donde intento pegar la seleccion,
Selection.Copy
Plantilla.Worksheets(2).Activate
Cells(8, 3).Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
Next x
El "metodo" que me funciono fue, el siguiente
Tabular.Range("B" & 121 & ":B" & 124).Select
... me gustaria saber cual es la forma correcta de hacer esta seleccion con la forma range(cells(row, col), cells(row, col)).select
Respuesta Responder a este mensaje
#3 César G.
11/11/2005 - 18:59 | Informe spam
Que tal Alejandro:

Si, sé que es una de las formas más sencillas de utilizar referencias con
Excel, pero mi problema se deriva al utilizar las referencias como en el
código que posteé ...

Gracias por tu comentario

César Galicia
Soporte Técnico
TNS-Gallup



"Alejandro Garrammone" escribió en el mensaje
news:
una forma básica sería la siguiente:

Sheets("Sheet1").Select
Range("B121:B124").Select
Selection.Copy
Sheets("Sheet2").Select
Range("B121:B124").Select
ActiveSheet.Paste
Application.CutCopyMode = False

si quieres concatenar cosas en una variable para utilizarla dentro de
Range lo puedes hacer con "&".

Espero que te sirva,

Alejandro.

"César G." escribió en el mensaje
news:Oh30$

Saludos a

Espero que esten bien, bueno, la pregunta es la siguiente

Tengo que pegar varios datos en una plantilla desde un documento
principal, el tema es que al intentar hacer el famosisimo "Copy - Paste "
me genera una serie de errores, Aqui les mando el codigo de la macro que
utilizó para saber si pueden, por favor, explicarme como tengo que
declarar el objeto para poder manejar rangos de celdas y poder
seleccionarlos

Dim Plantilla As Workbook
Dim Tabular As Worksheet

Set Plantilla = Application.Workbooks.Add(Ruta)

'Set Tabular = Application.Windows("Francia.xls")
Set Tabular = Application.Workbooks("Francia.xls").Worksheets(1)


For x = 1 To 9
Tabular.Activate

'Tabular.Range(Cells(121, x + 1), Cells(124, x + 1)).Select


'Tabular.Worksheets("Francia").Range(Cells(121, x + 1), Cells(124, x +
1)).Select
'Tabular.Range(Cells(121, x + 1), Cells(124, x + 1)).Select

'Range(Cells(121, x + 1), Cells(124, x + 1)).Select


Cualquiera de estos metodos para seleccionar el rango de B121:B124 me
devolvia los errores 400 o bien, el error 1004 " Error en el método Range
de Objeto '_Worksheet'", ... en fin,

aqui es donde intento pegar la selección,

Selection.Copy
Plantilla.Worksheets(2).Activate

Cells(8, 3).Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone,
SkipBlanks:= _
False, Transpose:=True
Next x

El "metodo" que me funcionó fue, el siguiente

Tabular.Range("B" & 121 & ":B" & 124).Select

Aunque me gustaría saber cual es la forma correcta de hacer esta
seleccion con la forma
range(cells(row, col), cells(row, col)).select

Agradeciendo de antemano su atención a este mensaje, espero sus
comentarios

César Galicia
Soporte Técnico
TNS-Gallup






Respuesta Responder a este mensaje
#4 César G.
11/11/2005 - 19:40 | Informe spam
"Héctor Miguel" escribió en el mensaje
news:
hola, César !



Que tal Hector !!!

Antes que otra cosa quiero agradecerte, de nuevo, por tu apoyo ...

Me extendí un poco, pero realmente quiero ser muy preciso en este tema que
me trae loco.


1) [aparentemente] no hay causa 'visible' para el error 400 ni el 1004 con
la forma que estas usando -?-



No, yo tampoco la veo, y de hecho es uno de los errores mas frecuentes con
los que me he topado en las ocasiones en que he intentado "programar" algo
con Excel utilizando referencias con las celdas,


2) [probablemente] alguna libreria 'perdida' en el proyecto de macros ?
-> revisa en el editor de vba, en [menu] herramientas / referencias...
si existe alguna que 'diga': FALTA... o... MISSING... -?-



Nop, esto no es la causa, he mirado las referencias y no falta ninguna ... .
Solamente veo un mensaje de NO GUARDADO: VBAProyect, Aunque al querer tildar
sobre la casilla me aparece el mensaje "Debe guardar un proyecto antes de
hacer referencia al mismo"... pero no sé que significa



3) tampoco es indispensable andar 'danzando' entre rangos/hojas/libros ni
'seleccionando' para hacer copy/paste :D
[usando 'metodos directos' podrias incluso 'ahorrar' tiempo de proceso]
;)
p.e. al utilizar una instruccion 'Workbooks.Add' el 'nuevo' libro 'se
queda' [en la sesion] como libro 'activo'
despues de lo anterior, podrias utilizar los objetos...
-> 'ThisWorkbook' para hacer referencia al libro que contiene las
macros
-> y 'ActiveWorkbook' para hacer referencia al libro 'recien' abierto
[con lo que tambien podrias 'ahorrarte' una que otra 'variables']
;)



Estoy un poco en desacuerdo contigo en lo de la "danza", porque el tema es
un poco más complicado; verás, el objetivo de utilizar la instrucción
Workbooks.Add es para utilizar un documento como plantilla y utilizó 3
archivos que son 1. La plantilla, 2. El origen de los datos que yo le llamó
"Tabular" y finalmente la hoja con la Macro, que pretendo ubicar en un sólo
directorio, y tomar la RUTA del Tabular en una variable, ( Utilizó la
instrucción
Abrir = Application.GetOpenFilename("Tabular Excel (*.xls), *.xls")) para
darle al usuario la posibilidad de "buscar" el archivo

Me parece necesario ubicar perfectamente con las referencias de los libros y
las hojas, por si el usuario tiene más de 1 libro de trabajo activo, y
también porque la plantilla tiene 9 diferentes reportes, todos ellos
alimentados de diferentes columnas del archivo de origen, pero compartiendo
la misma fila ...

En un inicio, pense que lo mejor era copiar y pegar, pero, reflexionando un
poco decidí utilizar "referencias" hacia el tabular desde la plantilla, y
así me ahorro gran parte del código... e ir, y venir entre "ventanas" con lo
que creo que tu sugerencia me viene bien .


4) suponiendo que 'Workbooks("Francis.xls")' es el libro con las macros
[ThisWorkbook]...
haz una prueba con el siguiente codigo...
[... otras lineas de tu codigo original ...]
With ThisWorkbook.Worksheets(1)
.Range(.Cells(121, 2), .Cells(124, 10)).Copy
End With
ActiveWorkbook.Worksheets(2).Cells(8, 3).PasteSpecial xlPasteValues, , ,
True
Application.CutCopyMode = False

[... otras lineas de tu codigo original ...]

5) si te sigue 'fallando' el metodo range(cells(row, col), cells(row,
col))
y no existen librerias 'perdidas' en tu proyecto de macros...
-> prueba modificando al metodo range("b" & ... etc. etc. etc.

comentas ?
saludos,
hector.



Utilicé parte de tú recomendación, tal que así .

With ThisWorkbook.Worksheets(x)
.Range(.Cells(5, 5), Cells(5, 5)).Select
End With

esto solamente lo hago para posicionarme en la columna "E5", para después
pegar la formula

ActiveCell.FormulaR1C1 = "=FRANCIA.XLS!R120" & coL

y así otras 40 veces más...

pero también logre obtener el famoso error 1004 falló el método Select de la
clase Range..


El día de ayer me la pase con este tema casi todo el día, y buscando en
Microsoft me tope con el siguiente artículo, que me dio una solución un poco
extraña...

http://support.microsoft.com/defaul...;es;178520

asi que mi codigo quedó tal que así ..

W as Object

Set W = ActiveSheet.Range("C8")
W.Select
ActiveCell.FormulaR1C1 = "=FRANCIA.XLS!R121" & coL

y solamente de esta manera me libré del mentado error, aunque sigo teniendo
la duda, y el desconcierto de no poder utilizar las referencias de la forma
.Range(.Cells(row, col), .Cells(row, col)).Copy
porque en lo particular, lo habia hecho en más de 1 ocasión sin ningún
problema, pero ahora no consigo realizar lo siguiente.

Despues de redactar este mensaje, creo que voy a hecharme un "clavado" a mis
antigüas macros, para saber como hacia las referencias.

Un saludo

César Galicia.







... pegar varios datos en una plantilla desde un documento principal
... al intentar hacer el famosisimo "Copy - Paste " me genera una serie
de errores
... macro que utilizo... como tengo que declarar el objeto para poder
manejar rangos de celdas y poder seleccionarlos
Dim Plantilla As Workbook
Dim Tabular As Worksheet
Set Plantilla = Application.Workbooks.Add(Ruta)
'Set Tabular = Application.Windows("Francia.xls")
Set Tabular = Application.Workbooks("Francia.xls").Worksheets(1)
For x = 1 To 9
Tabular.Activate
'Tabular.Range(Cells(121, x + 1), Cells(124, x + 1)).Select
'Tabular.Worksheets("Francia").Range(Cells(121, x + 1), Cells(124, x +
1)).Select
'Tabular.Range(Cells(121, x + 1), Cells(124, x + 1)).Select
'Range(Cells(121, x + 1), Cells(124, x + 1)).Select
... estos metodos para seleccionar el rango de B121:B124... devolvia los
errores 400 o bien, el error 1004
aqui es donde intento pegar la seleccion,
Selection.Copy
Plantilla.Worksheets(2).Activate
Cells(8, 3).Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone,
SkipBlanks:= _
False, Transpose:=True
Next x
El "metodo" que me funciono fue, el siguiente
Tabular.Range("B" & 121 & ":B" & 124).Select
... me gustaria saber cual es la forma correcta de hacer esta seleccion
con la forma range(cells(row, col), cells(row, col)).select




Respuesta Responder a este mensaje
#5 Héctor Miguel
12/11/2005 - 06:49 | Informe spam
hola, César !

... quiero ser muy preciso en este tema que me trae loco.
... es uno de los errores mas frecuentes... en las ocasiones en que he intentado "programar"... utilizando referencias con las celdas
... he mirado las referencias y no falta ninguna... Solamente veo un mensaje de NO GUARDADO: VBAProyect
... al... tildar... la casilla me aparece... "Debe guardar un proyecto antes de hacer referencia al mismo"... pero no se que significa



1) 'significa' que mientras un libro no haya sido guardado, su proyecto vba NO PUEDE ser utilizado en [menu] herramientas / referencias

... un poco en desacuerdo... en lo de la "danza", porque el tema es un poco mas complicado [...]
Me parece necesario ubicar perfectamente con las referencias de los libros y las hojas
por si el usuario tiene mas de 1 libro de trabajo activo, y... porque la plantilla tiene 9 diferentes reportes [...]
En un inicio, pense que lo mejor era copiar y pegar, pero, reflexionando un poco decidi utilizar "referencias" hacia el tabular desde la plantilla
... asi me ahorro gran parte del codigo... e ir, y venir entre "ventanas" con lo que creo que tu sugerencia me viene bien



2) [al final de cuentas]... la 'danza' a la que me he referido es -precisamente- al 'ir... seleccionar... regresar... volver a ir...' etc.
[con lo que veo que 'estamos de acuerdo'] :D

Utilice parte de tu recomendacion, tal que asi.
With ThisWorkbook.Worksheets(x)
.Range(.Cells(5, 5), Cells(5, 5)).Select
End With
esto solamente lo hago para posicionarme en la columna "E5", para despues pegar la formula
ActiveCell.FormulaR1C1 = "=FRANCIA.XLS!R120" & coL
y asi otras 40 veces mas...
pero tambien logre obtener el famoso error 1004 fallo el metodo Select de la clase Range



3) si te esta 'funcionando' la recomendacion para 'seleccionar'... [significa que] tambien 'debiera' funcionar para 'lo demas' :))
otras causas [probablemente] pudieran deberse a la instruccion '.FormulaR1C1' -?-
a reserva de que comentaras 'como' fue que se 'construyo' la variable ->coL<- [cual es el 'valor' que esta 'dejando'] -?-

... buscando... me tope con el siguiente articulo, que me dio una solucion un poco extra#a...
http://support.microsoft.com/defaul...;es;178520
asi que mi codigo quedo tal que asi..
W as Object
Set W = ActiveSheet.Range("C8")
W.Select
ActiveCell.FormulaR1C1 = "=FRANCIA.XLS!R121" & coL
... de esta manera me libre del mentado error, aunque sigo teniendo... el desconcierto de no poder utilizar las referencias de la forma
.Range(.Cells(row, col), .Cells(row, col)).Copy
porque en lo particular, lo habia hecho en mas de 1 ocasion sin ningun problema, pero ahora no consigo [...]
... creo que voy a hecharme un "clavado" a mis antiguas macros, para saber como hacia las referencias.



4) creo que la 'solucion' te ha quedado un poco 'redundante' :))
y aunque tambien me parece 'desconcertante' [con los datos conocidos] el problema...
no planeo 'moverte mas el tapete', esperando que compartas la causa [si la descubres] y la solucion ;)

saludos,
hector.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida