| Kdo je online |
Hosté online: 2
Žádný člen není online
Registrovaní členové: 536
Neaktivovaní členové: 48
Nejnovější člen: Libor
|
|
| Pohotovost Excel |
 |
|
|
|
| Statistiky |
 |
|
|
|
|
Prvky ActiveX od Microsoftu na formuláři VBA |
Ovládací prvky ActiveX, které Microsoft nabídl prostřednictvím Visual Studia 6, není ve VBA běžně možné používat. Jedná se kupříkladu o Datagrid, RichTextBox, Winsock a další. Problém přitom není technického rázu, neboť jazyk a technologie VBA je na úrovni VB6. Omezení vyplývají z licenčních pravidel (tzv. Design Time License) a také zabezpečení.
Pokud nejste vlastníky Microsoft Office verze Developer (osobně jsem je nikdy neviděl) nebo nemáte na svém počítači instalováno Visual Studio, nebudete schopni takové prvky přidat na formulář. Nejspíš patřičné knihovny ani nebudete mít v systému a Microsoft je samostatně pokud vím ke stažení nenabízí (obsahuje je Service Pack 6 pro Visual Basic 6.0).
Zkusme se dnes prokousat postupem nasazení prvku Microsoft DataGrid.
Předpokládám, že se v systému nachází zaregistrovaná knihovna MSDATGRD.OCX. Pokud ano, můžete si prvek v editoru VBA přidat do Toolboxu.

Pokud se DataGrid pokusíte vykreslit do plochy formuláře, dočkáte se následující hlášky.

Ve zobrazené zprávě se totiž promítá zabezpečení, řízené nastaveními v registru a vzdáleně vázané na Internet Explorer. Co s tím?
Jak pochopíme ze článku Jak zabránit spuštění ovládacího prvku ActiveX v aplikaci Internet Explorer, je potřeba nejprve zjistit hodnotu CLSID ovládacího prvku ActiveX. Pátráme tedy po názvu podklíče v HKEY_CLASSES_ROOT\CLSID\, jenž odpovídá prvku Microsoft DataGrid. Po chvíli hledání (menu Úpravy/Najít) zjistíme, že se jedná o podklíč {CDE57A43-8B86-11D0-B3C6-00A0C90AEA82}. Název podklíče je daným CLSID.

Podklíč stejného názvu by se měl nacházel ve větvi HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\ActiveX Compatibility\. Stačí už jen přenastavit hodnotu Compatibility Flags ze 400 (v šestnáctkové soustavě) na 0. Tím odstavíme zabezpečení pro daný prvek.

Nyní už můžeme v prostředí VBA vykreslit prvek Microsoft DataGrid na plochu formuláře.

Bavíme-li se konkrétně o prvku DataGrid, pak by našemu trápení ještě nebyl konec. Standardně je totiž vázán na objekt Data odkazující na zdroj dat. V příkladu níže jsem si vystačil s přiřazením recordsetu a databázovým přístupem k excelovskému sešitu. Nutno podotknout, že jsem potýkal s problémy korektního překreslování prvku.
| Kód VBA | Private Sub CommandButton1_Click() 'upraveno podle http://www.excelkb.com/article.aspx?id=10041&cNode=7X0G0W Dim cnt As ADODB.Connection Dim rst As ADODB.Recordset Dim stSQL As String 'definice připojení Const stCon As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=C:data.xls;" & _ "Extended Properties=""Excel 8.0;HDR=YES"";" 'SQL dotaz stSQL = "SELECT JMENO, CISLO FROM [List1$]" 'objekty ADO Set cnt = New ADODB.Connection Set rst = New ADODB.Recordset 'vlastní připojení cnt.Open stCon With rst 'nastavení recordsetu .CursorLocation = adUseClient .Open stSQL, cnt, adOpenForwardOnly, adLockReadOnly, adCmdText 'odpojení recordsetu Set .ActiveConnection = Nothing End With 'obsahuje výsledek nějaká data? If rst.EOF Then MsgBox "Data nejsou k dispozici!", vbCritical GoTo Konec End If 'naplnění prvku DataGrid Set Me.DataGrid1.DataSource = rst 'překreslení prvku DataGrid Me.DataGrid1.Refresh Konec: 'uzavření a odpojení z paměti rst.Close cnt.Close Set rst = Nothing Set cnt = Nothing End Sub
|
Obrázek níže ukazuje DataGrid v akci.

Pozor na jednu věc. Zabezpečení se může projevit už při otevírání sešitu, ve kterém je "podezřelý" prvek ActiveX použit. Pro studium tohoto stavu nám pomůže článek Při otevření dokumentu sady Office XP nebo Office 2003 se zobrazí výzva k udělení oprávnění pro ovládací prvky ActiveX. Podle něj si nastavíme hodnoty v klíčích HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\Common (UFIControls na 1) a HKEY_CURRENT_USER\Software\Microsoft\VBA\Security (LoadControlsInForms na 1).


Nakonec dodám ještě osobní zkušenost - sešity s netypickými prvky ActiveX mohou častěji způsobit pády aplikace.
|
|
Komentáře |
, 12.06.2009
Moc děkuji za článek, který zpožděně objeven
vznikl zřejmě jako reakce na můj dotaz.
Podařilo se mi dostat datagrid do formuláře,
ale klíče se zabezpečením se mi nedaří objevit.
Potíže s načtením dat a po drobné úpravě nakonec
úspěšně data načtena. Recordset deklaruji pro celý
formulář a nezavírám, jinak se mi nezobrazí nic.
Po vypnutí pc se změněná hodnota CompatibiltyFlags
vrátí zpět a z formuláře je pak datagrid odstraněn...
Asi datagrid obrečím... |
, 06.04.2010
Nalezám zde úplně zapomenutý komentář...
Ještě jednou děkuji, musím doplnit, že při loňském prvním
pokusu mi chyběl jeden podklíč Security, zadáte-li správně,
jak má být a nezprasíte to vlastní blbostí jako já, potom vše funguje perfektně.
...
Nakonec se žádný brek nekonal a omlouvám se za zkreslující
komentář. |
|
|
Přidat komentář |
|
Pro přidání komentáře musíte být přihlášeni.
|
|
Hodnocení |
|
Musíte být přihlášeni, abyste mohli hodnotit.
Prosím přihlašte se nebo se zaregistrujte.
Žádné hodnocení ještě nebylo zaznamenáno.
|
|
|