Excel - Problemas con "Range" en Botón VBA

   
Vista:

Problemas con "Range" en Botón VBA

Publicado por Rober (4 intervenciones) el 13/09/2007 15:02:06
Hola a todos.
Tengo un pequeño problema, probablemente sea una tontería pero a ver si alguien me puede ayudar:

He creado un botón y no se por qué razón no me permite introducir "Range". En el código del botón tengo algo muy sencillo como prueba (seleccionar "hoja" y casilla "A1"):

Private Sub Prueba_Click()
Worksheets("hoja").Select
Range("A1").Select
End Sub

el mensaje que me devuelve es:

Se ha producido el error 1004 en tiempo de ejecución
"Error en el método Select de la clase Range"

Sin embargo si el mismo código lo introduzco en un módulo normal y ejecuto la macro sí funciona:

Sub prueba2()
Worksheets("hoja").Select
Range("A1").Select
End Sub

Alguien me puede decir porqué ocurre esto? y cómo lo puedo solucionar?

Muchas gracias por vuestra ayuda.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Problemas con

Publicado por jorge (67 intervenciones) el 13/09/2007 17:24:50
dónde has programado el código que no te funciona??

No soy muy experto, si me equivoco que alguien me corrija, pero, por lo que puedo entender has programado un botón en una hoja, y pretendes seleccionar una celda de otra hoja, pues bien, según tengo entendido esto no es posible, puesto que el objeto que pretendes seleccionar pertenece a otra hoja, y no a aquella en la que reside el código. La solución como tú mismo apuntas es programar el código en un módulo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problemas con

Publicado por Edgardo Mejía (35 intervenciones) el 13/09/2007 17:36:38
Antes que nada saludos desde la Laguna México, pasando a tú duda, tu error es de subindice fuera de intervalo, es decir antes que nada tienes que activar el libro y la hoja donde deseas seleccionar el rango, por ejemplo:

Workbooks.(nombre del libro).worksheets(nombre de la hoja).Activate
Worksheets(nombre hoja).Range("A1").Select

tambien lo puedes hacer de la siguiente forma:

Workbooks.(nombre del libro).worksheets(nombre de la hoja).Activate
ActiveSheet.Range("A1").Select

oóóóóóóóó´

Workbooks.(nombre del libro).worksheets(nombre de la hoja).Activate
with ActiveSheet
.Range("A1").Selected
End with

tú error es que estas utilizando un método sin un objeto y necesitas del objeto para invocar al método, en caso de no querer escribir el objeto simplemente
pones:

with nombre_objeto
instrucciones
end with

hay otras variables que puedes poner, solo fijate en los tres ejemplos que te dí y trata de encontrarlas, si lo haces adquirirás conocimientos para que no te vuelva a pasar lo mismo.

ahhhhh se me olvidaba:
VIVA MEXICO !!!!!!!!! Ajua

Atte: Edgardo Mejía
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problemas con

Publicado por Abraham Valencia (2418 intervenciones) el 13/09/2007 18:43:35
aunque ya jorge te lo adelanto, el dilema es es, usas un modulo de hoja, para querer "manipular" otra. Eso solo se puede si haces "uso" de las hojas con el nombre del objeto, es decir del modulo de la hoja (La propiedad (name), la que esta entre parentesis)

Es decir, supongamos que en tu archivo la hoja con nombre (pestaña) Datos, tiene en su modulo, en la propiedad (name) la tiene como Hoja2, entonces, si tu desde otra hoja, y por intermedio de un boton de controles quieres ir a esa hoja, el codigo seria el siguiente:

Private Sub CommandButton1_Click()
Hoja2.Select
ActiveSheet.[a1].Select
End Sub

Abraham
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problemas con

Publicado por Rober (4 intervenciones) el 14/09/2007 10:03:48
Bueno agradezco mucho las respuestas.
Cierto me di cuenta que había algún problema al pretender "manipular" una hoja diferente a la del código de mi "hoja con botones". Así que opté por una opción mas complicada y menos elegante pero que me soluciónó el problema.

Realicé una llamada a una función (Call funcion(var1, var2, var3)) en un módulo externo a la "hoja con botones", pasándole las variables que iba a necesitar. A través de ese modulo seleccionaba normalmente la hoja y manipulaba sus celdas, con los datos de la "hoja con botones" que necesitaba.

Probaré con este método que proponeis, es mas simple y parece que mejor.

Agradezco mucho vuestra ayuda.
Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problemas con

Publicado por Armando (1 intervención) el 27/11/2007 12:32:44
Saludos tambien de México, pero desde Guadalajara...

soy menos que novato en excel. No entiendo nada de metodos ni objetos. Solo quiero que funcione esta cosa. Tengo el mismo problema del error de Rober.

ejem... me lo podrias explicar casi casi con manzanas?

para entender mejor: acabo de crear dos archivos, rojo.xls y verde.xls me interesa el valor de la celda A1 y A2 de verde.xls.
En rojo.xls puse un boton y le coloque esta programacion:

