Sdílet prostřednictvím


Kombinování přizpůsobení na úrovních VBA a dokumentu

Používat Visual Basic for Applications (VBA) kód v dokumentu, který je součástí přizpůsobení úroveň dokument pro aplikaci Microsoft Office Word nebo Microsoft Office Excel.Kód VBA v dokumentu můžete volat z vlastního sestavení nebo můžete nakonfigurovat povolení kód VBA v dokumentu k volání kódu v sestavení vlastního projektu.

Platí pro: Informace v tomto tématu se vztahují na projekty na úrovni dokumentu v těchto aplikacích: Excel 2013 a Excel 2010; Word 2013 a Word 2010. Další informace najdete v tématu Dostupné funkce podle aplikací systému Office a typů projektu.

Chování kódu VBA v přizpůsobení úroveň dokument

Když otevřete projekt v sadě Visual Studio dokument otevřít v režimu návrhu.Dokument je v režimu návrhu, takže můžete pracovat na dokumentu a kód bez spuštění kódu VBA kód VBA nespustí.

Při spuštění řešení obslužné rutiny události v jazyce VBA a sestavení vlastního zvedněte události, které jsou vyvolány v dokumentu a obě sady kód spustit.Nelze předem určit, který kód bude spuštěn před je třeba zjistit pomocí testování v každém jednotlivém případě.Pokud dvě sady kód není pečlivě koordinována a otestování můžete získat neočekávané výsledky.

Volání kódu jazyka VBA ze sestavení vlastního nastavení

Při volání makra v dokumentech aplikace Word a můžete volat funkce a makra v sešitech aplikace Excel.Použijte jednu z následujících metod:

První parametr určuje název makra nebo funkce, kterou chcete volat pro každou metodu a zbývající volitelné parametry určit parametry předat makro nebo funkce.První parametr může mít různé formáty pro Word a Excel:

  • Aplikace Word je první parametr řetězec, který může být libovolné šablony, modul a název makra.Pokud zadáte název dokumentu, kódu můžete spouštět pouze makra v dokumentech souvisejících s aktuální kontext – Ne všem makro v libovolném dokumentu.

  • Aplikace Excel, může být první parametr řetězec, který určuje název makra Range , označuje, kde je funkce nebo ID registrace pro zaregistrované funkce knihovny DLL (XLL).Pokud předáte řetězec, řetězec bude vyhodnocena v kontextu aktivního listu.

Následující příklad kódu ukazuje, jak volat makro s názvem MyMacro z projektu úroveň dokument pro aplikaci Excel.Tento příklad předpokládá, že MyMacro v Sheet1.

Globals.Sheet1.Application.Run("MyMacro")
Globals.Sheet1.Application.Run("MyMacro", missing, missing, missing,
    missing, missing, missing, missing, missing, missing, missing,
    missing, missing, missing, missing, missing, missing, missing,
    missing, missing, missing, missing, missing, missing, missing, 
    missing, missing, missing, missing, missing, missing);

[!POZNÁMKA]

Informace o použití globální missing namísto volitelné parametry v jazyce Visual C# naleznete v Psaní kódu v řešeních pro systém Office.

Volání kódu v dokumentu úroveň nastavení jazyka VBA

Nakonfigurovat úroveň dokumentů projekt pro aplikace Word nebo Excel tak, že kód Visual Basic for Applications (VBA) v dokumentu lze volat kód v sestavení vlastního nastavení.To je užitečné v následujících situacích:

  • Chcete-li rozšířit stávající kód VBA v dokumentu pomocí funkce přizpůsobení úroveň dokument, spojené s stejného dokumentu.

  • Chcete zpřístupnit služby, které vyvinete v přizpůsobení úroveň dokument koncovým uživatelům, kteří přístup služby zápisu kódu VBA v dokumentu.

Vývojové nástroje sady Office v sadě Visual Studio poskytují podobné funkce pro doplňky aplikace.Pokud vyvíjíte v, můžete volat kód doplněk od jiné řešení Microsoft Office.Další informace naleznete v tématu Volání kódu v doplňcích na úrovni aplikace z jiných řešení pro systém Office.

[!POZNÁMKA]

Tuto funkci nelze použít v aplikaci Word šablony projektů.Lze pouze v dokumentu aplikace Word, sešit aplikace Excel nebo projekty šablony aplikace Excel.

Požadavky

Před povolením kódu VBA volání do vlastního sestavení projektu musí splňovat následující požadavky:

  • Dokument musí mít jednu z následujících přípon:

    • Word: DOCM nebo DOC

    • Excel: XLSM, XLTM, XLS nebo xlt

  • Dokument musí již obsahovat projekt VBA, který má kód jazyka VBA.

  • Kód VBA v dokumentu musí být povoleny spustit bez zobrazení výzvy k povolení maker.Kód VBA spustit přidáním umístění Office project do seznamu důvěryhodných umístění v Centru nastavení aplikace Word nebo Excel můžete důvěřovat.

  • Office project musí obsahovat alespoň jednu veřejnou třídu, která obsahuje jeden nebo více veřejné členy, které jsou vystaveny na VBA.

    Metody, vlastnosti a události VBA můžete vystavit.Třídy, které vystavíte, mohou být třída položku hostitele (jako například ThisDocument pro aplikaci Word, nebo ThisWorkbook a Sheet1 pro Excel) nebo jiné třídy, kterou definujete v projektu.Další informace o položkách hostitele naleznete v Přehled hostitelských položek a hostitelských ovládacích prvků.

Volání do sestavení vlastního kódu VBA

Existují dva různé způsoby, můžete vystavit členy v sestavení vlastního kódu VBA v dokumentu:

  • Můžete vystavit členy třídy položku hostitele v Visual Basic projekt VBA.Toto provedete nastavením EnableVbaCallers vlastnost položky hostitel True v Vlastnosti okna, zatímco položka host (to znamená dokumentu, listu nebo sešitu) je otevřen v návrháři.Visual Studio automaticky provede všechny práce potřebné povolení kódu VBA volání členů třídy.

  • Můžete vystavit členy všechny veřejné třídy v projektu Visual C# nebo členy bez hostitele položky třídy Visual Basic projekt VBA.Tuto možnost nabízí více svobody zvolit, které třídy zpřístupnit VBA, ale také vyžaduje více kroků ručně.

    Provedete to musí provést následující hlavní kroky:

    1. Vystavit třídy COM.

    2. Přepsat GetAutomationObject třídy položku hostitele v projektu VBA vrátit instance třídy, které jsou vystaveny.

    3. Nastavit ReferenceAssemblyFromVbaProject vlastnost třídy položky všechny hostitele v projektu na True.Toto vloží do sestavení vlastního sestavení knihovny typů a přidá odkaz na knihovnu typů projektu VBA dokumentu.

Podrobné pokyny naleznete v Postupy: Vystavení kódu v projektu jazyka Visual Basic pro jazyk VBA a Postupy: Vystavení kódu v projektu jazyka Visual C# pro jazyk VBA.

EnableVbaCallers a ReferenceAssemblyFromVbaProject vlastnosti jsou k dispozici pouze Vlastnosti okna v době návrhu; nemůže být použit v době běhu.Zobrazení vlastností, otevřete návrhář pro položku hostitele v Visual Studio.Další informace o konkrétní úkoly, které provede aplikace Visual Studio při nastavení těchto vlastností naleznete v tématu Úkoly provádět pomocí položky Vlastnosti hostitele.

[!POZNÁMKA]

Pokud sešit nebo dokument neobsahuje žádný kód jazyka VBA nebo pokud není důvěryhodné pro spuštění kódu VBA dokumentu, zobrazí se chybová zpráva při nastavení EnableVbaCallers nebo ReferenceAssemblyFromVbaProject vlastnost True.Důvodem je Visual Studio nelze změnit projekt VBA v dokumentu v této situaci.

Volání do vlastního sestavení v kódu jazyka VBA pomocí členů

Po konfiguraci povolit kód VBA k volání do vlastního sestavení projektu Visual Studio přidá projekt VBA v dokumentu následující členy:

  • Pro všechny projekty Visual Studio přidá globální metodu s názvem GetManagedClass.

  • Pro Visual Basic projekty, které vystavují členové hostitel položky pomocí třídy EnableVbaCallers vlastnosti aplikace Visual Studio přidá vlastnost s názvem CallVSTOAssembly se ThisDocument, ThisWorkbook, Sheet1, Sheet2, nebo Sheet3 modul v projektu VBA.

Můžete použít CallVSTOAssembly vlastnost nebo GetManagedClass metody pro přístup k veřejné členy třídy, která je vystavena v projektu VBA kód.

[!POZNÁMKA]

Při vývoji a nasazení řešení, existují různé kopie dokumentu kde můžete přidat kód jazyka VBA.Další informace naleznete v pokyny pro přidání kódu VBA dokumentu.

V projektu Visual Basic pomocí vlastnosti CallVSTOAssembly

Použití CallVSTOAssembly vlastnost pro přístup k veřejné členy, které jsou přidány do třídy položku hostitele.Například následující makro VBA volá metodu nazvanou MyVSTOMethod který je definován v Sheet1 třídy v projektu sešitu aplikace Excel.

Sub MyMacro()
    Sheet1.CallVSTOAssembly.MyVSTOMethod()
End Sub

