macro condicional segun columna

29/02/2008 - 20:14 por asier | Informe spam
Hola,
En excell, tengo una macro asignada a un botón que me funciona bien si estoy
en una columna, concretamente la "D", si estoy posicionado en cualquier otra
por las instruciones que realiza me da error.
Yo no tengo problemas al activarlo, siempre lo hago situado en dicha
columna, pero si es algún compañero, a veces lo hace desde otra posicición, y
le sale la ventanilla de "depurar" y se queda bloqueado.
Lo he intentado en una macro con 'Select Case' para que si se activa desde
la columna "d" vaya a la macro y si no a otra donde tengo un mensaje que
avisa "posición celda incorrecta" y por mas intentos y cambios no consigo
hacer que me funcione.
Como podría hacerlo?

Asier Alcu

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
01/03/2008 - 02:45 | Informe spam
hola, !

... tengo una macro asignada a un boton que me funciona bien si estoy en una columna, concretamente la "D"
si estoy posicionado en cualquier otra por las instruciones que realiza me da error.
Yo no tengo problemas al activarlo, siempre lo hago situado en dicha columna
pero si es algun companero, a veces lo hace desde otra posicicion, y le sale la ventanilla de "depurar" y se queda bloqueado.
Lo he intentado en una macro con 'Select Case' para que si se activa desde la columna "d" vaya a la macro
y si no a otra donde tengo un mensaje que avisa "posicion celda incorrecta"
y por mas intentos y cambios no consigo hacer que me funcione.
Como podria hacerlo?



1) para empezar, nunca "estorba" si transcribes las formulas y/o el codigo de las macros que no estan haciendo lo que esperabas

2) probablemente, usar instrucciones que hagan referencia "directa" a los rangos que deban ser
(p.e. en lugar de usar referencias como ActiveCell, usa Cells(x_fila, 4) <= la columna 4 siempre sera la columna D)

saludos,
hector.
Respuesta Responder a este mensaje
#2 asier
04/03/2008 - 21:55 | Informe spam
Asier Alcu


"Héctor Miguel" escribió:

hola, !

> ... tengo una macro asignada a un boton que me funciona bien si estoy en una columna, concretamente la "D"
> si estoy posicionado en cualquier otra por las instruciones que realiza me da error.
> Yo no tengo problemas al activarlo, siempre lo hago situado en dicha columna
> pero si es algun companero, a veces lo hace desde otra posicicion, y le sale la ventanilla de "depurar" y se queda bloqueado.
> Lo he intentado en una macro con 'Select Case' para que si se activa desde la columna "d" vaya a la macro
> y si no a otra donde tengo un mensaje que avisa "posicion celda incorrecta"
> y por mas intentos y cambios no consigo hacer que me funcione.
> Como podria hacerlo?

1) para empezar, nunca "estorba" si transcribes las formulas y/o el codigo de las macros que no estan haciendo lo que esperabas

2) probablemente, usar instrucciones que hagan referencia "directa" a los rangos que deban ser
(p.e. en lugar de usar referencias como ActiveCell, usa Cells(x_fila, 4) <= la columna 4 siempre sera la columna D)

saludos,
hector.



Respuesta Responder a este mensaje
#3 asier
04/03/2008 - 22:31 | Informe spam
Hola Hector,
Tienes razón, le dí tantas vueltas en como generar la pregunta lo más
escueta posible y que se entendiera que olvidé lo principal, enviar la macro
que estaba utilizando:

Select Case UCase(Selection.Columns)
Case Is = Selection.Columns (4): Call IrFicha
Case Is <> Selection.Columns (4): Call Mbox
End Select

Esta es la última que tengo despues de múltiples cambios, pero unas veces
parecía que funcionaba y otras no, con esta última siempre me pasa al
mensaje, aunque esté en la columna ("D"), tambien en alguna ocasión creo que
le he puesto delante: Selection.Copy, pero alguna instrucción me sobra o me
falta.
Por otra parte no he entendido lo que me pones de cells, entiendo que es una
instrución en la que hay que darle fila y columna, la columna 4, pero como
hago para que las filas sean cualquiera?
Saludos.

Asier Alcu
Respuesta Responder a este mensaje
#4 Héctor Miguel
04/03/2008 - 22:54 | Informe spam
hola, !

__ 1 __
Select Case UCase(Selection.Columns)
Case Is = Selection.Columns (4): Call IrFicha
Case Is <> Selection.Columns (4): Call Mbox
End Select
Esta es la ultima que tengo despues de multiples cambios, pero unas veces parecia que funcionaba y otras no
con esta ultima siempre me pasa al mensaje, aunque este en la columna ("D")
tambien en alguna ocasion creo que le he puesto delante: Selection.Copy, pero alguna instruccion me sobra o me falta.


