Tipy pro MS Access - Spolupráce s ostatními programy MS Office

1. 8. 1999

Sdílet

Použití Automatizace- V programech MS Office je možno používat tzv. Automatizaci (OLE Automation), která umožňuje spolupráci objektů na bázi technologie Microsoftu COM. V Accessu tedy m...

Použití Automatizace
- V programech MS Office je možno používat tzv. Automatizaci (OLE Automation),

která umožňuje spolupráci objektů na bázi technologie Microsoftu COM. V Accessu

tedy můžete např. využívat objekty Excelu nebo odesílat zprávy prostřednictvím

služeb MS Outlooku. Objekty programů MS Office mohou vystupovat jako Server

nebo Klient Automatizace, což znamená buď poskytovat funkcionalitu, nebo

funkcionalitu jiných objektů využívat (konkrétně tedy můžete z aplikace napsané

v Accessu používat objekty Excelu, nebo naopak.

Poznámka: Jazyk Visual Basic for Application (VBA) používají všechny aplikace

MS Office. Jazyk VBA se v jednotlivých programech liší pouze objekty, nad

kterými program pracuje (např. v Accessu databáze, tabulka, dotaz atd.), obecné

instrukce jsou shodné.



- K použití automatizace v kódu VBA jsou určeny příkazy CreateObject() a

GetObject(). Příkaz CreateObject() má jeden parametr a tím je požadovaná třída

objektu, jehož funkcionalitu chcete použít, např.

Excel.Application pro práci s programem Excel:

Dim obj_xlAppl As Excel.Application

Set obj_xlAppl = CreateObject(„Excel.Application“)

Příkaz GetObject() má parametry dva první obsahuje cestu a název souboru a

druhý parametr udává třídu objektu. V následující ukázce je znázorněno otevření

tabulky Excelu (c:\analysis.xls) z aplikace Accessu a její zobrazení:

Dim obj_xlWorkbook As Excel.Workbook

Set obj_xlWorkbook = GetObject(„c:\analysis.xls“, „Excel.Sheet“)

obj_xlWorkbook.Application.Visible = True

obj_xlWorkbook.Parent.Win­dows(1).Visible = True



- Při deklaraci objektů můžete použít klíčové slovo New, které vytvoří objekt,

zároveň s jeho deklarací, a není již tedy nutné použít funkci CreateObject(),

např.:

Dim appXL As New Excel.Application



- Další možností při používání automatizace je deklarovat obecný objekt, jemuž

potom můžete v kódu přiřadit libovolný typ objektu. K tomu použijte tento

postup:

Dim obj_any As Object

Set obj_any = CreateObject(„Excel.Application“)

obj_any.Visible = True



obj_any.Quit

Set obj_any = Nothing

obj_any = CreateObject(„Word.Application“)



V ukázce je nejdříve vytvořen odkaz na aplikaci Excelu, poté byla s tímto

objektem ukončena práce a proměnné obj_any byl přiřazen odkaz na aplikaci

Wordu. Tento postup má však tu nevýhodu, že používá tzv. dynamické spojování,

na rozdíl od statického (třída objektu je určená při deklaraci), kdy vazba na

objekt vzniká již v okamžiku kompilace a ne až při běhu programu, a dosáhnete

tak optimálního výkonu.



- V případě použití statického spojování (včasné vazby) je třeba zaregistrovat

odkazy na knihovny obsahující třídy objektů, jejichž služby chcete

prostřednictvím automatizace využívat. Nastavení či zrušení nastavení odkazů

provedete v okně Odkazy (zobrazte libovolný modul s kódem a zvolte Nástroje/

Odkazy…), viz obr. vpravo nahoře. Ve spodní části okna je zobrazen název

vybraného souboru knihovny v seznamu a umístění na disku.



- Pro usnadnění práce s třídami objektů slouží Prohlížeč objektů (obr. vlevo),

jehož okno zobrazíte máte-li zobrazený libovolný kód volbou Zobrazit/Prohlížeč

objektů nebo klepnutím na příslušnou ikonu na panelu nástrojů. V poli seznamu

Projekt/Knihovna vyberete požadovanou knihovnu, a prohlížeč v dalším okně

automaticky zobrazí příslušné třídy a k vybrané třídě pak v dalším okně metody,

vlastnosti a konstanty. Vyberete-li v seznamu Projekt/Knihovna název vašeho

projektu, můžete pracovat i s vámi napsaným kódem.



Příklad: Pokud vytváříte program na zakázku, často se setkáte s požadavkem mít

možnost upravovat tiskové sestavy. V tomto příkladu vytvoříte proceduru, která

umožní vytisknout sestavu o celkovém prodeji obchodních skupin ve Wordu s

možností její editace. Předpokládejme, že aktuální údaje o prodeji jsou uloženy

v tabulce Sales (pole ID_Skupiny a Prodej), a dále pro zjednodušení -, že máte

pevný počet prodejních skupin 4. Poté vytvořte šablonu dokumentu nazvanou např.

Zprava; k tomu použijte kromě „pevného“ neměnného textu (např. nadpis, záhlaví

apod.) prvky panelu Formuláře (textová pole, která budou obsahovat údaje o

prodeji, pojmenujte Suma1 až Suma4) a šablonu uložte do nové složky

AccessReports ve složce šablon Wordu. V programu nejdříve deklarujete proměnné,

a údaje o prodeji uložíte do proměnné cProdejSk (nastavte Option Base 1, aby

index pole probíhal mezi čísly 1 a 4):

Dim obj_WordAppl As Word.Application

Dim db As Database, rs As Recordset, cProdejSk(4) As Currency

Dim i As Integer

Set db = CurrentDb

Set rs = db.OpenRecordset(„Sales“)

rs.Index = „ID_Skupiny“

rs.MoveFirst

For i = 1 To 4

cProdejSk(i) = rs(„Prodej“)

rs.MoveNext

Next i

rs.Close

db.Close

Nyní vytvoříte nový dokument založený na šabloně Zprava, načtete do něj údaje o

prodeji a dokument otevřete k možným úpravám:

Set obj_WordAppl = CreateObject(„Word.Application“)

obj_WordAppl.Documents.Add Template:= _

:Program Files\Microsoft Office\Sablony\AccessRepor­ts\Zprava.dot"

obj_WordAppl.ActiveDocumen­t.FormFields(„Suma1“).Result = cProdejSk(1)

obj_WordAppl.ActiveDocumen­t.FormFields(„Suma2“).Result = cProdejSk(2)

obj_WordAppl.ActiveDocumen­t.FormFields(„Suma3“).Result = cProdejSk(3)

obj_WordAppl.ActiveDocumen­t.FormFields(„Suma4“).Result = cProdejSk(4)

obj_WordAppl.Visible = True

Set obj_WordAppl = Nothing



9 0508/OK

Autor článku