Tato vlastnost je výhodnější pro volání do vlastního sestavení než použití GetManagedClass metoda přímo.CallVSTOAssemblyVrátí objekt, který představuje hostitele položka třída, která je vystavena VBA.Členové a parametry metody vráceného objektu se zobrazí IntelliSense.

CallVSTOAssembly Prohlášení, který je podobný následující kód má vlastnost.Tento kód předpokládá, že je vystavena Sheet1 položku třídy v projektu aplikace Excel sešit s názvem hostitele ExcelWorkbook1 na VBA.

Property Get CallVSTOAssembly() As ExcelWorkbook1.Sheet1
    Set CallVSTOAssembly = GetManagedClass(Me)
End Property

Pomocí metody GetManagedClass

Použití globální GetManagedClass metody, předejte v objektu VBA, který odpovídá hostitel položky třídy, která obsahuje vaše přepsání GetAutomationObject metoda.Potom použijte vráceného objektu třídy, která je vystavena VBA přístup.

Například následující makro VBA volá metodu nazvanou MyVSTOMethod který je definován v Sheet1 hostitel položky třídy v projektu aplikace Excel sešit s názvem ExcelWorkbook1.

Sub CallVSTOMethod
    Dim VSTOSheet1 As ExcelWorkbook1.Sheet1
    Set VSTOSheet1 = GetManagedClass(Sheet1)
    VSTOSheet1.MyVSTOMethod
End Sub

GetManagedClass Metoda má následující prohlášení.

GetManagedClass(pdispInteropObject Object) As Object

Tato metoda vrátí objekt, který představuje třídu, která je vystavena VBA.Členové a parametry metody vráceného objektu se zobrazí IntelliSense.

Pokyny pro přidání kódu VBA dokumentu

Existují různé kopie dokumentu, kde můžete přidat kód VBA, který volá do přizpůsobení úroveň dokument.

Při vývoji a testování vašeho řešení, můžete napsat kód VBA v dokumentu, který se otevře při ladění nebo spustit projekt v aplikaci Visual Studio (který je dokument ve výstupní složce sestavení).Však kód jazyka VBA, které přidáte do tohoto dokumentu bude přepsán při příštím sestavení projektu, protože Visual Studio nahradí kopii dokumentu ze složky hlavní projekt dokumentu ve výstupní složce sestavení.

Pokud chcete uložit kód VBA, který přidáte do dokumentu při ladění nebo systémem řešení, zkopírujte kód VBA do dokumentu ve složce projektu.Další informace o procesu sestavení naleznete v Sestavování řešení pro systém Office.

Jakmile budete připraveni nasadit řešení, jsou tři hlavní dokument umístění, ve kterých můžete přidat kód jazyka VBA.

Ve složce projektu na vývojovém počítači.

Toto umístění je vhodné, pokud máte úplnou kontrolu nad kód VBA v dokumentu a vlastního kódu.Protože je na vývojovém počítači, můžete snadno změnit kód VBA při změně vlastního kódu.Kód jazyka VBA, které přidáte do této kopie dokumentu zůstane v dokumentu při sestavení, ladění a publikovat vaše řešení.

Kód VBA nelze přidat dokument je otevřen v návrháři.Dokument v Návrháři nejprve zavřete a otevřete dokument přímo v aplikaci Word nebo Excel.

Poznámka k upozorněníUpozornění

Pokud přidáte kód VBA, který se spustí při otevření dokumentu ve výjimečných případech tento kód může být poškozený dokument nebo zabránit otevírání v návrháři.

Ve složce instalace nebo publikování

V některých případech může být vhodné přidat kód VBA dokumentu ve složce publikování nebo instalace.Můžete například zvolit tuto možnost, pokud kód VBA je zapsán a zkoušet různé vývojář v počítači, který nemá nainstalován Visual Studio.

Pokud uživatelé instalovat přímo ze složky publikování řešení, musíte přidat kód VBA dokumentu při každém publikování řešení.Při publikování řešení, Visual Studio přepíše dokument v umístění publikování.

Pokud uživatelé instalovat z instalační složky, která se liší od složky publikování řešení, můžete se vyhnout přidáním kódu jazyka VBA v dokumentu při každém publikování řešení.Při publikování aktualizace připraven instalační složka přesunuta ze složky publikování, zkopírujte všechny soubory do instalační složky kromě dokumentu.

V počítači koncového uživatele

Pokud koncoví uživatelé VBA vývojáři, kteří volají do služby, které poskytují v přizpůsobení úroveň dokument, můžete zjistit jejich jak volat pomocí kódu CallVSTOAssembly vlastnost nebo GetManagedClass metoda v jejich kopií dokumentu.Při publikování aktualizace řešení kódu VBA v dokumentu v počítači koncového uživatele nebude přepsán, protože není dokument změnil publikovat aktualizace.

Úkoly prováděné pomocí položky Vlastnosti hostitele

Při použití EnableVbaCallers a ReferenceAssemblyFromVbaProject vlastnosti Visual Studio provede různé sady úkolů.

EnableVbaCallers

Při nastavení EnableVbaCallers vlastnost položky hostitel na True v projektu jazyka Visual Basic, Visual Studio provede následující úkoly:

  1. Přidá ComClassAttribute a ComVisibleAttribute atributy třídy položku hostitele.

  2. Potlačí GetAutomationObject metoda třídy položku hostitele.

  3. Nastaví ReferenceAssemblyFromVbaProject vlastnost položky hostitel True.

Při nastavení EnableVbaCallers vlastnost zpět na False, Visual Studio provede následující úkoly:

  1. Odebere ComClassAttribute a ComVisibleAttribute atributy z ThisDocument třídy.

  2. Odebere GetAutomationObject metody z třídy položku hostitele.

    [!POZNÁMKA]

    Visual Studio automaticky nenastaví ReferenceAssemblyFromVbaProject vlastnost zpět na False.Tuto vlastnost lze nastavit False ručně Vlastnosti okna.

ReferenceAssemblyFromVbaProject

Když ReferenceAssemblyFromVbaProject hostitel položky v projektu jazyka Visual Basic nebo Visual C# vlastnost True, Visual Studio provede následující úkoly:

  1. Generuje pro vlastní sestavení knihovny typů a vloží knihovnu typů v sestavení.

  2. Přidá odkaz na následující typ knihovny v projektu VBA dokumentu:

    • Knihovnu typů pro vlastní sestavení.

    • Modul Microsoft Visual Studio Tools pro spuštění sady Office 9.0 knihovny typů.Je součástí tohoto typu knihovny Visual Studio Tools for Office runtime.

Když ReferenceAssemblyFromVbaProject vlastnost zpět False, Visual Studio provede následující úkoly:

  1. Odebere odkazy typu knihovnu z projektu VBA dokumentu.

  2. Odstraní knihovnu vložený typ ze sestavení.

Poradce při potížích

Následující tabulka uvádí některé běžné chyby a návrhů pro opravení chyby.

Chyba

Návrhy

Po nastavení EnableVbaCallers nebo ReferenceAssemblyFromVbaProject vlastnost, chybová zpráva uvádí dokument neobsahuje projekt VBA, nebo nemáte oprávnění k přístupu k projektu VBA dokumentu.

Zajistěte, aby dokument v projektu obsahuje nejméně jedno makro jazyka VBA, projekt VBA má dostatečné vztahu důvěryhodnosti pro spuštění a projekt VBA není chráněn heslem.

Po nastavení EnableVbaCallers nebo ReferenceAssemblyFromVbaProject vlastnost chybová zpráva uvádí, že GuidAttribute prohlášení je chybějící nebo poškozené.

Zajistit, aby GuidAttribute prohlášení je umístěn v souboru AssemblyInfo.cs nebo AssemblyInfo.vb v projektu a tento atribut je nastavena na platný identifikátor GUID.

Po nastavení EnableVbaCallers nebo ReferenceAssemblyFromVbaProject vlastnost, chybová zpráva uvádí, že číslo verze určené AssemblyVersionAttribute není platný.

Zajistit, aby AssemblyVersionAttribute prohlášení v souboru AssemblyInfo.cs nebo AssemblyInfo.vb v projektu je nastavena na číslo verze platné sestavení.Informace o platné sestavení čísla verzí naleznete AssemblyVersionAttribute třídy.

Po přejmenování sestavení vlastního kódu jazyka VBA, který volá do vlastního sestavení přestane fungovat.

Pokud změníte název sestavení vlastního po zpřístupnit kódu jazyka VBA, je přerušeno propojení mezi projektu VBA dokumentu a sestavení vašeho vlastního nastavení.Chcete-li tento problém vyřešit, změňte ReferenceFromVbaAssembly vlastnosti v projektu na False a potom zpět do Truea nahradit odkazy na původní název sestavení v kódu jazyka VBA nový název sestavení.

Viz také

Úkoly

Postupy: Vystavení kódu v projektu jazyka Visual Basic pro jazyk VBA

Postupy: Vystavení kódu v projektu jazyka Visual C# pro jazyk VBA

Návod: Volání kódu z jazyka VBA v projektu jazyka Visual Basic

Návod: Volání kódu z jazyka VBA v projektu jazyka Visual C#

Koncepty

Srovnání řešení VBA a řešení pro systém Office v sadě Visual Studio

Další zdroje

Navrhování a tvorba řešení pro systém Office

Programování přizpůsobení na úrovni dokumentu