Teoria Sobre MACROS EXCEL 1

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 15

TÓPICOS DE EXCEL

(Material teórico gratuito 2019)

4. Grabación de Macros y Programación VBA


4.1. Introducción

Suele suceder que, en el ejercicio de la profesión aplicando Excel, nos enfrentemos a tareas repetitivas que
debamos realizar manualmente.

Por otro lado, puede ocurrir que Excel no tenga integrada determinada función o característica que necesitemos
para cumplir con cierta tarea.

Es en estos casos en donde debemos plantearnos el aprender a utilizar la grabación de macros y a programar
nuestras funciones personalizadas con el lenguaje integrado de Excel, Visual Basic for Applications (VBA).
Dominando estas dos herramientas, podemos expandir casi infinitamente las capacidades propias de Excel.

Al dominar el lenguaje VBA, además, podremos escribir código que le diga a Excel que realice tareas que no
puedan ser grabadas. Por ejemplo, podremos escribir procedimientos que muestren cuadros de diálogo
personalizados, interactuar con otros programas en nuestra computadora, o programar nuestras propias
aplicaciones que funcionen en el entorno Excel.

El objetivo de este módulo es introducirnos en la programación de macros y funciones sencillas, como así
también, el ayudarnos a entender la estructura principal de un código VBA de nivel intermedio.

4.2. Grabación de macros en Excel con VBA

En este punto presentaremos la grabación de macros de Visual Basic para Aplicaciones (VBA):
componente clave para los usuarios que desean personalizar y automatizar Excel. También abordaremos
algunos aspectos de la optimización del código generado.

En computación, una macro (diminutivo de macro instrucción), es una serie de instrucciones que se almacenan
para que éstas se puedan ejecutar de manera secuencial mediante una sola llamada u orden de ejecución.

Realizando una analogía entre Excel y un teléfono, nosotros podemos marcar el número correspondiente todas
las veces que queramos llamar (realizar manualmente las tareas repetitivas en Excel) o almacenar dicho
número en la memoria del teléfono de modo que solamente debemos presionar un botón para realizar la
llamada (utilizar una macro para automatizar dichas tareas).

En Excel, las macros nos permiten trabajar de manera más eficiente y con menos errores, sobre todo en las
tareas repetitivas que requieren diversos pasos que puedan ser identificables.
Podemos crear una macro, por ejemplo, para formatear e imprimir el informe de ventas de fin de mes.

Con el uso de macros, podremos aumentar de forma impensada nuestra productividad en Excel.

No es necesario ser un experto en Excel para crear y usar macros simples de VBA. Una vez que se entienden
algunos principios básicos, resulta muy sencillo utilizar la herramienta grabación de macros de VBA. Cuando se
ejecute la macro grabada, Excel realizará las acciones de nuevo.

73
TÓPICOS DE EXCEL
(Material teórico gratuito 2019)

4.2.1. Traduciendo nuestras acciones en código VBA: la grabadora de macros

En esta sección, describiremos los pasos básicos que deberemos seguir para realizar la grabación de una macro
de VBA. La herramienta que nos ofrece Excel para llevar a cabo la memorización de las secuencias y comandos
se denomina Grabadora de macros.

Esta herramienta traducirá automáticamente nuestras acciones al código VBA, que Excel puede leer e
interpretar, para replicar nuestras acciones cuando activemos la macro.

En la mayoría de los casos, basta simplemente con grabar la macro, para que Excel memorice nuestras
secuencias de acciones y comandos. Cuando deseemos repetirlas, será suficiente con invocar la macro
correspondiente, sin importarnos cuál es el código VBA que Excel creó.

Resulta recomendable que podamos, al menos, entender qué dice el código. De esta manera podremos
optimizar y acelerar las tareas memorizadas por Excel.

4.2.2. Grabando nuestra primera macro

Como dijimos anteriormente, la grabadora de macros de Excel traduce nuestras acciones y comandos en código
VBA.

A) Podemos iniciar la grabación haciendo clic en el icono Grabar macro en el extremo inferior izquierdo de la
barra de estado). Figura 4.1

Figura 4.1. La grabadora de macros se puede