Private Sub CommandButton1_Click()
Workbooks.Open Filename:="verde.xls"
Range("A1:A2").Select
Selection.Copy
Windows("rojo.xls").Activate
ActiveSheet.Paste
Windows("verde.xls").Activate
ActiveWindow.Close
End Sub

y despues de esto viene el error

Podria alguien ayudarme???? prometo practicar y estudiarle mas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problemas con

Publicado por Edgardo Mejía (35 intervenciones) el 28/11/2007 07:09:18
Hola saludos desde la laguna, es bueno saber que ´habemos más méxicanos con dudas, pense que solo habian hermanos latinos de otros paises.

Bueno pasando a lo interesante hay varias cosillas que veo en tu codigo en primera:

para abrir un libro tienes que poner el siguiente codigo:

Workbooks.Open ("Path")

----->>> donde Path es un termino que utilizamos en la programación para referirnos a la direccion en que esta el archivo, es decir, su ubicación, por ejemplo supongamos que tu tienes tu archivo verde.xls en la carpeta "Mis documentos" para abrir dicho archivo debes proporcionar lo siguiente:

Workbooks.Open ("C:Mis Documentosverde.xls")

--->>Para saber la hubicación exacta de tu archivo, solamente bre la careta en la que se encuentra y fijate en la barra de direcciones, copiala y pegala en tu codigo en la parte que dice "Path"

despues, antes de seleccionar un rango primero debes activar el libro y la hoja en la que se encuentra el rango deseado, por ejemplo:

Workbooks("nombre del libro").Worksheets("nombre de la hoja").Activate
--->>Supongamos que la hoja de tu libro verde.xls se llama: "Hoja1", entonces pondremos lo siguiente:

Workbooks("verde.xls").Worksheets("Hoja1").Activate

Para seleccionar un rango, es mas factible hacerlo apropiadamente en vez de la forma abreviada, ahhh y para poder usar el range, antes que nada debes de proporcionar el objeto que contiene al range, que en este caso es la Hoja1, por ejemplo usa lo siguiente:

Worksheets("Hoja1").Range(Cells(ren,col), Cells(ren,col))

si te fijas el metodo Range tiene un par de Cells, bueno pues cada Cells equivale a una celda en especifico, donde "ren" es igual al numero del renglon y "col" al numero de la columna, recuerda que la columna "A" es la primer columna, es decir, es "1", "B" = "2" y así susecibamente.

Despues de lo anterior practicamente ya tenemos todo lo necesario para realizar lo que deseas.

otro detalle que veo en tu codigo es que seleccionas un rango, lo copias y lo pegas en el otro libro, pero nunca te encargaste de especificarle en que rango lo deseas pegar?

para copiar y pegar rangos entre diferentes Hojas que pertenescan a un mismo libro o en hojas de diferentes libros es mejor usar variable para especificar la selección que voy a copiar, así como el rango en que la voy a pegar, por ejemplo:
supongamos que tu deseas pegar la selección copiada de verde.xls en la Hoja1 de rojo.xls en las celdas A1, A2:

Set Rango1 = Worksheets(Hoja1).Range(Cells(1,1),Cells(2,1))
Workbooks("rojo.xls").Worksheets("Hoja1").Activate
Set Rango2=Worksheets(Hoja1).Range(Cells(1,1), Cells(2,1))
Rango1.Copy Rango2

---->>"Set" es una palabra reservada que nos permite declarar una variable, así como asignarle algún valor.

para cerrar el libro verde.xls, simplemente hacemos lo siguiente:

Workbooks("verde.xls").Activate
Workbooks("verde.xls").Close savechanges:=True

si te fijas tiene una variable llamada "savechanges", que significa guardar los cambios, es decir si esta en "true" guardaa los cambios antes de cerrar el libro, y si esta en "false", no guardara los cambios.

bien, en con eso terminamos, ahora simplemente hay que ensamblar lo anterior, tu codigo deberia de quedar parecido a lo siguiente:

Workbooks.Open ("C:Mis Documentosverde.xls")
Workbooks("verde.xls").Worksheets("Hoja1").Activate
Set Rango1 = Worksheets(Hoja1).Range(Cells(1,1),Cells(2,1))
Workbooks("rojo.xls").Worksheets("Hoja1").Activate
Set Rango2=Worksheets(Hoja1).Range(Cells(1,1), Cells(2,1))
Rango1.Copy Rango2
Workbooks("verde.xls").Activate
Workbooks("verde.xls").Close savechanges:=True

lo anterior claro esta que va dentro de tu botón

workbooks, es un objeto del tipo libro, mientras que worksheets es un objeto del tipo hojas
por ende un objeto workbokss, contiene uno o más objetos worksheets, pero no a la inversa.

Bueno paisano espero te sirva mi explicación, debo mencionarte que lo anterior no es la unica forma de realizar lo que quieres, recuerda que siempre se puede realizar la misma tarea de diferente forma, decidí solo explicarte de una manera, pues si lo hago de varias formas, tal vez te confunda, además es mucho más satisfactorio cuando tu encuentra la solución, aunque no simpre es facil; de cualquier forma bienvenido al mundo de la programación, en especial al de las macros en Excel, cualquier duda que tengas, me la puedes hacerllegar a mi mail, y te prometo que la contestare a la brevedad posible, nuebamente saludos,
y exito!!!, pues la suerte es para los perdedores.

