Contidos
- FunciĆ³ns VBA integradas
- Procedementos personalizados "FunciĆ³n" e "Sub" en VBA
- Argumentos
- Procedemento VBA Ā«FunciĆ³nĀ»
- Procedemento VBA Ā«SubĀ»
- Ćmbito do procedemento VBA
- SaĆda anticipada dos procedementos VBA "FunciĆ³n" e "Sub"
FunciĆ³ns VBA integradas
Antes de comezar a crear as sĆŗas propias funciĆ³ns VBA, Ć© bo saber que Excel VBA ten unha rica colecciĆ³n de funciĆ³ns integradas preconstruĆdas que pode usar mentres escribe o seu cĆ³digo.
PĆ³dese ver unha lista destas funciĆ³ns no editor de VBA:
- Abra un libro de Excel e inicie o editor VBA (faga clic para facelo Alt + F11) e, a continuaciĆ³n, prema F2.
- Seleccione unha biblioteca na lista despregable da parte superior esquerda da pantalla VBA.
- AparecerĆ” unha lista de clases e funciĆ³ns de VBA incorporadas. Fai clic no nome da funciĆ³n para mostrar a sĆŗa breve descriciĆ³n na parte inferior da xanela. presionando F1 abrirĆ” a pĆ”xina de axuda en liƱa para esa funciĆ³n.
Ademais, pĆ³dese atopar unha lista completa de funciĆ³ns VBA integradas con exemplos no Centro de Desenvolvedores de Visual Basic.
Procedementos personalizados "FunciĆ³n" e "Sub" en VBA
En Excel Visual Basic, un conxunto de comandos que realizan unha tarefa especĆfica colĆ³case nun procedemento. funciĆ³n (FunciĆ³n) ou submarino (Subrutina). A principal diferenza entre os procedementos funciĆ³n Šø submarino Ć© ese o procedemento funciĆ³n devolve resultado, procedemento submarino - non.
Polo tanto, se precisa realizar acciĆ³ns e obter algĆŗn resultado (por exemplo, sumar varios nĆŗmeros), adoita utilizarse o procedemento. funciĆ³n, e para simplemente realizar algunhas acciĆ³ns (por exemplo, cambiar o formato dun grupo de celas), cĆ³mpre seleccionar o procedemento submarino.
Argumentos
PĆ³dense pasar varios datos aos procedementos VBA mediante argumentos. A lista de argumentos especifĆcase ao declarar un procedemento. Por exemplo, o procedemento submarino en VBA engade o nĆŗmero enteiro dado (Enteiro) a cada cela do intervalo seleccionado. Podes pasar este nĆŗmero ao procedemento usando un argumento, como este:
Sub AddToCells(i As Integer) ... End Sub
TeƱa presente que ter argumentos para os procedementos funciĆ³n Šø submarino en VBA Ć© opcional. AlgĆŗns procedementos non requiren argumentos.
Argumentos opcionais
Os procedementos VBA poden ter argumentos opcionais. Estes son argumentos que o usuario pode especificar se quere e, se se omiten, o procedemento utiliza os valores predeterminados para eles.
Volvendo ao exemplo anterior, para facer un argumento enteiro para unha funciĆ³n opcional, declararĆase asĆ:
Sub AddToCells (Opcional i Como enteiro = 0)
Neste caso, o argumento enteiro i o valor predeterminado serĆ” 0.
Pode haber varios argumentos opcionais nun procedemento, todos eles listados ao final da lista de argumentos.
Pasando argumentos por valor e por referencia
Os argumentos en VBA pĆ³dense pasar a un procedemento de dĆŗas formas:
- Por Val ā pasar un argumento por valor. Isto significa que sĆ³ se pasa o valor (Ć© dicir, unha copia do argumento) ao procedemento e, polo tanto, os cambios realizados no argumento dentro do procedemento perderanse ao finalizar o procedemento.
- PorRef ā pasar un argumento por referencia. Ć dicir, o enderezo real da localizaciĆ³n do argumento na memoria pĆ”sase ao procedemento. Calquera cambio que se realice nun argumento dentro do procedemento gardarase ao finalizar o procedemento.
Usando palabras clave Por Val or PorRef na declaraciĆ³n do procedemento, pode especificar como se pasa o argumento ao procedemento. Isto mĆ³strase nos seguintes exemplos:
Sub AddToCells(ByVal i As Integer) ... End Sub | Neste caso, o argumento enteiro i pasado por valor. Despois de abandonar o procedemento submarino todo feito con i os cambios perderanse. |
Sub AddToCells(ByRef i As Integer) ... End Sub | Neste caso, o argumento enteiro i pasado por referencia. Despois de abandonar o procedemento submarino todo feito con i os cambios almacenaranse na variable que se pasou ao procedemento submarino. |
Lembre que os argumentos en VBA pĆ”sanse por referencia por defecto. Noutras palabras, se non se usan palabras clave Por Val or PorRef, entĆ³n o argumento pasarase por referencia.
Antes de proceder aos trĆ”mites funciĆ³n Šø submarino con mĆ”is detalle, serĆ” Ćŗtil botar unha nova ollada Ć”s caracterĆsticas e diferenzas entre estes dous tipos de procedementos. A continuaciĆ³n mĆ³stranse breves discusiĆ³ns dos procedementos de VBA funciĆ³n Šø submarino e mĆ³stranse exemplos sinxelos.
Procedemento VBA Ā«FunciĆ³nĀ»
O editor de VBA recoƱece o procedemento funciĆ³ncando atopa un grupo de comandos entre as seguintes instruciĆ³ns de apertura e peche:
FunciĆ³n... Finalizar funciĆ³n
Como se mencionou anteriormente, o procedemento funciĆ³n en VBA (en oposiciĆ³n a submarino) devolve un valor. Para os valores de retorno aplĆcanse as seguintes regras:
- O tipo de datos do valor de retorno debe ser declarado na cabeceira do procedemento funciĆ³n.
- A variable que contĆ©n o valor de retorno debe chamarse do mesmo xeito que o procedemento funciĆ³n. Non Ć© preciso declarar esta variable por separado, xa que sempre existe como parte integrante do procedemento. funciĆ³n.
Isto estĆ” ben ilustrado no seguinte exemplo.
Exemplo de funciĆ³n VBA: RealizaciĆ³n dunha operaciĆ³n matemĆ”tica sobre 3 nĆŗmeros
O seguinte Ć© un exemplo de cĆ³digo de procedemento VBA funciĆ³n, que toma tres argumentos de tipo DĆŗas veces (nĆŗmeros de coma flotante de dobre precisiĆ³n). Como resultado, o procedemento devolve outro nĆŗmero de tipo DĆŗas vecesigual Ć” suma dos dous primeiros argumentos menos o terceiro argumento:
FunciĆ³n SumMinus(dNum1 como dobre, dNum2 como dobre, dNum3 como dobre) Como dobre SumMinus = dNum1 + dNum2 - dNum3 FunciĆ³n final
Este procedemento VBA moi sinxelo funciĆ³n ilustra como se pasan os datos a un procedemento mediante argumentos. Podes ver que o tipo de datos devolto polo procedemento estĆ” definido como DĆŗas veces (as palabras din Como Dobre despois da lista de argumentos). Este exemplo tamĆ©n mostra como o resultado do procedemento funciĆ³n almacenado nunha variable co mesmo nome que o nome do procedemento.
Chamar ao procedemento VBA "FunciĆ³n"
Se o procedemento simple anterior funciĆ³n inserido nun mĆ³dulo no editor de Visual Basic, pĆ³dese chamar desde outros procedementos VBA ou usar nunha folla de traballo nun libro de Excel.
Chame ao procedemento VBA "FunciĆ³n" desde outro procedemento
Procedemento funciĆ³n pĆ³dese chamar desde outro procedemento VBA simplemente asignando ese procedemento a unha variable. O seguinte exemplo mostra unha chamada a un procedemento Summinus, que se definiu anteriormente.
Sub main() Dim total as Double total = SumMinus(5, 4, 3) End Sub
Chame ao procedemento VBA "FunciĆ³n" desde unha folla de traballo
Procedemento VBA funciĆ³n pĆ³dese chamar desde unha folla de cĆ”lculo de Excel do mesmo xeito que calquera outra funciĆ³n integrada de Excel. Polo tanto, o procedemento creado no exemplo anterior funciĆ³n - Summinus pĆ³dese chamar introducindo a seguinte expresiĆ³n nunha cela da folla de traballo:
=SumMinus(10, 5, 2)
Procedemento VBA Ā«SubĀ»
O editor de VBA entende que hai un procedemento diante del submarinocando atopa un grupo de comandos entre as seguintes instruciĆ³ns de apertura e peche:
Sub... End Sub
Procedemento VBA "Sub": Exemplo 1. O aliƱamento central e o cambio de tamaƱo da fonte nun intervalo de celas seleccionado
Considere un exemplo dun procedemento VBA sinxelo submarino, cuxa tarefa Ʃ cambiar o formato do intervalo de celas seleccionado. As celas estƔn centradas (tanto vertical como horizontalmente) e o tamaƱo da fonte cƔmbiase ao especificado polo usuario:
Sub Format_Centered_And_Sized (iFontSize opcional como enteiro = 10) Selection.HorizontalAlignment = xlCenter Selection.VerticalAlignment = xlCenter Selection.Font.Size = iFontSize End Sub
Este procedemento submarino realiza acciĆ³ns pero non devolve un resultado.
Este exemplo tamĆ©n usa un argumento Opcional TamaƱo de letra. Se o argumento TamaƱo de letra non pasou a trĆ”mite submarino, entĆ³n o seu valor predeterminado Ć© 10. Non obstante, se o argumento TamaƱo de letra pasou a trĆ”mite submarino, entĆ³n o rango de celas seleccionado establecerase co tamaƱo de fonte especificado polo usuario.
Subprocedemento de VBA: exemplo 2: aliƱamento central e fonte en negra no intervalo de celas seleccionado
O seguinte procedemento Ć© similar ao que acabamos de comentar, pero esta vez, en lugar de redimensionar, aplica un estilo de letra en negra ao intervalo de celas seleccionado. Este Ć© un procedemento de exemplo submarino, que non leva argumentos:
Sub Format_Centered_And_Bold() Selection.HorizontalAlignment = xlCenter Selection.VerticalAlignment = xlCenter Selection.Font.Bold = True End Sub
Chamar ao procedemento "Sub" en Excel VBA
Chame ao procedemento VBA "Sub" desde outro procedemento
Para chamar a un procedemento VBA submarino doutro procedemento VBA, cĆ³mpre escribir a palabra clave Chamada, nome do procedemento submarino e mĆ”is entre parĆ©nteses estĆ”n os argumentos do procedemento. Isto mĆ³strase no seguinte exemplo:
Sub main() Call Format_Centered_And_Sized(20) End Sub
Se o procedemento Formato_Centrado_E_TamaƱo ten mƔis dun argumento, deben estar separados por comas. Como isto:
Sub main() Call Format_Centered_And_Sized(arg1, arg2, ...) End Sub
Chame ao procedemento VBA "Sub" desde a folla de traballo
Procedemento submarino non se pode introducir directamente nunha cela da folla de Excel, como se pode facer cun procedemento funciĆ³nporque o procedemento submarino non devolve un valor. Con todo, procedementos submarino, que non teƱen argumentos e declĆ”ranse como pĆŗblico (como se mostra a continuaciĆ³n) estarĆ” dispoƱible para os usuarios da folla de traballo. AsĆ, se os procedementos simples discutidos anteriormente submarino inserido nun mĆ³dulo no Editor de Visual Basic, o procedemento Formato_Centrado_E_NegriƱa estarĆ” dispoƱible para o seu uso nunha folla de cĆ”lculo de Excel e o procedemento Formato_Centrado_E_TamaƱo ā non estarĆ” dispoƱible porque ten argumentos.
AquĆ tes un xeito sinxelo de executar (ou executar) un procedemento submarino, accesible desde a folla de traballo:
- prensa Alt + F8 (preme a tecla alt e mentres o mantƩn premido, prema a tecla F8).
- Na lista de macros que aparece, selecciona a que queres executar.
- prensa Correr (correr)
Para realizar un procedemento submarino rƔpida e facilmente, pode asignarlle un atallo de teclado. Para isto:
- prensa Alt + F8.
- Na lista de macros que aparece, seleccione a que desexa asignar un atallo de teclado.
- prensa ParĆ”metros (OpciĆ³ns) e no cadro de diĆ”logo que aparece, introduza o atallo de teclado.
- prensa OK e pecha o diƔlogo Macro (Macro).
AtenciĆ³n: Ao asignar un atallo de teclado a unha macro, asegĆŗrese de que non se use como estĆ”ndar en Excel (por exemplo, Ctrl + C). Se seleccionas un atallo de teclado xa existente, reasignarase Ć” macro e, como resultado, o usuario pode iniciar a macro por accidente.
Ćmbito do procedemento VBA
A parte 2 deste titorial discutiu o alcance das variables e constantes e o papel das palabras clave. pĆŗblico Šø Privado. Estas palabras clave tamĆ©n se poden usar con procedementos VBA:
Public Sub AddToCells(i As Integer) ... End Sub | Se a declaraciĆ³n do procedemento vai precedida da palabra clave pĆŗblico, entĆ³n o procedemento estarĆ” dispoƱible para todos os mĆ³dulos dese proxecto VBA. |
Private Sub AddToCells(i As Integer) ... End Sub | Se a declaraciĆ³n do procedemento vai precedida da palabra clave Privado, entĆ³n este procedemento estarĆ” dispoƱible sĆ³ para o mĆ³dulo actual. Non se pode chamar mentres estĆ” en ningĆŗn outro mĆ³dulo ou desde un libro de Excel. |
Lembra que se antes de declarar un procedemento VBA funciĆ³n or submarino non se insire a palabra clave, establĆ©cese a propiedade predeterminada para o procedemento pĆŗblico (Ć© dicir, estarĆ” dispoƱible en todas partes neste proxecto VBA). Isto contrasta coas declaraciĆ³ns de variables, que son por defecto Privado.
SaĆda anticipada dos procedementos VBA "FunciĆ³n" e "Sub"
Se precisa finalizar a execuciĆ³n dun procedemento VBA funciĆ³n or submarino, sen esperar o seu final natural, entĆ³n para iso hai operadores FunciĆ³n de saĆda Šø SaĆr Sub. O uso destes operadores mĆ³strase a continuaciĆ³n usando un procedemento sinxelo como exemplo. funciĆ³nA que espera recibir un argumento positivo para realizar mĆ”is operaciĆ³ns. Se se pasa un valor non positivo ao procedemento, non se poden realizar mĆ”is operaciĆ³ns, polo que se lle debe mostrar unha mensaxe de erro ao usuario e o procedemento debe saĆr inmediatamente:
FunciĆ³n VAT_Amount(sVAT_Rate As Single) As Single VAT_Amount = 0 If sVAT_Rate <= 0 Then MsgBox "Esperaba un valor positivo de sVAT_Rate pero recibido" e sVAT_Rate FunciĆ³n de saĆda Final se... Finalizar funciĆ³n
TeƱa en conta que antes de completar o procedemento funciĆ³n - Importe_IVE, insĆrese unha funciĆ³n VBA integrada no cĆ³digo MsgBox, que mostra unha ventĆ” emerxente de aviso para o usuario.