activar desde el icono ubicado en el sector
inferior derecho de la ventana de Excel.

Al activar esta opción, Excel mostrará la ventana Grabar Macro. (Figura 4.2)

Figura 4.2. La ventana Grabar macro nos permite


personalizar el nombre, el atajo del teclado, la ubicación de
la macro y agregarle una descripción.

El cuadro de diálogo Grabar macro presenta cuatro campos:

74
TÓPICOS DE EXCEL
(Material teórico gratuito 2019)

Nombre de la macro: Excel propone nombres genéricos, como Macro1, Macro2. Podemos cambiarlo, pero
deben empezar con una letra y no pueden contener espacios, ni signos de puntuación (se acepta el guion bajo
“_”).

Tecla de método abreviado: Podemos asignar un atajo del teclado para invocar a la macro.

El atajo del teclado siempre usa la tecla Ctrl. Opcionalmente, también podremos presionar la tecla MAYUSC
(Shift) al ingresar una letra. Por ejemplo, si presionamos MAYUSC (Shift) mientras ingresamos la letra h, el atajo
del teclado para llamar a nuestra macro será Ctrl + Shift + h
Recordar: Las teclas de acceso directo asignadas a las macros tienen prioridad sobre las teclas de método abreviado
incorporadas. Por ejemplo, si asignamos Ctrl + t a una macro, no podremos usar dicha combinación de teclas para crear una
tabla.

Guardar Macro en: Aquí podremos elegir donde se guardará la macro. Tendremos tres opciones:
Este libro: Guarda la macro en el libro en donde estemos trabajando. La macro será accesible solamente en el archivo
que generemos (con la extensión .xlsm)

Libro de macros personal: Guarda la macro en un archivo oculto que se inicia junto con Excel. La macro será accesible
en todos los libros de Excel que utilicemos en nuestra computadora.

Libro nuevo: Excel creará un libro nuevo y almacenará en código de la macro en éste.

Descripción: Podremos ingresar una descripción de la macro (no es obligatorio que lo hagamos).

B) Al presionar ACEPTAR, Excel comenzará a registrar nuestras acciones, convirtiéndolas a código VBA. Para
detener la grabación de la macro, podemos hacer clic en el icono STOP, ubicado en el mismo lugar que el
icono de la grabadora de macros. (Figura 4.3)

Figura 4.3. Cuando nos encontremos grabando una


macro, el icono correspondiente cambiará a un
símbolo de STOP. Haciendo clic en éste, podemos
detener la grabación de macros.

Si bien la anterior manera es la más rápida, no nos permite una opción muy importante que veremos a
continuación. Para poder activar dicha opción necesitaremos algún método alternativo.

Una forma alternativa de invocar a la grabadora de macros es a partir de la pestaña VISTA -> Macros -> Grabar
Macros. (Figura 4.4)

75
TÓPICOS DE EXCEL
(Material teórico gratuito 2019)

Figura 4.4. Desde la pestaña VISTA podremos


acceder a varias opciones de las macros.

Es importante, antes de grabar nuestra primera macro, el mencionar la opción “Usar referencias relativas”.
(Figura 4.5)

Figura 4.5. Si esta opción está desactivada, la macro se ejecutará


EXACTAMENTE en las celdas en donde las grabamos. Si la opción está
activada, la macro se ejecutará utilizando a la celda activa como la posición
INICIAL RELATIVA.

4.2.3. Ejemplo (Referencias Absolutas)

Vamos a grabar nuestra primera macro, la misma consiste en darle un formato de celda color naranja a las
celdas A1, B1 y C1. En este caso NO utilizaremos referencias relativas, con lo cual debemos desactivar dicha
opción, seguiremos los siguientes pasos:

1) En la pestaña Vista -> Macros, verificamos que la opción Referencias Relativas esté desactivada.

2) En la pestaña Vista -> Macros, seleccionaremos la opción Grabar Macro (también podemos invocar a la
grabadora de macros desde el icono mencionado anteriormente.

3) En la ventana, completaremos los campos con la siguiente información. (figura 4.6):

