La grabación de macros es una gran ayuda para encontrar los métodos y propiedades de Visual Basic que desea utilizar. Si no sabe qué propiedades y métodos utilizar, active la grabación de macros y realice la acción manualmente. La grabación de macros traduce sus acciones en código Visual Basic. Sin embargo, existen algunas restricciones a la hora de grabar macros. No se puede grabar lo siguiente:
•Ramificaciones condicionales
•Asignaciones de variables
•Estructuras de bucle
•Formularios personalizados
•Tratamiento de errores
•Ajustes realizados en la interfaz de usuario de FlexPro
Para ampliar sus macros, puede que desee revisar el código que se ha grabado en su módulo.
Eliminación de la propiedad Selection
Las macros creadas mediante la grabación de macros suelen depender de la selección. Verá "Selection" al principio de la mayoría de las instrucciones de macro grabadas. Las macros grabadas utilizan la propiedad Selection para devolver el objeto Selection. En el siguiente ejemplo, se añade una línea a un conjunto de datos introduciendo el valor 0 en el campo mostrado en gris en el editor bajo la última fila del conjunto de datos.
Sub Macro1()
ActiveDatabase.ActiveObject.Selection.ActiveValue = 0#
ActiveDatabase.ActiveObject.Selection.Move fpDataSelectionDown
End Sub
Esta macro ejecuta la tarea, pero tiene la desventaja de que solo se ejecuta correctamente si, en primer lugar, el conjunto de datos se muestra actualmente en la ventana de conjunto de datos y, en segundo lugar, el campo de inserción bajo la última fila está seleccionado. Estos dos problemas pueden resolverse revisando la macro para que no utilice el objeto Selection. Esta es la macro revisada:
Sub MyMacro()
ActiveDatabase.ActiveObject.NumberOfRows = _
ActiveDatabase.ActiveObject.NumberOfRows + 1
ActiveDatabase.ActiveObject.Value(fpDataComponentAll, 1 _
, ActiveDatabase.ActiveObject.NumberOfRows) = 0#
End Sub
La primera instrucción añade una fila al conjunto de datos activo. La segunda instrucción utiliza el método Range para devolver un objeto Range que representa el valor recién insertado. El nuevo valor insertado se inicializa asignando el valor 0 a la propiedad Value de este objeto Range. Para más información sobre el uso del objeto Range, véase Trabajar con conjuntos de datos.
Uso de With...End With
Las instrucciones de macro que hacen referencia al mismo objeto pueden simplificarse utilizando la estructura With...End With. Por ejemplo, la siguiente macro se grabó cuando el texto seleccionado se cambió a fuente roja en negrita y tamaño de fuente de 10 puntos.
Sub Macro1()
ActiveDatabase.ActiveObject.Selection.Font.Bold = True
ActiveDatabase.ActiveObject.Selection.Font.Size = 10
ActiveDatabase.ActiveObject.Selection.LineFormat.Color = fpColorRed
End Sub
La propiedad Selection se utiliza con cada instrucción para devolver un objeto Selection. La macro puede simplificarse para que la propiedad Selection solo se utilice una vez.
Sub MyMacro()
With ActiveDatabase.ActiveObject.Selection
.Font.Bold = True
.Font.Size = 10
.LineFormat.Color = fpColorRed
End With
End Sub