Excel_VBA_manual
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
'lista_argumenata' je lista argumenata koja se predaje proceduri ili funkciji i mora se navesti<br />
toĉan tip varijable koja se predaje. Ako se poziva funkcija, poželjno je navesti i tip koji funkcija<br />
vraća - As tip – kako bi se vidjelo je li ispravno pridružena varijabli.<br />
<strong>VBA</strong> uĉitava DLL pri prvom pozivu funkcije iz DLL-a i on ostaje u memoriji dok se ne zatvori<br />
radna bilježnica u kojoj se nalazi taj <strong>VBA</strong> modul.<br />
2.3.4.2 Predaja argumenata po vrijednosti i po referenci<br />
<strong>VBA</strong> kod inicijalno predaje argumente preko referenci, a ne preko njihovih vrijednosti. Ako<br />
funkcija oĉekuje pokazivaĉ tada se argument predaje po referenci (ByRef), inaĉe se predaje po<br />
vrijednosti (ByVal).<br />
a) Primjer predaje argumenta ByVal – sljedeća funkcija je samo dio DLL-a i napisana je u<br />
programskom jeziku C++, a raĉuna opseg kruga za zadani radijus:<br />
double WINAPI opseg(double dRadius)<br />
{<br />
return dRadius * 2 * 3.14159;<br />
}<br />
U Windowsima, DLL funkcije koriste __stdcall konvenciju pozivanja funkcije. U ovom primjeru<br />
je upotrijebljena konstanta WINAPI koja u sebi već sadrži konvenciju __stdcall.<br />
Visual Basic kod koji koristi funkciju opseg za ispis u <strong>Excel</strong> tablici vrijednosti radijusa i njegovog<br />
odgovarajućeg opsega:<br />
Declare Function opseg Lib "primjer" _<br />
(ByVal radius As Double) As Double<br />
Sub TablicaOpsega( )<br />
Dim x As Double<br />
Worksheets(1).Activate<br />
Range("a1:c11").Clear<br />
Cells(1, 1).Value = "Radius"<br />
Cells(1, 2).Value = "Opseg Kruga"<br />
For i = 1 To 10<br />
Cells(i + 1, 1).Value = i<br />
Cells(i + 1, 2).Value = opseg(i)<br />
Next<br />
Columns("a:b").AutoFit<br />
End Sub<br />
Declare naredba koristi ByVal kljuĉnu rijeĉ, jer se argument prenosi po vrijednosti.<br />
25