Atte:Edgardo Meía.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problemas con

Publicado por Martin Jimenez (1 intervención) el 11/11/2009 15:26:33
Hola,

Private Sub CommandButton1_Click()
Workbooks.Open Filename:="verde.xls"
Range("A1:A2").Select <-- Aquí es el problema ¿cierto?
Selection.Copy
Windows("rojo.xls").Activate
ActiveSheet.Paste
Windows("verde.xls").Activate
ActiveWindow.Close
End Sub

Prueba a cambiar por:
Worksheets("nombrehoja").Range("A1:A2").Select

Si no funciona prueba:
Workbooks("verde").Worksheets("nombrehoja").Range("A1:A2").Select

A mi me funcionó para eliminar el error, simplemente hice referencia al objeto completo.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problemas con

Publicado por Ana (1 intervención) el 12/11/2010 17:49:09
Hola Rober
Tengo el mismo problema que tú. Estoy haciendo exactamente lo mismo y me sale el mismo error. Alguien te ayudó o pudiste solucionar tu problema? Por favor ayúdame si puedes.

Mil gracias...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problemas con

Publicado por José Rodríguez (3 intervenciones) el 03/04/2014 01:00:59
He probado todas las soluciones de esta página y siempre sigo obteniendo el error 1004.

Voy a explicar con cuidado lo que quiero hacer, sin poner código, a ver si en primer lugar es factible y segundo, solicitar orientación sobre como hacerlo.

Tengo dos hojas en el mismo libro.

La primera hoja, denominada "Datos", consiste en un grupo de datos, consistentes en una decripción (Columna "B"), un precio (Columna "C") y una fecha (Columna "D")

En la segunda hoja, llamémosla "Prueba", he creado un ComboBox (como control activex), cuyo contenido ya ha sido precargado con las descripciones que aparecen en la hoja "Datos", columna "B".

Lo que deseo hacer es que cuando el usuario elija un valor del ComboBox, la rutina vaya a la hoja "Datos", ubique el precio que corresponda a la descripción seleccionada en el ComboBox, y traiga dicho valor a la hoja "Prueba" y lo ponga en, digamos la celda K8.

Para mayor claridad lo pongo así:

supongamos que en la hoja "Datos" tengo:

COLUMNA A: COLUMNA B: COLUMNA C: COLUMNA D:
==================================================================================
1 Artículo 1 1,678.50 02/04/2014
2 Artículo 2 1,353.80 02/04/2014
3 Artículo 3 1,921.30 02/04/2014
4 Artículo 4 1,274.10 02/04/2014
5 Artículo 5 1,195.60 02/04/2014
6 Artículo 6 1,369.70 02/04/2014
7 Artículo 7 1,454.30 02/04/2014
8 Artículo 8 1,713.00 02/04/2014


En la Hoja "Prueba" está el ComboBox ya percargado en sus propiedades con "Artículo 1", "Artículo 2" y así sucesivamente hasta "Artículo 8"

Lo que deseo es que el usuario, al seleccionar del ComboBox, por ejemplo "Artículo 6", la macro se vaya a "Datos", ubique la selección del usuario, y se traiga de allí el precio y lo coloque en la celda K8 de la hoja "Prueba".

Mucho sabré agradecer su apoyo en el particular

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problemas con

Publicado por joel (1 intervención) el 25/09/2016 09:33:40
favor ayúdenme me sale un error en la sentencia rngOrigen.Select

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
Sub Copia()
 
 'Definir objetos a utilizar
Dim wbDestino As Workbook, _
    wsOrigen As Excel.Worksheet, _
    wsDestino As Excel.Worksheet, _
    rngOrigen As Excel.Range, _
    rngDestino As Excel.Range
 
'Indicar el libro de Excel destino
Set wbDestino = Workbooks.Open(ActiveWorkbook.Path & "\Repo Terceros 2016.xlsm")
 
'Activar este libro
ThisWorkbook.Activate
 
'Indicar las hojas de origen y destino
Set wsOrigen = Worksheets("Q3")
Set wsDestino = wbDestino.Worksheets("TOTAL WMS")
 
'Indicar la celda de origen y destino
Const celdaOrigen = "M2"
Const celdaDestino = "A2"
 
'Inicializar los rangos de origen y destino
Set rngOrigen = wsOrigen.Range(celdaOrigen)
Set rngDestino = wsDestino.Range(celdaDestino)
 
'Seleccionar rango de celdas origen
rngOrigen.Select ---- en esta linea me sale error
 
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlToRight)).Select
Selection.Copy
 
'Pegar datos en celda destino
rngDestino.PasteSpecial xlPasteValues
Application.CutCopyMode = False
 
'Guardar y cerrar el libro de Excel destino
wbDestino.Save
wbDestino.Close
 
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problemas con

Publicado por Marco Salazar antonio_salazar@petroamazonas.ec (1 intervención) el 04/11/2016 03:49:31
Yo tengo el mismo problema, me podrías indicar como solucionaste el problema?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar