Povezava Excela za zunanjimi programi

Pomoč pri izdelavi makrov
Odgovori
kalkul
Prispevkov: 3
Pridružen: Če Nov 10, 2005 5:40 pm

Povezava Excela za zunanjimi programi

Odgovor Napisal/-a kalkul »

Zdravo,

V Excelu br rad klical program (ki bi ga napisal v VB), da mi vrne vrednost.

Nekaj podobnega kot:

Koda: Izberi vse

  set obj =CreateObject("Project1.exe")
  testv=obj.testl("1")

Pa ne vem kako naj naredim program v VB-ju. Nočem pa, da se program mora registrirati (regsvr32). Lahko je exe, dll ali ocx.
Procedura v VB bi bila nekaj takega:

Koda: Izberi vse

Function testl(para)
  If para = "1" Then
    testl = "OK"
  Else
    testl = "NE"
  End If
End Function
LP Jože
admin
Site Admin
Prispevkov: 3687
Pridružen: Sr Jul 20, 2005 10:06 pm

Odgovor Napisal/-a admin »

Pozdravljeni,

Tako kot ste si zamislili ne bo šlo :). Program ne more vreniti vrednosti (no pravzaprav jo lahko vendar pa so to že napredne stvari in tudi niso namenjene temu, temveč sporočanju napak).

Če želite, da vam nekdo vrne neko vrednost morate napisati DLL (dinamično knjižnico) jo v Excelu naložiti izvesti neko funkcijo in to je to.

Ali pa napišete ActiveX komponento jo registrirate (reg...), kar pa nočete :).

V VB-ju morate torej napisati DLL in to je to.
lp,
Matjaž Prtenjak
Administrator
kalkul
Prispevkov: 3
Pridružen: Če Nov 10, 2005 5:40 pm

Odgovor Napisal/-a kalkul »

Zdravo!

V VB dam to proceduro v Class1 in naredim dll

V Excelu pa jo kličem

Koda: Izberi vse

Private Declare Function testl Lib "Project1.dll" (ByVal para As String) As String

procedure ....

  vr = testl("1")
....
Pa javi "Can't find DLL entry point testl in Project1.dll

Kje delam napako?

LP Jože
Sebastijan
Prispevkov: 17
Pridružen: To Jul 26, 2005 9:55 am
Kontakt:

Odgovor Napisal/-a Sebastijan »

Pa ste registrirali DLL?
kalkul
Prispevkov: 3
Pridružen: Če Nov 10, 2005 5:40 pm

Odgovor Napisal/-a kalkul »

Saj ideja je bila da dll ne bi bil registriran. Vendar ugotavljam za z VB to ni mogoče.

LP Jože
admin
Site Admin
Prispevkov: 3687
Pridružen: Sr Jul 20, 2005 10:06 pm

Odgovor Napisal/-a admin »

Kot sem vam že napisal, DLL-a ne registrirate temveč ga preprosto uporabite. Registrirati pa morate ActiveX objekt.

Če torej napišete DLL ga lahko direktno uporabite, morate pa seveda v 'Declare' vrstici napisati celotno pot do omenjenega DLL-a.

Napaka, ki se pojavi vam, preprosto pomeni, da niste zgradili pravega DLL-a, ker VBA ne najde vstopne funkcije DLL-a. To namreč pomeni napaka, ki jo omenjate. Poglejte si še enkrat kako natančno se v VB-ju pišejo DLL-i.
lp,
Matjaž Prtenjak
Administrator
Odgovori