El lenguaje de programación para Microsoft Excel , Visual Basic, le permite ampliar ya un amplio conjunto de herramientas de Excel. Sin embargo , la codificación directa en Visual Basic puede ser difícil porque algunas funciones (como la clasificación ) requieren establecer varios parámetros en un fashion.You exacto puede evitar la codificación manual por completo , dejando la grabadora de macros escribir el código para usted , pero esto no siempre net el resultado que buscan. La solución es combinar lo mejor de ambos mundos : el uso de macros para hacer la codificación a granel y un poco de codificación manual para terminar el trabajo . Ordenar una tabla pequeña
Utilizar Visual Basic para ordenar una mesa pequeña. Para comenzar, ingrese la siguiente tabla en células G8 a H11 en la Hoja 1 :
nombre del cliente, cuenta balanceZephyr Máquinas de viento , Escritorios 5Arondale , - 10Bubble Gumballs , 30
vez introducidos los datos , selecciónelo y empezar a grabar la macro ( desarrollador> Record macro ) . Nombre del MySort macro. Sort ( Datos> Ordenar de A a Z ) de los datos seleccionados en la primera columna , y detener la grabación de la macro .
Replay del Macro
Trate de usar la macro que recurrir un rango diferente : copiar y pegar la tabla de clientes a otra área de la hoja de cálculo y seleccione el nuevo rango. Repetir la macro ( desarrollador> Macros > MySort ) y observe el efecto : los datos no se ordenan . Busque el problema en el código de Visual Basic creado por la grabación de macros. Comience a navegar hacia el código: . Presione Alt- F8 , seleccione la macro MySort y haga clic en el botón Editar
Dentro de la función MySort , observe la siguiente declaración:
ActiveWorkbook.Worksheets
( "Sheet1 " . ) Clave Sort.SortFields.Add : = Range (" G-8 ") ...
Y una declaración unas pocas líneas después : .
SetRange Range ( " C9: D12 " )
Ambas declaraciones son la fuente del problema , sino que son las razones por las MySort no logra ordenar el rango seleccionado: el hard- coded de la gama Visual Basic macro registrador de datos ( " C9: D12 " y " G-8 " ) para ordenar . Su tarea es reemplazar los rangos codificados para que la macro ordenar la selección actual
Utilice la Selección propiedad
En concreto, el parámetro clave : . = Range ( " G-8 " ) le dice a Excel para ordenar la tabla de clientes sobre la base de la columna de "cliente " , que comienza en la celda G8. Para volver a colocar la columna "cliente " original con el interior del texto seleccionado , busque la propiedad Selection del objeto Application . Esta propiedad hace referencia al rango de celdas seleccionadas. Reemplace Clave: = Range (" G-8 ") con esto: Clave: = k. Usted define k en un momento
El siguiente rango no modificable para reemplazar ocurre algunas declaraciones abajo : . . SetRange Range (" G8: H11 ") . El método. SetRange indica a Excel toda la gama que desea ordenar . Reemplace SetRange Range ( " G8: H11 ") . Con esto: ". . SetRange r"
La variable r , como la variable k (ey) que acaba de escribir , vendrá de la propiedad Selection . Ir al inicio de la definición de la macro y escriba estas líneas :
Dim r , k como gama
Set r = k = Application.SelectionSet r.Columns ( 1 )
< p > la primera asignación Set define el rango de celdas necesarias para el método SetRange - . toda la selección. La segunda asignación establece el rango necesario para la clave de ordenación a la primera columna en la selección . Usted puede ordenar en la segunda columna , cambiando el " 1 " a " 2 . "
Probar la macro corregida
La corrección de código se haya completado. Prueba de que al volver a la hoja de cálculo , la selección de la tabla de clientes - donde quiera que lo colocó en la hoja - y corriendo MySort . Copie esta tabla a un nuevo conjunto de celdas , seleccione las celdas y ejecutar MySort en ellos de nuevo. Observe el tipo ahora funciona correctamente.