A
B
C
Figura 4.6. Campo A: Celdas_Naranjas_Ref_Absoluta. Campo B:

D E Ctrl + n, Campo C: Este libro, Campo D: Esta macro le da formato


relleno naranja a las celdas A1, B1 y C1

4) Luego de presionar aceptar, Excel entrará en modo de grabación de macros, y todo lo que hagamos será
traducido a código VBA. Es importante aclarar que el tiempo que tardemos en grabar la macro no será tenido

76
TÓPICOS DE EXCEL
(Material teórico gratuito 2019)

en cuenta en la creación del código, pero si la cantidad de pulsaciones del mouse o acciones que realicemos
(¡Debemos optimizar la cantidad de pasos a seguir!).

5) En este paso realizaremos las acciones que serán grabadas en el código VBA, es decir: seleccionaremos las
celdas A1, B1 y C1 y le daremos un formato de relleno color naranja, una vez hecho esto, hacemos clic en el
botón STOP descripto anteriormente.

6) Cada vez que presionemos la combinación CTRL+n, Excel le dará formato relleno naranja a las celdas A1, B1,
y C1 de la hoja que tengamos activa.

Hemos grabado nuestra primera macro. ¿Exactamente qué fue lo que memorizó Excel?

4.2.4. Examinando el Código de una macro

Ya sabemos que, al grabar macros en Excel, nuestras acciones, secuencias y comandos realizados, se traducirán
a código VBA que luego, al activar la macro grabada, Excel repetirá siguiendo las directivas de este código
memorizado.

Nosotros podemos ingresar al código generado para analizarlo y, eventualmente, modificarlo para poder
optimizarlo. Las razones para hacer esto son varias.

La razón principal se da porque, al transcribir en el código VBA las acciones y comandos realizados, Excel utiliza
bloques de código prestablecidos que muchas veces resultan redundantes, y agregan complejidad innecesaria
a la interpretación y ejecución del código.

Una de las maneras más sencillas de explorar el código generado por una Macro es a partir de la pestaña Vista
-> Macros -> Ver Macros. Una vez abierta la ventana Macros, hacemos clic en Modificar. (Figura 4.7)

Figura 4.7. La ventana de macros se puede activar también


con la combinación de teclas Alt + F8.

77
TÓPICOS DE EXCEL
(Material teórico gratuito 2019)

Se mostrará una ventana independiente a Excel denominada Editor de Visual Basic (VBE). El VBE es el entorno
para programar en Visual Basic para Aplicaciones (VBA). Su interfaz está compuesta por varias partes (figura
4.8), que describiremos en clases.

En este apartado nos enfocaremos en la ventana más grande, denominada Área de trabajo.

Figura 4.8. En esta ventana se volcará todo el código memorizado por la macro. Es importante destacar que nosotros podríamos hacer
el ingreso manual del mismo y éste arrojaría el mismo resultado que la macro.

El código resultante para nuestra macro anterior es el siguiente:

________________________________________________
Sub Celdas_Naranjas_Ref_Absoluta()
'
' Celdas_Naranjas_Ref_Absoluta Macro
' Esta macro le da formato relleno naranja a las celdas A1, B1 y C1
'
' Acceso directo: CTRL+n
'
Range("A1:C1").Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorAccent2
.TintAndShade = 0
.PatternTintAndShade = 0
End With
End Sub
________________________________________________

78
TÓPICOS DE EXCEL
(Material teórico gratuito 2019)

El lenguaje Visual Basic for Applications (VBA) es un lenguaje orientado a objetos al igual que su hermano mayor
Visual Basic (VB).

Si bien ambos lenguajes son casi idénticos en lo que respecta a la construcción del código; VB permite generar
programas independientes que funcionan en el entorno Windows, mientras que VBA necesita de un programa
anfitrión y los “programas” que genere su código funcionarán dentro de ese programa principal.

Vamos a realizar este primer análisis de una manera bastante informal, separando el código en bloques. Para
quien entienda el idioma inglés, resulta bastante simple la interpretación de las expresiones del código.

