Klic Excel funkcije iz Access-a

Pomoč pri izdelavi makrov
Odgovori
Ales
Prispevkov: 2
Pridružen: Če Okt 27, 2005 9:29 am

Klic Excel funkcije iz Access-a

Odgovor Napisal/-a Ales »

Pozdravljeni, imam sledečo težavo. V Excelu imam napisano lastno funkcijo v VBA, sedaj pa bi želel to funkcijo uporabiti v Accessu. Enostavno prekopirati je ne morem, ker funkcija uporablja neke podatke, ki so zapisani v excel datoteki, v kateri je tudi modul, kjer je zapisana funkcija.

Verjetno bi se torej moral nekako sklicevati na Workbook (D:\MojiMakri.xls) in ime funkcije (fKoda). Ima kdo kakšno idejo?

Hvala za odgovor,
LP Aleš
admin
Site Admin
Prispevkov: 3687
Pridružen: Sr Jul 20, 2005 10:06 pm

Odgovor Napisal/-a admin »

Pozdravljeni,

pravo vprašanje je, kaj funkcija naredi. Če imate funkcijo v Excelu, ki popravlja/uporablja Excelove podatke, potem ni problema. Odprete Excel in izvedete funkcijo. Več najdete v datoteki matjazev_net.chm, ki jo lahko snamete z naslova http://www.matjazev.net/pnew/index.php? ... ev_net.chm. V datoteki poiščite tematiko z naslovom 'Povezava Worda in Excela' in tam boste našli popoln odgovor, ki se sicer nanaša na kombinacijo Word-Excel, a Access-Excel je pač isti šmorn.

Če pa pričakujete da bo procedura pisana v Excelu (za Excel) spreminjala Access-ove podatke, potem pa to ne bo šlo. No razen, če Excel zopet kliče Access in tako dalje.... A da bi imeli Access, ki kliče Excel in ta nato kliče nazaj Access pomeni, da ste nekje vmes globoko zašli :).
lp,
Matjaž Prtenjak
Administrator
Ales
Prispevkov: 2
Pridružen: Če Okt 27, 2005 9:29 am

Odgovor Napisal/-a Ales »

Zdravo, mislim de se nisva razumela. Zadeva je bolj preprosta.
V Accessu želim uporabiti funkcijo in z njo urejati podatke v Accessu.
Le funkcija se nahaja v Excelovem zvezku. Za ponazoritev 2 primera:

Primer 1: Če kličem Excel vgrajeno funkcijo mi je stvar jasna. Spodaj sem v Accessu uporabil RoundUp funkcijo iz Excela

Public Function fTest2(vnos As Double) As Double
Dim objExcel As Excel.Application
Set objExcel = CreateObject("Excel.Application")
fTest2 = objExcel.WorksheetFunction.RoundUp(vnos, 0)
objExcel.Quit
Set objExcel = Nothing
End Function



Primer 2: Tu pa bi želel uporabiti mojo lastno funkcijo

Public Function fTest3(vnos As Double) As Double
Dim objExcel As Excel.Application
Set objExcel = CreateObject("Excel.Application")

pot="C:\Documents and Settings\Ales\Application Data\Microsoft\Excel\XLSTART\MojiMakri.xls"

fTest3 = objExcel.Workbooks(pot).fKoda(vnos) ' TEŽAVA
objExcel.Quit
Set objExcel = Nothing
End Function

Očitno vrstica "Težava" ni OK, ker zadeva ne dela.
Upam da je sedaj kaj razumljivejše.

Hvala in lep pozdrav, Aleš.
admin
Site Admin
Prispevkov: 3687
Pridružen: Sr Jul 20, 2005 10:06 pm

Odgovor Napisal/-a admin »

Pozdravljeni,

sem skoraj pozabil na vas :). No rešitev je relativno "preprosta". Preprosta sem dal v narekoveja, ker je tehnično vse OK, samo klic je malce drugačen (prikazan spodaj), boste pa imeli probleme, ker vas bo čakalo okno, ali lahko omogočite makre. Tega okna pa se lahko znebite tako, da makre podpišete ali pa da zaščito pred makri izkjučite.

No sama koda pa je preprosta in gre za klic metode run, ki kot prvi parameter sprejme ime makra in nato posamezne parametre makra. v vašem primeru torej:

Koda: Izberi vse

fTest3 = objExcel.Run("MojiMakri!fKoda", vnos) ' ni več težave
lp,
Matjaž Prtenjak
Administrator
Odgovori