ubicacion

Solo consultas sobre macros y código VBA Excel.

Reglas del Foro
1. Antes de hacer tu pregunta intenta con el buscador de este foro (muchas preguntas ya fueron respondidas antes!)
2. Si haces una nueva pregunta, es muy recomendable que adjuntes el ejemplo Excel para poder comprenderla mejor!
3. Realiza tu pregunta de forma clara, explicando bien cada paso de lo que haces y tendrás más probabilidad de respuesta!
Compartir en:
     

ubicacion

Notapor raditz » 03 Abr 2006 20:24

como se hace para guardar la ubicacion de la celda activa en una variable para despues poder volver usarla mas adelante y hacer que excel se pare en esa celda.

algo asi

celda = range(activecell)
mas adelante....

range(celda).select

gracias
* Te recomendamos estos productos Excel: Manual de Macros | Manual de Funciones | Nuevas Funciones | ddTraDa
raditz
Miembro Frecuente
Miembro Frecuente
 
Registrado: 29 Mar 2006 18:09

Re: ubicacion

Notapor Tavo77 » 03 Abr 2006 20:34

Creo que lo más conveniente es usar un 'Custom property' en el documento, es algo como lo siguiente: Application.ActiveWorkbook.CustomDocumentProperties.Add Name:="miRango", _
LinkToContent:=False, Type:=msoPropertyTypeNumber, Value:=1000
En la ayuda del editor de VBA en excel puedes encontrar más información bajo el criterio: 'Document properties'
* Te recomendamos estos productos Excel: Manual de Macros | Manual de Funciones | Nuevas Funciones | ddTraDa
Avatar de Usuario
Tavo77
Miembro Frecuente
Miembro Frecuente
 
Registrado: 25 Ago 2005 20:43
Ubicación: Costa Rica

Re: ubicacion

Notapor raditz » 03 Abr 2006 23:48

uh mas complicado de lo q pensa, gracias igualmente
* Te recomendamos estos productos Excel: Manual de Macros | Manual de Funciones | Nuevas Funciones | ddTraDa
raditz
Miembro Frecuente
Miembro Frecuente
 
Registrado: 29 Mar 2006 18:09

Notapor galileogali » 04 Abr 2006 21:48

Sin entrar en casos especiales yo me conformo con usar
Dim paraje_oara_recordar as string

paraje_para_recordar = activecell.address

Para situaciones en que se manejen movimientos entre hojas, volveremos sobre el tema. alojar variable Hoja.

GALI
* Te recomendamos estos productos Excel: Manual de Macros | Manual de Funciones | Nuevas Funciones | ddTraDa
galileogali
Moderator
Moderator
 
Registrado: 07 Ene 2005 22:46
Ubicación: QUIROGA (ba), ARGENTINA

Notapor galileogali » 04 Abr 2006 22:09

TAVO77: Si podes te pediria qu con unas lineas de codigo y alguna pequeña explicacion describieras el funcionamiento de tu aporte. Realmente es nuevo para mi, y no llego a comprenderlo.
Gracias, desde ya.
GALI
* Te recomendamos estos productos Excel: Manual de Macros | Manual de Funciones | Nuevas Funciones | ddTraDa
galileogali
Moderator
Moderator
 
Registrado: 07 Ene 2005 22:46
Ubicación: QUIROGA (ba), ARGENTINA

Re: ubicacion

Notapor KL » 04 Abr 2006 23:12

Hola chicos,

Creo que la solucion dependeria en gran parte de los siguientes factores:
1) si la variable seria usada por un solo procedimiento o por varios.
2) si el valor de la variable debe permanecer estatico entre las ejecucuiones de los procedimientos que la usan.
3) si el valor de la variable debe conservarse despues de cerrar el archivo/aplicacion.
4) hasta que punto es asumible el riesgo de que el valor se pierda.

La propuesta de TAVO77 usa uno de los posibles vehiculos para el valor (las propiedades del documento), pero tambien [muy a bote pronto] se podrian considerar

- una llave en el Registro de Windows
- un archivo externo
- una hoja oculta
- un nombre definido
- una variable a nivel de proyecto VBA
- una variable a nivel de modulo
- una variable estatica
- o incluso una simple y llana construccion With...End With


En fin, mas detalles por parte de raditz vendrian muy bien.
* Te recomendamos estos productos Excel: Manual de Macros | Manual de Funciones | Nuevas Funciones | ddTraDa
KL
Miembro Frecuente
Miembro Frecuente
 
Registrado: 18 Mar 2006 13:57
Ubicación: Madrid

Re: ubicacion

Notapor raditz » 05 Abr 2006 01:02

la cosa es medio asi. tengo varias listas en una sola hoja cada lista con su titulo.
o sea TITULO A
Item a1
item a2
item an

Titulo B
item b1
item b2
item bn

con un codigo logro que excel me encuentre el titulo de la lista , lea celda x celda los items de la respectiva lista y los proyecte en una ListBox. lo que pasa es que quiero que cuando termine de leer los items la celda activa vuelva a ser la celda del titulo y no que kede el cursor en la celda del ultimo item.
nose si se entiende la explicacion, medio complicado explicarlo
* Te recomendamos estos productos Excel: Manual de Macros | Manual de Funciones | Nuevas Funciones | ddTraDa
raditz
Miembro Frecuente
Miembro Frecuente
 
Registrado: 29 Mar 2006 18:09

Notapor galileogali » 05 Abr 2006 07:24

Creo que con la propiedad Address guardada en una variable, si no entendi masl tu explicacion, deberia alcanzarte y sobrarte para ese cometido.

GALI
* Te recomendamos estos productos Excel: Manual de Macros | Manual de Funciones | Nuevas Funciones | ddTraDa
galileogali
Moderator
Moderator
 
Registrado: 07 Ene 2005 22:46
Ubicación: QUIROGA (ba), ARGENTINA

Re: ubicacion

Notapor KL » 05 Abr 2006 07:31

Hola raditz,

Hombre, creo que entiendo que es lo que quieres hacer, pero si expones el codigo te añadiremos un par de linias en vez de andar reconstruyendo todo el procedimiento. En todo caso, te comento que sospecho (juzgando por tu exposicion) que tu macro contiene al menos dos oportunidades para optimizacion:

1) en el 99% de lo casos en VBA no es necesario seleccionar/activar objetos para manipularlos, y menos para extraer los valores de celdas. Los bucles que usan el metodo Select son de lo mas ineficiente.

2) para asignar los valores de rangos a de celdas a unos listbox en la mayoria de los casos no es necesario recorrer celdas una por una (revisa la Ayuda para las propiedades LIst y Column del objeto ListBox). Por ejemplo:

Código: Seleccionar todo
Private Sub UserForm_Initialize()
    Dim Lista As Variant
    Lista = ActiveSheet.Range("A2:A10")
    ListBox1.List = Lista
End Sub


Asi que tal vez modificando un par de lineas en tu macro se eliminaria la necesidad de crear la variable de la celda activa. De todas formas el patron de la asignacion del rango a una variable, seria algo asi:

Código: Seleccionar todo
Sub Test()
    Dim MiCelda As Range
    Set MiCelda = ActiveCell
    'Tu codigo
    MiCelda.Activate
End Sub
* Te recomendamos estos productos Excel: Manual de Macros | Manual de Funciones | Nuevas Funciones | ddTraDa
KL
Miembro Frecuente
Miembro Frecuente
 
Registrado: 18 Mar 2006 13:57
Ubicación: Madrid

Re: ubicacion

Notapor hansabel » 05 Abr 2006 09:03

La verdad que casi siempre es mejor poner el archivo para poder ayudar mejor, nose si entendi bien pero segun creo todo lo tienes en una sola hoja, y tienes seleccionada una celda especifica y al hacer correr el macro quieres que vuelva a la misma celda, siendo asi podrias simplemente hacer lo siguiente:

al comienzo:
fila = ActiveCell.Row
columna = ActiveCell.Column

cuando quieras que vuelva:
cells(fila,columna).select

como dice el amigo KL para asignar los valores de rangos de celdas a unos listbox en la mayoria de los casos no es necesario recorrer celdas una por una
* Te recomendamos estos productos Excel: Manual de Macros | Manual de Funciones | Nuevas Funciones | ddTraDa
Avatar de Usuario
hansabel
Miembro Frecuente
Miembro Frecuente
 
Registrado: 01 Jul 2005 21:10
Ubicación: Santa Cruz-Bolivia

Re: ubicacion

Notapor Tavo77 » 05 Abr 2006 12:49

El siguiente ejemplo muestra la cantidad de veces que se ha abierto el libro (y los cambios realizados se han guardado). Esta cantidad de veces se almacena en una propiedad personalizada 'Q_Abierto', es lo mismo que ir al menú Archivo // Propiedades // Personalizar, sólo que modificando dicha propiedadque cada vez que se abre el libro para llevar el contador. Cabe resaltar que si el libro se cierra sin guardar los cambios, tampoco se guardará el incremento del contador, aunque esto se puede solucionar guardando el libro inmediatamente despues de incrementarlo. Usar propiedades personalizadas me parece una mejor alternativa que guardar el valor en una celda, donde esta más propenso a que el usuario lo vea y lo quiera modificar. También puede utilizarse como un 'Flag', por ejemplo para determinar si el libro fue creado mediante un procedimiento personalizado, en lugar de haciendo click en 'New'. Espero que el ejemplo y la explicación hayan sido claros, en caso contrario con gusto intentaré responder consultas adicionales.

Código: Seleccionar todo
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    ActiveWorkbook.Close True
End Sub

Private Sub Workbook_Open()
    Dim p As DocumentProperty
    Dim existe As Boolean
    Dim veces As Integer
    existe = False
    For Each p In ActiveWorkbook.CustomDocumentProperties
        If p.Name = "Q_Abierto" Then
            p.Value = p.Value + 1
            veces = p.Value
            existe = True
            Exit For
        End If
    Next
    If Not existe Then
        ActiveWorkbook.CustomDocumentProperties.Add Name:="Q_Abierto", LinkToContent:=False, Type:=msoPropertyTypeNumber, Value:=1
        veces = 1
    End If
    MsgBox "Este documento ha sido abierto " & veces & " veces"
End Sub
* Te recomendamos estos productos Excel: Manual de Macros | Manual de Funciones | Nuevas Funciones | ddTraDa
Avatar de Usuario
Tavo77
Miembro Frecuente
Miembro Frecuente
 
Registrado: 25 Ago 2005 20:43
Ubicación: Costa Rica

Re: ubicacion

Notapor KL » 05 Abr 2006 13:15

Hola Tavo77,
Tavo77";p="23724 escribió:Usar propiedades personalizadas me parece una mejor alternativa que guardar el valor en una celda, donde esta más propenso a que el usuario lo vea y lo quiera modificar.[/code]


Solo una cosa: en el libro adjunto me podrias confirmar cual de los dos vehiculos de la variable es "más propenso a que el usuario lo vea y lo quiera modificar"?

1) el de la propiedad "Q_Abierto"
2) el de la hoja "Sheet4"
No tiene los permisos requeridos para ver los archivos adjuntos a este mensaje.
* Te recomendamos estos productos Excel: Manual de Macros | Manual de Funciones | Nuevas Funciones | ddTraDa
KL
Miembro Frecuente
Miembro Frecuente
 
Registrado: 18 Mar 2006 13:57
Ubicación: Madrid

Re: ubicacion

Notapor Tavo77 » 05 Abr 2006 16:35

Bueno, en esto es inútil entrar en discuciones, es cuestión de opinión. El truco utilizado para ocultar la Sheet4 es muy conocido y es trivial de 'romper', cualquiera empezarí­a intentando desproteger el libro (contraseña=4b1b5b7b3b1b3) y luego cambiando la propiedad xlVeryHidden de la Hoja4. Por otro lado no se de mucha gente que utilice propiedades personalizadas. Obviamente esto depende de quienes sean los usuarios y qué nivel de conocimientos tienen, en la mayorí­a de los casos seguro bastarí­a con ocultar la hoja o simplemente poner el color del texto y el relleno de la celda iguales. En fin lo único que se puede concluir es que la seguridad de Excel deja mucho que desear (a menos que se trabaje con Visual Studio o VSTO).
* Te recomendamos estos productos Excel: Manual de Macros | Manual de Funciones | Nuevas Funciones | ddTraDa
Avatar de Usuario
Tavo77
Miembro Frecuente
Miembro Frecuente
 
Registrado: 25 Ago 2005 20:43
Ubicación: Costa Rica

Re: ubicacion

Notapor KL » 05 Abr 2006 18:06

Hola Tavo77,

Esta era justo la respuesta que esperaba. Creo que tu mensaje lo que llega a decir es que ambos metodos son igual de [in]eficientes. Y hablando de la [des]proteccion, el mismo metodo que describes es necesario/suficiente para obtener acceso a ambas variables ;-) Podria decir que un usuario camun es mas probable que se percate de la existencia de una propiedad (aunque sea por casualidad) que de la de una hoja adicional que solo es visible desde el Editor VBA, pero casi diria que el que sepa quitar la proteccion sabria lograr acceso a ambas variables. Mi intencion era que reconozcas que el comentario "... esta más propenso a que el usuario lo vea y lo quiera modificar..." era un comentario gratuito y sin mas fundamento que tu preferncia personal ;-)
* Te recomendamos estos productos Excel: Manual de Macros | Manual de Funciones | Nuevas Funciones | ddTraDa
KL
Miembro Frecuente
Miembro Frecuente
 
Registrado: 18 Mar 2006 13:57
Ubicación: Madrid

Re: ubicacion

Notapor Tavo77 » 05 Abr 2006 20:13

Correcto.
* Te recomendamos estos productos Excel: Manual de Macros | Manual de Funciones | Nuevas Funciones | ddTraDa
Avatar de Usuario
Tavo77
Miembro Frecuente
Miembro Frecuente
 
Registrado: 25 Ago 2005 20:43
Ubicación: Costa Rica


Compartir en:
     

  • Anuncio
Manual Excel avanzado

Volver a Macros

¿Quién está conectado?

Usuarios navegando por este Foro: dkjohan y 2 invitados