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

#6 asier
06/03/2008 - 19:40 | Informe spam
Corregir en la exposición anterior que el nombre de la hoja donde he puesto
(Alumnos IP12) quería decir realmente ("Alumnos IP1")
Asier Alcu
Respuesta Responder a este mensaje
#7 Héctor Miguel
06/03/2008 - 22:53 | Informe spam
hola, !

(en resumen) el problema con el proceso que sigue la macro es cuando el usuario esta "parado" NO en la columna C

cambia la instruccion de "esa" linea por alguna de estas otras alternativas (+/-)...
de: -> ActiveCell.Offset(0, -2).Range("a1:af1").Select
a: -> Cells(ActiveCell.Row, 1).Resize(, 32).Select
o: -> Cells(ActiveCell.Row, 1).Range("a1:af1").Select

aunque en realidad NO es necesario hacer "danzas" por codigo usando instrucciones del tipo <objeto>.Select
(pero esto "te lo dejo de tarea") :))

saludos,
hector.

__ la consulta original __
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 esta parado en una celda de la hoja ("Alumnos IP12"), al pinchar el boton
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 efetua un filtro en un historial de documentos
para exponer solo los correspondientes a los del alumno de la ficha...
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 ademas, para aclarar todo, en el codigo de la hoja ("1")... 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 boton, 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 instruccion 2ª de la macro:
ActiveCell.Offset(0, -2).Range("A1:Af1").Select
1. Si estan posicionados en una columna despues de la ("C"), funciona la macro pero queda todo descolocado
sobre la posicion prevista, un desastre.
2. Si estan 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 lio para ellos pinchar siempre desde la columna adecuada
lo que seria plantearles que tienen que desbloquear la hoja, introducir datos y volver a bloquearla.
En ultima instancia puedo bloquearla y no dejarles introducir datos, Solo ver.
Podrias plantearme otro tipo de solucion?
Respuesta Responder a este mensaje
#8 asier
07/03/2008 - 19:53 | Informe spam
Muchas gracias, era lo que necesitaba, las dos funcionan de cine y encima me
sobran mas de la mitad de las instruciones yo tenía en la macro.

Saludos.
Asier Alcu


"Héctor Miguel" escribió:

hola, !

(en resumen) el problema con el proceso que sigue la macro es cuando el usuario esta "parado" NO en la columna C

cambia la instruccion de "esa" linea por alguna de estas otras alternativas (+/-)...
de: -> ActiveCell.Offset(0, -2).Range("a1:af1").Select
a: -> Cells(ActiveCell.Row, 1).Resize(, 32).Select
o: -> Cells(ActiveCell.Row, 1).Range("a1:af1").Select

aunque en realidad NO es necesario hacer "danzas" por codigo usando instrucciones del tipo <objeto>.Select
(pero esto "te lo dejo de tarea") :))

saludos,
hector.


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida