Elaborar Macro y que se ejecute dependiendo del valor elegido en celda

Aretradeser

Board Regular
Joined
Jan 16, 2013
Messages
176
Office Version
  1. 2013
Platform
  1. Windows
En una hoja Excel, llamada "DATOS", en su columna "H" hay una validación de datos con las opciones "Anulada", "En Tramite", "No aceptada", "Pendiente", "Realizada" y "Traspasada"; y en la columna "F" nombres de archivos, en formato word, de modo que si hago clic en cualquiera de ellos se abren automáticamente mediante un hipervínculo, estos archivos se encuentran originalmente en la carpeta "FICHAS" (C:\Seguridad\Datos\FICHAS). Lo que necesito es una macro que realice lo siguiente:
Dependiendo de la opción que elija de la validación de datos de cualquier celda de la columna "H" ("Anulada", "En tramite", "No aceptada", "Pendiente", "Realizada" y "Traspasada"), seleccione la celda correspondiente a su misma fila de la columna "F", y guarde el archivo que se encuentra en esa celda en la carpeta "Anulada", si la opción elegida de la validación de datos es "Anulada"; en la carpeta "En trámite" si la opción elegida es "En tramite" y así con el resto de las opciones que se elijan.
Ejemplo:
Si en la celda "H2", se elije la opción "Anulada", la macro seleccione la celda "F2" y guarde el archivo que se encuentra en esa celda en la carpeta, denominada "Anulados"
Si en la celda "H3", se elije la opción "En trámite", la macro seleccione la celda "F3" y guarde el archivo que se encuentra en esa celda en la carpeta, denominada "En trámite"
Si en la celda "H4", se elije la opción "No aceptada", la macro seleccione la celda "F4" y guarde el archivo que se encuentra en esa celda en la carpeta, denominada "No aceptada"; y así, sucesivamente.
Muchas gracias.
 

Excel Facts

Formula for Yesterday
Name Manager, New Name. Yesterday =TODAY()-1. OK. Then, use =YESTERDAY in any cell. Tomorrow could be =TODAY()+1.
Hola Aretradeser. Si usted podría compartir especificamente qué problema le tiene estancado en al proceso de escribir tal macro, con mucho gusto alguien de aquí le ayuda en tratar de avanzar sus labores. Favor comparte con nosotros lo que usted ha desarrollado hasta el momento y cuál es el aspecto que le tiene parado.
 
Upvote 0
No se como hacer ese código. Lo he intentado con la grabadora de macros, pero no sale prácticamente nada. Mucho le agradecería que me indicara las líneas de código e ir adaptándolas poco a poco a mi archivo excel.
Muchas gracias por su rápida respuesta e interés.
 
Upvote 0
Hola,

Algo como

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Target.Column <> 8 Then Exit Sub
MsgBox Target.Offset(0, -2)
End Sub
 
Upvote 0
Tengo unas preguntas para saber mejor ciertos aspectos del diseño que sería prudente tomar en cuenta desde el inicio.

1. Usted indica que «al seleccionar tal valor en columna H» haga tal y tal. ¿Esto de veras sería el mejor gatillo? ¿O sea cada vez que el usuario cambia el valor en celda H2, hay que copiar el archivo? Cuando selecciono «anulado», el macro guarda tal archivo en la carpeta «anulado». ¿Pero si una hora después cambio H2 de «anulado» a «en trámite», guardo el archivo que se encuentra en F2 en la carpeta «en trámite»?

2. Vinculado a 1, ¿qué pasa con el archivo original? ¿Siempre hay copia en la carpeta original? ¿O estamos moviendo el archivo, no simplemente guardándolo?

3. ¿Si estamos moviendo el archivo, actualizamos el vínculo en F2 para que esté de acuerdo con la dirección nueva? ¿O suprimimos el vínculo en columna F?

4. Un gatillo alternativo sería un botón. O sea, en vez de que el macro corre tan pronto como hay un cambio en la columna H, el usuario puede ir cambiando varias celdas en H, y cuando ha cambiado todas las celdas deseadas, hace un cliq para procesar todas de una vez. También esto ayuda con los casos donde el usario mete la pata y escoge la opción equivocada. Así le ofrecimos la oportunidad de corregir su selección antes de guardar el archivo.
 
Last edited:
Upvote 0
Muchas gracias por su respuesta.
Me parece que lo expresado en su punto 4 es una solución brillante,
Hay que tener en cuenta algunas cuestiones:
El archivo original hay que moverlo en cada ocasión, no guardarlo. Tampoco debe quedar copia en la carpeta original.
El vínculo hay que modificarlo cada vez que se mueva el archivo.
Espero haberle aclarado sus dudas.
 
Upvote 0
Bueno. Para que sepa, esto será un proceso que tendrá por lo menos una docena de pasos. Lo más probable veinte o más. Pero al terminar usted entenderá qué hemos hecho y sabrá mucho más sobre cómo solucionar problemas de Excel usted mismo en el futuro. Si usted está dispuesto entonces el primero paso sería hacer que una vez que usted cambia el valor en la columna H, tal celda cambia de color.

Para lograr este primer paso, utilice la grabadora de macros de Excel y cambia el color de unas celdas. Así usted verá el código necesario para esto. Después vea lo que puso James006 y trate de adaptar lo que él escribió para utilizar lo que la grabadora de macros le proveyó.

Con estas dos pistas usted debe poder descubrir el rastro indicado.
 
Last edited:
Upvote 0
Este es el código que me da la grabadora de macros cuando elijo cada una de las opciones de la validación de datos en "H2", cambio en color en "G2"
Code:
Sub Color()'
' Color Macro
'


'
    Range("G2").Select
    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorLight1
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
    Range("G2").Select
    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .Color = 26367
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
    Range("G2").Select
    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .Color = 8421504
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
    Range("G2").Select
    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .Color = 255
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
    Range("G2").Select
    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .Color = 255
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .Color = 5287936
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
    Range("G2").Select
    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorLight2
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
End Sub
Pero no se como adaptar el código facilitado por James006.
Muchas gracias
 
Upvote 0
Pero no se como adaptar el código facilitado por James006.
Muchas gracias

Bueno, para darme una idea de tus habilidades actuales:

Si yo le pidiera que escribiera un macro que indicara la dirección de la celda seleccionada en la barra de estado (status bar) de Excel cada vez que el usuario selecciona una celda diferente, ¿usted sería capaz de hacer esto?.
 
Last edited:
Upvote 0

Forum statistics

Threads
1,223,275
Messages
6,171,121
Members
452,381
Latest member
Nova88

We've detected that you are using an adblocker.

We have a great community of people providing Excel help here, but the hosting costs are enormous. You can help keep this site running by allowing ads on MrExcel.com.
Allow Ads at MrExcel

Which adblocker are you using?

Disable AdBlock

Follow these easy steps to disable AdBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the icon in the browser’s toolbar.
2)Click on the "Pause on this site" option.
Go back

Disable AdBlock Plus

Follow these easy steps to disable AdBlock Plus

1)Click on the icon in the browser’s toolbar.
2)Click on the toggle to disable it for "mrexcel.com".
Go back

Disable uBlock Origin

Follow these easy steps to disable uBlock Origin

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back

Disable uBlock

Follow these easy steps to disable uBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back
Back
Top