< návrat zpět

MS Excel


Téma: Proměnná jako část kódu rss

Zaslal/a icon 7.2.2012 16:16

PokiZdravím všechny,
ne, že bych to nějak nutně potřeboval, ale spíše ze zájmu.
Rád bych v kódu definoval proměnnou, která by potom dále sloužila jako část kódu.
Pokud chtěl například numericky spočítat integrál funkce: x^2 (v mezich od 0 do 2), napsal bych např. tuto funkci:
Public Function Integral(dMez As Double, hMEZ As Double, Interval As Double)
Dim x As Double
Dim SOUCET As Double

For x = dMez To (hMEZ - Interval) Step Interval
SOUCET = SOUCET + Interval * (x ^ 2 + (x + Interval) ^ 2) / 2
Next x

Integral = SOUCET
End Function

Tuto vlastní funkci bych ale chtěl zobecnit tak, aby uživatel mohl změnit funkci, kterou bude chtít integrovat, tedy aby mohl měnit v kódu část: Interval * (x ^ 2 + (x + Interval) ^ 2) / 2
Nechci ukládat jednotlivé hodnoty 'x' do bunky a používat vzorec v jiné buňce - jak by to šlo udělat čistě ve VBA?
Máte někdo nápad, jak by toto šlo provést?
Díky

Zaslat odpověď >

#007231
avatar
Moc nevím, zda Vám rozumím. Co si mám představit pod pojmem změnit funkci ? ... předpokládám, že si user může vymyslet vlastní funkci.

Pokud chcete vytvořit makro do kterého vložíte textovou funkci a dostanete výsledek, pak to bude muset mít o něco více řádku. V javě je nějaká funkce, která po vložení textového příkladu jej vypočte. To znamená přeložit text, pochopit, sestavit postup a provést výpočet. Říká se tomu interpret a něco takového by bylo potřeba.

V javě a php jsou napsané hezké stránky
http://wood.mendelu.cz/math/maw-html/index.php?lang=cs&form=integral
na kterých se dá sestavit integrál a vypočíst nebo upravit ... atd. Zkuste si na stránce spustit aplet java "MAW Maxima Popup" a vytvořit vzorec, který se vrátí z okna do řádku zadání. Předpokládám, že to stejné bude mít Váš user a makro funkci rozparsuje, poskládá podle matematických priorit a vypočte výsledek který bude vrácen. Jen pro upřesnění - ty webovky se dělají několik let.

Asi by se mi nechtělo to stejné vyrábět znovu.
R.citovat
icon #007232
admin
Zkus funkci EVAL http://msdn.microsoft.com/en-us/library/aa172212%28v=office.11%29.aspxcitovat
#007235
avatar
Eval je myslím v MSAccess. V Excelu je něco podobného a je to pod objektem Application.Evaluate, ale myslím, že na uvedený problém je to nepoužitelné. Za zkoušku nic nedáš :)

Evaluate je vlastně funkce, která něco dělá, zpracuje apod. V tomto případě by se hodila funkce, která nic dělat nebude a jen interpretu podstrčí kousek kodu, který má interpret vykonat. Aby se nemusel uvedený řádek pracně parsovat ... atd.
R.citovat
icon #007236
Poki
Dekuju vam obema.
Ano, myslel jsem to tak, ze si uzivatel muze vymyslet vlastni funkci (musi ji ale zapsat naprosto spravne)

Ten odkaz (resp. ta stranka) - to je parada. Ale jestli to spravne chapu, tak udelat nejakeho 'interpreta' neni nic lehkeho.

Mne by stacilo neco jako promenna, jejiz 'hodnota' by byla povazovana za kod (deklarovana 'as Code' - ale nic takoveho asi neexistuje)

Funkce Evaluate neni presne to, co hledam, ackoliv skyta velky potencial a urcite ji v budoucnu hodne uziju...

Kazdopadne diky a kdyby vas neco napadlo, dejte vedet.. 5citovat
icon #007237
admin
Funkce EVAL v Excelu funguje. Je potřeba mít nainstalovaný Access a v Excelu v editoru VBA Tool/References připojit knihovnu 'Microsoft Access 11.0 Object library'. Zkoušel jsem to na příkladu a text byl vyhodnocen jako kód, ale nepodařilo se zprovoznit výše uvedenou funkci.
Příloha: zip7237_eval.zip (14kB, staženo 23x)
citovat
icon #007264
admin
Podařila se ti funkce EVAL zprovoznit?citovat

Uživatelské menu

Nejste přihlášen(a)
avatar\n

Menu

On-line nástroje

Formulář Faktura

Formulář Faktura IV

Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.

Aktivní diskuse

Zvýraznění překročené hodnoty v grafu

ABRAMOWSKI61 • 19.10. 23:14

EXCEL VBA vyhledání buňky

elninoslov • 19.10. 11:34

EXCEL VBA vyhledání buňky

elninoslov • 19.10. 11:24

EXCEL VBA vyhledání buňky

ben59 • 19.10. 9:34

Ověření datumu TextBox1.Text

Stana-V • 19.10. 7:43

Ověření datumu TextBox1.Text

elninoslov • 18.10. 20:15

Auto mazanie emailov

elninoslov • 18.10. 20:01