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.Windows(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\AccessReports\Zprava.dot"
obj_WordAppl.ActiveDocument.FormFields("Suma1").Result = cProdejSk(1)
obj_WordAppl.ActiveDocument.FormFields("Suma2").Result = cProdejSk(2)
obj_WordAppl.ActiveDocument.FormFields("Suma3").Result = cProdejSk(3)
obj_WordAppl.ActiveDocument.FormFields("Suma4").Result = cProdejSk(4)
obj_WordAppl.Visible = True
Set obj_WordAppl = Nothing

9 0508/OK

Autor článku