Bloque 1: Generar una Subrutina. Como un primer paso VBA necesita saber qué queremos hacer. Cuando
queremos una secuencia de instrucciones que se sucedan a partir de un código VBA, necesitamos crear una
Subrutina.

Las subrutinas son tipos de procedimientos que contienen determinadas instrucciones (más adelante lo veremos
con mayor profundidad). La subrutina tendrá el nombre de la macro.

Excel Graba lo siguiente.

_________________________________
Sub Celdas_Naranjas_Ref_Absoluta()
End sub
___________________________

Bloque 2: Comentarios. El segundo paso es (optativamente) grabar todos los comentarios que queramos hacer
en el código (los comentarios figurarán en verde y serán antecedidos por un apostrofe). Este texto auxiliar no
será tenido en cuenta por Excel a la hora de ejecutar el código.

La opción de agregar apostrofes delante de una línea es muy utilizada por los programadores de VBA para
testear y optimizar código sin necesidad de eliminar dicha línea.

_______________________________________________________
Sub Celdas_Naranjas_Ref_Absoluta()
'
' Celdas_Naranjas_Ref_Absoluta Macro
' Esta macro le da formato relleno naranja a las celdas A1, B1 y C1
'
' Acceso directo: CTRL+n
'
End sub

________________________________________________________

79
TÓPICOS DE EXCEL
(Material teórico gratuito 2019)

Bloque 3: Primera instrucción. En nuestra macro, la primera instrucción era seleccionar las celdas A1, B1 y C1,
es exactamente lo que se traduce en el código.

__________________________________________
Sub Celdas_Naranjas_Ref_Absoluta()
'
' Celdas_Naranjas_Ref_Absoluta Macro
' Esta macro le da formato relleno naranja a las celdas A1, B1 y C1
'
' Acceso directo: CTRL+n
'
Range("A1:C1").Select

End sub
____________________________________

Notemos que, estamos completando el código generado por la macro, paso a paso a fines de poder interpretar
la metodología interna de Excel en lo que respecta a la grabación de una macro.

Bloque 4: Lote de instrucciones. La siguiente instrucción de nuestra macro, consiste en darle un formato color
naranja. En esta parte veremos una estructura, habitualmente utilizada por Excel al grabar macros, que permite
generar un lote de instrucciones relacionadas.

La estructura WITH nos permite el no tener que repetir instrucciones distintas (pero que estén relacionadas por
el mismo objeto).

________________________________________________
Sub Celdas_Naranjas_Ref_Absoluta()
'
' Celdas_Naranjas_Ref_Absoluta Macro
' Esta macro le da formato relleno naranja a las celdas A1, B1 y C1
'
' Acceso directo: CTRL+n
'
Range("A1:C1").Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorAccent2
.TintAndShade = 0
.PatternTintAndShade = 0
End With
End Sub
________________________________________________

80
TÓPICOS DE EXCEL
(Material teórico gratuito 2019)

La estructura en negrita es equivalente a la siguiente (El objeto repetido es Selection.Interior):


Selection.Interior.Pattern = xlSolid
Selection.Interior.PatternColorIndex = xlAutomatic
Selection.Interior.ThemeColor = xlThemeColorAccent2
Selection.Interior.TintAndShade = 0
Selection.Interior.PatternTintAndShade = 0

En términos coloquiales, Excel está memorizando:


Selection.Interior.Pattern = xlSolid
(Démosle una trama de relleno sólido al interior de las celdas seleccionadas, ver figura 4.9)

Figura 4.9. El código VBA está replicando la opción Estilo de


Trama de la pestaña Relleno de la ventana Formato de
Celdas

Selection.Interior.PatternColorIndex = xlAutomatic
(Démosle el color prestablecido de la paleta de colores usada en Excel a la trama, ver figura 4.10)

Figura 4.10. El código VBA está replicando la opción Color


de Trama de la pestaña Relleno de la ventana Formato de
Celdas

Selection.Interior.ThemeColor = xlThemeColorAccent2
(Démosle al interior de la celda, el color “Énfasis 2”, ver figura 4.11)

Figura 4.11. El código VBA está replicando la opción


correspondiente a la ventana Colores del tema.

81
TÓPICOS DE EXCEL
(Material teórico gratuito 2019)

Selection.Interior.TintAndShade = 0
(Dejemos el color como está, no lo oscurezcamos min = -1, ni lo aclaremos máx = 1)

Selection.Interior.PatternTintAndShade = 0
(Dejemos el color de la trama del relleno como está, sin oscurecerla ni aclararla, ídem anterior)

Como dijimos, con la estructura WITH, evitamos tener que definir constantemente el objeto selection.interior
con sus diferentes propiedades, solamente lo hacemos una vez, y luego (dentro del WITH) definimos las distintas
propiedades de dicho objeto, con sus valores correspondientes. Cuando dejamos de hacer referencia al objeto
en cuestión, cerramos la estructura con END WITH.

Nuestra primera conclusión, es que grabar macros es una muy buena forma de aprender a entender el código
VBA al momento de dar nuestros primeros pasos en programación en Excel.

4.2.5. Ejemplo (Referencias Relativas)

En este caso vamos a grabar una macro, con las mismas características que la anterior, pero utilizando
referencias relativas. Activando dicha opción en la pestaña Vista -> Macros, procederemos a grabar una macro
que siga los mismos pasos que la anterior. El código generado será el siguiente:

_________________________________________________
Sub Celdas_Naranjas_Ref_Relativas()
'
' Celdas_Naranjas_Ref_Relativas Macro
' Le da formato color naranja a tres celdas contiguas horizontalmente
'
' Acceso directo: CTRL+r
'
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorAccent2
.TintAndShade = 0
.PatternTintAndShade = 0
End With
End Sub
___________________________________________

Para estas alturas, ya tenemos la capacidad de comprender cuál es el nombre de la macro, cuál es el atajo del
teclado y que acciones genera el código, muy similar al anterior. La diferencia radica en que no hace referencia
en particular, a una celda o rango, sino que solamente expone una selección y a dicha selección le aplica el lote
de instrucciones dentro de la estructura WITH.

En la figura 4.12 vemos que, al aplicar la macro a una selección cualquiera, ésta le aplicará el formato que figura
en el código.

82
TÓPICOS DE EXCEL
(Material teórico gratuito 2019)

Figura 4.12. Al usar Referencias Relativas, la macro se aplicará a toda la selección.

4.2.6. Optimizando el código generado por la macro

Como mencionamos anteriormente, si bien no es indispensable entender el código VBA creado por la macro,
esto resulta muy recomendable para poder optimizar o modificar la generación automática de dicho código
manualmente.

Tomemos por ejemplo el caso de la macro anterior y su código generado:

___________________________________________
Sub Celdas_Naranjas_Ref_Relativas()
'
' Celdas_Naranjas_Ref_Relativas Macro
' Le da formato color naranja a tres celdas contiguas horizontalmente
'
' Acceso directo: CTRL+r
'
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorAccent2
.TintAndShade = 0
.PatternTintAndShade = 0
End With
End Sub
___________________________________

Vemos que existen algunas líneas, dentro de la estructura WITH, que hacen referencia a ciertos parámetros que
Excel utiliza por defecto; por ejemplo:
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.TintAndShade = 0
.PatternTintAndShade = 0

En estas líneas, antes de editar el código, agregaremos un apostrofe al principio de cada una, para convertirlas
en comentarios y que Excel las ignore al ejecutar la macro.

83
TÓPICOS DE EXCEL
(Material teórico gratuito 2019)

__________________________________________
Sub Celdas_Naranjas_Ref_Relativas()
'
' Celdas_Naranjas_Ref_Relativas Macro
' Le da formato color naranja a tres celdas contiguas horizontalmente
'
' Acceso directo: CTRL+r
'
With Selection.Interior
'.Pattern = xlSolid
'.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorAccent2
'.TintAndShade = 0
'.PatternTintAndShade = 0
End With
End Sub
___________________________________

Excel, al ejecutar la macro, solamente tendrá en cuenta, dentro de la estructura WITH, la línea correspondiente
al color del interior de las celdas.

Al correr la macro, vemos que se obtiene el mismo resultado, con este código modificado.