__ 2 __
Por otra parte no he entendido lo que me pones de cells, entiendo que es una instrucion en la que hay que darle fila y columna
la columna 4, pero como hago para que las filas sean cualquiera?



1) Selection no es seguro que simpre se trate de un objeto "rango", o de un rango de una sola celda -?- (por lo mismo)...
tampoco sabes si el usuario esta "parado" en determinadas filas/columnas que espera la macro para "trabajar"
(a menos que lo preguntes p.e. por un Selection.Address y es igual que ActiveCell)

2) si necesitas que la macro trabaje siempre con la columna D (sin importar en cual fila esta "parado" el usuario)...
Cells(ActiveCell.Row, 4)

probablemente lo anterior no te resuelva "el problema", ya que las macros a las que llamas en este trozo de codigo...
tampoco se pudo "ver" como es el accionar en sus procedimientos (pero creo que ya tienes "la idea") :))

saludos,
hector.
Respuesta Responder a este mensaje
#5 asier
06/03/2008 - 19:21 | Informe spam
Hola Hector,

Ante todo darte las gracias, por los esfuerzos que creo tienes que hacer
para deducir, no lo que decimos, si no lo que queremos decir y a pesar de
todo tratas de entender y ayudar.
Creo que he planteado mal mi pregunta, he pedido ayuda en una macro que
había ideado? para solucionar el problema de otra y ahora tengo 2 problemas,
por lo que voy ha empezar de cero.

Tengo una lista de alumnos con sus datos, Nombre, Direcciones, dni, etc.,
cada fila un alumno, cada columna un tipo de dato (el nombre en la columna
"C" ) y un boton asignado a la macro "IrFicha1"
El usuario siempre está parado en una celda de la hoja ("Alumnos IP12"), al
pinchar el botón, me recoge datos de esta hoja y los pega en otra("1"), en la
que he creado un formulario que se rellena con los datos que tiene en las
celdas de la primera fila y efetúa un filtro en un historial de documentos
para exponer solo los correspondientes a los del alumno de la ficha.

La macro es:

Sub IrFicha1()

Application.ScreenUpdating = False
ActiveCell.Offset(0, -2).Range("A1:Af1").Select
Selection.Copy
Sheets("1").Select
Range("d1").Select
ActiveSheet.Paste
Sheets("Alumnos IP1").Select
ActiveCell.Offset(0, 2).Range("A1").Select
Selection.Copy
Sheets("1").Select
Range("a1").Select
ActiveSheet.Paste
Selection.AutoFilter Field:=1, Criteria1:=Range("a1")
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
Application.ScreenUpdating = True

End Sub

Y además, para aclarar todo, en el código de la hoja ("1"), - hace tiempo
tambien me ayudaste con esto - para poner la foto del alumno, tengo:

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Target.Address = "$A$1" Then Exit Sub
Dim De_donde As String, Foto As Object, _
Arriba As Double, Izquierda As Double, Ancho As Double, Alto As
Double
Application.ScreenUpdating = False
On Error Resume Next
Me.Shapes("La_Foto").Delete
De_donde = "d:\otxarkoaga\2007IP\IP1\" & [a1] & ".Jpg"
If Dir(De_donde) = "" Then Exit Sub
Set Foto = Me.Pictures.Insert(De_donde)
With Me.Range("AB10:AG20")
Arriba = .Top
Izquierda = .Left
Ancho = .Offset(0, .Columns.Count).Left - .Left
Alto = .Offset(.Rows.Count, 0).Top - .Top
End With
With Foto
.Name = "La_Foto"
.Top = Arriba
.Left = Izquierda
.Width = Ancho
.Height = Alto
End With
Set Foto = Nothing
End Sub

Si pincho yo en el botón, como siempre lo hago desde la columna ("C"), todo
funciona perfectamente, pero si es otro usuario, lo pueden hacer desde
cualquier celda, a pesar de reinsistir que siempre tienen que hacerlo estando
posicionados en la columna del nombre ("C")?, y surge el problema con la
instrucción 2ª de la macro:

ActiveCell.Offset(0, -2).Range("A1:Af1").Select


1. Si están posicionados en una columna despues de la ("C"), funciona la
macro pero queda todo descolocado sobre la posición prevista, un desastre.
2. Si están colocados antes de la columna ("C") = ("A") o ("B"), como no
encuentra las 2 celdas anteriores para seleccionar, se bloquea la macro y
solicicita –depurar- y desastre total.

No puedo bloquear toda la hoja menos la columna ("C") porque tambien meten
ellos datos en ("Alumnos IP1"), si es mucho lío para ellos pinchar siempre
desde la columna adecuada, lo que sería plantearles que tienen que
desbloquear la hoja, introducir datos y volver a bloquearla. En última
instancia puedo bloquearla y no dejarles introducir datos, Solo ver.

Podrías plantearme otro tipo de solución?

Un saludo.

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