Mitä eroa ala- ja yksityissubjektin välillä on Excel VBA: ssa?


Paras vastaus

Aliohjelmilla on näkyvyysalue. VBA: ssa julkista alihakemistoa ( kutsutaan ) voidaan käyttää mistä tahansa koodimoduulista. Yksityistä alisarjaa voidaan kutsua vain moduulista, jossa se sijaitsee.

Tämän käsitteen nimi on Scope. Objekteilla ja muuttujilla on myös soveltamisala .

Tässä on lyhyt esittely: Laajuuden ja näkyvyyden ymmärtäminen

Teemme alatason yksityisen, kun tiedämme että mikään nykyisen moduulin ulkopuolella oleva ei koskaan saa tehdä mitä tämä koodi on suunniteltu; rakennamme jotain tehtävää ja asiayhteyttä. Toisaalta meidän tulisi miettiä kovasti, kun teemme alijulkisen.

Kun kirjoitat VBA: ta muille käyttäjille kuin itsellesi, et todennäköisesti halua heidän soittavan koodisi suoraan. Jokainen julkinen alialusta, jos sillä ei ole parametreja, näkyy käyttäjien Macro-luettelossa. (Alt-F8)

Julkisten tilausten piilottaminen käyttäjältä (pitäisi) yleensä hoitaa itsensä; kun soitat Sub-moduuliin toisessa moduulissa, sinun on yleensä kerrottava sille, mitä sen on tiedettävä, välittämällä sille sopivat parametrit, eikä Julkisia tilauksia -parametreja näy käyttäjän luettelossa.

Mutta joskus on kätevää käyttää apuohjelmaa, johon voidaan soittaa mistä tahansa ja joka ei vaadi parametreja; sanoa laskentataulukon painikkeesta, joka kutsuu käynnistyskoodin julkiseen moduuliin. Et halua, että käynnistysmoduulisi näkyy käyttäjille.

Anna aliisi parametri, jota et koskaan käytä. Parempi on antaa sille parametri, jota ei tarvitse mainita. Katso valinnainen parametri alla olevasta kolmannesta osasta.

Option Explicit

Sub Visible()

" Can call this guy from anywhere;

" from any module or directly by the user.

" Sub (on it"s own) is lazy shorthand for "Public Sub"

Invisible

End Sub

Private Sub Invisible()

" This Sub can ONLY be called from inside its module.

" It is not shown in the Macro list available to the user.

Tricksy

End Sub

Public Sub Tricksy(Optional pIgnore As Boolean = True)

" This sub can be called from anywhere.

" It does not require a parameter (pIgnore).

" BUT, because it has a parameter, it does not appear

" in the user"s list of available "macros".

MsgBox "Hi there", vbExclamation, "Greetings from Tricksy"

End Sub

Käyttäjä voi nähdä ja kutsua alaliittymää

Näkyvä . Vain saman moduulin koodi voi kutsua sub Näkymätön . Tricky -soittoon voi soittaa mistä tahansa, eikä se vaadi parametria, mutta käyttäjä ei voi ”nähdä” sitä.

Soittaminen Näkyvä tulokset:

Virheenkorjauksessa voit soittaa julkisiin tilauksiin Välitön-ikkunasta ja voit tehdä sen milloin tahansa, kun koodi ei ole vielä käynnissä.

Voit kuitenkin soittaa yksityistilille Välitön-ikkunasta vasta, kun olet saavuttanut katkaisupisteen tai pysähtynyt jonnekin sen isäntämoduulissa. .

Vastaus

Yksityistä ja (Julkinen) alialuetta käytetään rutiinin laajuuden ilmoittamiseen .

Private Sub: tekee rutiinista vain saman moduulin sisällä kutsuvan toisen rutiinin.

Oletetaan, että sinulla on moduuli nimeltä Moduuli A ja tässä moduulissa sinulla on kaksi rutiinia:

  • Private Sub Hello\_World ()
  • alaviesti ()

Public Sub Message()

Call Hello\_World()

End Sub

Private Sub Hello\_World()

MsgBox “Hello World”

End Sub

Viesti -rutiini Hello\_World . Tämä oli mahdollista, koska molemmat rutiinit olivat samassa moduulissa (moduuli A).

Oletetaan, että sinulla on moduuli B ja seuraava rutiini :

Sub Message2()

Call Hello\_World()

End Sub

Tämä palauttaa käännösvirheen: ”Ala- tai toimintoa ei määritetty”.

Miksi?

Koska se soitti yksityinen rutiini ( Hello\_World ) toisesta moduulista. Ei mahdollista.

Public Sub: rutiini voidaan kutsua myös muilla eri moduulien rutiineilla. Kaikki rutiinit ovat oletusarvoisesti julkisia, joten ei ole tarpeen julistaa maailmaa aiemmin julkiseksi. Vain Sub riittää.

Sub ThisIsEnough()

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *