Úvodní stránka · Fórum · Ke stažení · Odkazy · Links (EN, DE, CZ, SK) 7. září 2010, Regína
Menu
Úvodní stránka
Časté dotazy k Excelu
Fórum
Kategorie článků
Databanka kódů
Ke stažení
Svět Excelu v RSS
Odkazy
Kontakt

Excel - funkce na listu
Excel - funkce VBA
Excel - klávesové zkratky
Excel - znaky, klávesnice
Excel - standardní barvy
Excel - slovník menu
Excel - konstanty
Excel - technické údaje
DVD Servis Office
Excel menu 2003 (Ribbon)
Offset Statistic

Chat
Sponzorované odkazy
Přihlášení
Přezdívka

Heslo



Nejste členem?
Zaregistrujte se co nejdříve.

Zapomněli jste heslo?
Nechte si poslat nové.
Kdo je online
Hosté online: 2
Žádný člen není online

Registrovaní členové: 536
Neaktivovaní členové: 48
Nejnovější člen: Libor
Pohotovost Excel
Excel VBA - první pomoc

ICQ status

Skype
Hry online
Sudoku
Sudoku
Sudoku
Sudoku
Excelplus.NET
Excelplus.NET - RSS 0.91 spampoison.com
Google Pagerank - excelplus.netGoogle Pagerank Antispam.er.cz
Statistiky

Prvky ActiveX od Microsoftu na formuláři VBA

VýukaOvlá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
  1. Private Sub CommandButton1_Click()
  2.  
  3. 'upraveno podle http://www.excelkb.com/article.aspx?id=10041&cNode=7X0G0W
  4.  
  5. Dim cnt As ADODB.Connection
  6. Dim rst As ADODB.Recordset
  7. Dim stSQL As String
  8.  
  9. 'definice připojení
  10. Const stCon As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
  11. "Data Source=C:data.xls;" & _
  12. "Extended Properties=""Excel 8.0;HDR=YES"";"
  13.  
  14. 'SQL dotaz
  15. stSQL = "SELECT JMENO, CISLO FROM [List1$]"
  16.  
  17. 'objekty ADO
  18. Set cnt = New ADODB.Connection
  19. Set rst = New ADODB.Recordset
  20.  
  21. 'vlastní připojení
  22. cnt.Open stCon
  23.  
  24. With rst
  25. 'nastavení recordsetu
  26. .CursorLocation = adUseClient
  27. .Open stSQL, cnt, adOpenForwardOnly, adLockReadOnly, adCmdText
  28. 'odpojení recordsetu
  29. Set .ActiveConnection = Nothing
  30. End With
  31.  
  32. 'obsahuje výsledek nějaká data?
  33. If rst.EOF Then
  34. MsgBox "Data nejsou k dispozici!", vbCritical
  35. GoTo Konec
  36. End If
  37.  
  38. 'naplnění prvku DataGrid
  39. Set Me.DataGrid1.DataSource = rst
  40.  
  41. 'překreslení prvku DataGrid
  42. Me.DataGrid1.Refresh
  43.  
  44. Konec:
  45.  
  46. 'uzavření a odpojení z paměti
  47. rst.Close
  48. cnt.Close
  49. Set rst = Nothing
  50. Set cnt = Nothing
  51.  
  52. 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

Bath , 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...
Bath , 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.
... nejlépe se zpracovávají tabulky mléčné čokolády