Procedementos "FunciĆ³n" e "Sub" en VBA

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.

Deixe unha resposta