VBA Private versus openbare procedures (subs en functies)

In deze zelfstudie wordt het verschil uitgelegd tussen openbare en privédeclaraties in VBA en hoe u modules als privé kunt specificeren.

Publieke versus privé subprocedures

Procedures (sub en functies) kunnen in VBA privé of openbaar worden verklaard. Als ze openbaar zijn, betekent dit dat u ze vanuit het Excel-macrovenster kunt zien en dat ze overal in uw VBA-project kunnen worden aangeroepen. Als ze privé zijn, kunnen ze niet worden gezien in het Excel-macrovenster en zijn ze alleen beschikbaar voor gebruik binnen de module waarin ze zijn gedeclareerd (met normale methoden, zie onderaan dit artikel voor manieren om toegang te krijgen tot privéprocedures vanuit andere modules) .

Openbare functies kunnen worden aangeroepen als ingebouwde Excel-functies in het Excel-werkblad.

Opmerking: Variabelen en constanten kunnen ook openbaar of privé zijn.

Excel-macrovenster

Standaard zijn Excel-macro's (de meeste VBA-procedures) zichtbaar voor werkmapgebruikers in het macrovenster:

Deze worden beschouwd Openbaar procedures. U kunt procedures expliciet als openbaar definiëren door "Openbaar" toe te voegen vóór de Sub-instructie:

123 Openbare sub HelloWorld()MsgBox "Hallo wereld"Einde sub

Als u de procedure niet als Openbaar definieert, wordt deze als Openbaar beschouwd.

Om een ​​procedure als Privé te declareren, voegt u eenvoudigweg "Privé" toe vóór de subinstructie van de procedure:

123 Privé Sub HalloIedereen()MsgBox "Hallo allemaal"Einde sub

De tweede procedure zou niet zichtbaar zijn in het Macro-venster voor Excel-gebruikers, maar kan nog steeds worden gebruikt in uw VBA-code.

Procedures met argumenten

Subprocedures kunnen argumenten bevatten. Argumenten zijn inputs voor de subprocedure:

123 Sub Hallo (strName als string)MsgBox "Hallo" & strNameEinde sub

Als een subprocedure argumenten heeft, zal deze nooit in het macrovenster verschijnen, ongeacht of deze openbaar is verklaard, omdat er geen manier is om de argumenten te declareren.

Functies zullen ook nooit in het macrovenster verschijnen, ongeacht of ze openbaar zijn verklaard.

Openbare functies in Excel kunnen direct in een werkblad worden gebruikt als een 'User Defined Function' (UDF). Dit is in feite een aangepaste formule die rechtstreeks in een werkblad kan worden aangeroepen. Ze zijn te vinden in de categorie 'Door gebruiker gedefinieerd' in het venster 'Functie invoegen' of kunnen rechtstreeks in een cel worden getypt.

VBA-programmering | Code Generator werkt voor u!

Procedures gebruiken tussen modules in uw VBA-project

Openbare procedures kunnen vanuit elke module of elk formulier binnen uw VBA-project worden aangeroepen.

Als u probeert een privéprocedure vanuit een andere module aan te roepen, resulteert dit in een fout (Opmerking: zie onderaan dit artikel voor een oplossing).

Opmerking: Openbare procedures en variabelen in klassenmodules gedragen zich iets anders en vallen buiten het bestek van dit artikel.

Verschillende modules kunnen procedures met dezelfde naam opslaan, op voorwaarde dat ze allebei privé zijn.

Als twee of meer procedures dezelfde naam hebben en openbaar zijn verklaard, krijgt u bij het uitvoeren van code een compileerfout 'Ambiguous Name gedetecteerd'.

Privémodules

Standaard zijn modules openbaar.

Om een ​​module privé te maken, plaats je het volgende trefwoord bovenaan de module.

1 Optie Privémodule

Als u een module als privé declareert, zijn eventuele procedures in de module niet zichtbaar voor Excel-gebruikers. Functieprocedures verschijnen niet in het venster Functie invoegen, maar kunnen nog steeds worden gebruikt in het Excel-blad zolang de gebruiker de naam van de functie kent!

Subprocedures verschijnen niet in het macrovenster, maar zijn nog steeds beschikbaar voor gebruik binnen het VBA-project.

Toegang krijgen tot een privéprocedure vanuit een andere module

Zoals hierboven vermeld, zijn privéprocedures niet toegankelijk in andere codemodules via "normale" methoden. U kunt echter toegang krijgen tot privéprocedures met behulp van de Toepassing.Uitvoeren commando beschikbaar in VBA.

Overweeg de volgende 3 modules.

Module 2 is een Privaat Module met een Openbaar Subprocedure, terwijl Module3 is Openbaar module met een Privaat Subprocedure.

In Module 1 kunnen we Hello World noemen - de Optie Privémodule bovenaan weerhoudt ons er niet van om de subprocedure aan te roepen - het enige wat het dient te doen is de subprocedure in het macrovenster te verbergen.

We hebben de Call-instructie ook niet nodig - deze is er om de code leesbaarder te maken.

De code kan er ook als volgt uitzien:

1234 Suboproep HalloVanPrivé()'bel een sub vanuit een privémodule'Hallo WereldEinde sub

We kunnen ook de HelloWorld-subprocedure uitvoeren met behulp van de VBA Toepassing.Uitvoeren opdracht.

In Module 3 is de GoodMorningWorld-procedure echter Privaat verklaard. Je kunt het niet vanuit een andere module oproepen met 'normale' middelen, dwz de oproepopdracht.

Je moet gebruiken Toepassing.RunCommand om een ​​Private Sub uit te voeren vanuit een andere module.

1234 SuboproepGoedemorgen()'voer een privé-sub uit vanuit een openbare module'Application.Run ("GoodMorningWorld")Einde sub

Let op wanneer u de gebruikt Toepassing.RunCommand commando, moet u de naam van de Subprocedure tussen aanhalingstekens plaatsen.

Als we de Call-instructie proberen te gebruiken om de GoodMorningWorld-subprocedure uit te voeren, treedt er een fout op.

U zal helpen de ontwikkeling van de site, het delen van de pagina met je vrienden

wave wave wave wave wave