La estructura WITH ahora no tiene sentido, ya que solamente se utiliza una línea dentro de ésta, con lo cual
podemos eliminar la estructura y los comentarios dentro de la misma, quedando el código de la siguiente
manera:

_________________________________________
Sub Celdas_Naranjas_Ref_Relativas()
'
' Celdas_Naranjas_Ref_Relativas Macro
' Le da formato color naranja a tres celdas contiguas horizontalmente
'
' Acceso directo: CTRL+r
'
Selection.Interior.ThemeColor = xlThemeColorAccent2

End Sub
___________________________________

A continuación, veremos cómo generar atajos del teclado personalizados con macros:

84
TÓPICOS DE EXCEL
(Material teórico gratuito 2019)

4.2.7. Ejemplo: Pegar Valores con atajo de teclado

Como sabemos, lamentablemente Excel no trae configurado por defecto un atajo de teclado para Pegar
Valores. Vamos a valernos de la grabación de macros para conseguir esto. En este módulo proponemos la
siguiente secuencia.

1) Utilizar referencias relativas para grabar la macro.

2) En una celda cualquiera presionar CTRL+c, para copiar su contenido.

3) Seleccionar otra celda cualquiera.

4) En este punto, comenzar a grabar la macro, vamos a seleccionar CTRL+q como atajo del teclado.

5) Con la celda seleccionada presionar CTRL+ALT+v (ventana de pegado especial), seleccionamos Valores,
hacemos clic en Aceptar.

6) Detener la grabación de macros.

85
TÓPICOS DE EXCEL
(Material teórico gratuito 2019)

El código generado será el siguiente:

__________________________

__________________________

Modificando manualmente el código podemos agregar saltos de líneas utilizando el separador “_ “. De esta
manera, resultará más sencillo leer el código instrucción a instrucción, quedando:

_______________________________
Sub Pegar_valores()
'
' Pegar_valores Macro
' Esta macro pega valores en la celda seleccionada
'
' Acceso directo: CTRL+w
Selection.PasteSpecial _
Paste:=xlPasteValues, _
Operation:=xlNone, _
SkipBlanks:=False, _
Transpose:=False
End Sub
______________________________

Es sencillo entender el código si lo comparamos con la ventana de pegado especial (Figura 4.13):

Figura 4.13. Cada línea de código de la macro puede ser


relacionada con una determinada opción en Excel.

86
TÓPICOS DE EXCEL
(Material teórico gratuito 2019)

4.3. Personalizando los mensajes de error

Siguiendo con la macro del ejemplo anterior, supongamos que queramos aplicar el atajo de teclado Ctrl+w sin
antes haber seleccionado nada (es decir, con el portapapeles vacío), por defecto, Excel nos mostrará el siguiente
mensaje emergente. (Figura 4.14):

Figura 4.14. Si el portapapeles está vacío y activamos la


macro grabada, Excel devolverá este críptico mensaje.

VBA maneja determinados códigos de errores, dependiendo de su tipo y procedencia.

El error 1004, entre otras cosas, se da cuando al utilizar en una macro la opción Paste (pegar), el portapapeles
está vacío.

Podemos realizar algunas modificaciones al código para obtener un mensaje de error menos críptico, para ellos
debemos aprender a utilizar la función MSGBOX que nos permite mostrar un cuadro de diálogo con algunos
grados de personalización.

4.3.1. La función MSGBOX


Esta función tiene 5 argumentos (1 obligatorio y 4 optativos), de los cuales en este módulo explicaremos los tres
primeros, ya que serán los más utilizados. Veamos el código propuesto:
________________________________

Sub Pegar_valores()
'
' Pegar_valores Macro
' Esta macro pega valores en la celda seleccionada
'
' Acceso directo: CTRL+w
On Error Resume Next
Selection.PasteSpecial _
Paste:=xlPasteValues, _
Operation:=xlNone, _
SkipBlanks:=False, _
Transpose:=False
If Err.Number = 1004 Then
Msgbox "El portapapeles está vacío", vbOKOnly + vbExclamation, _
"No hay ningun valor para pegar"
End If
End Sub
__________________________

87

También podría gustarte

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy