Udostępnij za pośrednictwem


Łączenie VBA i dostosowywanie na poziomie dokumentu

Kod Applications (VBA) w dokumencie, który jest częścią dostosowywania poziomie dokumentu dla programu Microsoft Office Word lub Microsoft Office Excel, można użyć języka Visual Basic.Można wywoływać kod VBA w dokumencie z zestawu dostosowywania, lub można skonfigurować do kodu VBA w dokumencie w celu wywołania kodu w zestawie dostosowywania projektu.

Zastosowanie: Informacje przedstawione w tym temacie mają zastosowanie do projektów na poziomie dokumentu dla następujących aplikacji: Excel 2013 i Excel 2010; Word 2013 i Word 2010. Aby uzyskać więcej informacji, zobacz Funkcje dostępne w aplikacjach pakietu Office i typ projektu.

Zachowanie kodu VBA w dostosowania poziomu dokumentu

Po otwarciu projektu w programie Visual Studio, dokument jest otwarty w trybie projektowania.Kod języka VBA nie jest uruchamiany, gdy dokument jest w trybie projektowania, więc można pracować nad dokumentem i kodu bez uruchamiania kodu VBA.

Podczas uruchamiania rozwiązanie obsługi zdarzeń języka VBA i montaż dostosowywania podnieść zdarzeń występujących w dokumencie, a następnie uruchom obu zestawów kodu.Nie można ustalić wcześniej kod, który będzie wykonywany przed należy to określić, poprzez badania w każdym indywidualnym przypadku.Jeśli dwóch zestawów kodu nie ostrożnie koordynowane i przetestowane, można uzyskać nieoczekiwane wyniki.

Wywołanie kodu VBA z zestawu dostosowywania

Można wywołać makra w dokumentach programu Word i skoroszytów programu Excel można wywołać makra i funkcje.Aby to zrobić, użyj jednej z następujących metod:

Dla każdej metody pierwszy parametr określa nazwę makro lub funkcja, którą chcesz się połączyć, a pozostałe parametry opcjonalne parametry przekazywane do makro lub funkcja.Pierwszy parametr może mieć różne formaty dla programów Word i Excel:

  • Dla programu Word pierwszy parametr jest ciągiem, który może być dowolną kombinacją szablon, moduł i nazwy makra.Jeśli określisz nazwę dokumentu, można tylko uruchomić kod makra w dokumentach związanych z bieżącego kontekstu — nie tylko każde makro w każdym dokumencie.

  • Dla programu Excel, pierwszy parametr może być ciąg określający nazwę makra, Range wskazująca, gdzie jest funkcja lub identyfikator rejestru dla zarejestrowanych funkcję DLL (XLL).Jeśli przekazuje ciąg, ciąg będzie oceniane w kontekście aktywnego arkusza.

Poniższy przykład kodu pokazuje, jak wywołać makro o nazwie MyMacro z projektu poziomie dokumentu dla programu Excel.W tym przykładzie zakłada się, że MyMacro jest zdefiniowany w 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);

[!UWAGA]

Aby uzyskać informacje dotyczące korzystania z szablonu globalnego missing zmienna zamiast parametry opcjonalne w Visual C#, zobacz Pisanie kodu dla rozwiązań pakietu Office.

Wywołanie kodu w poziomie dokumentu dostosowań z VBA

Można skonfigurować projekt na poziomie dokumentu dla programu Word lub Excel, tak że kod Visual Basic for Applications (VBA) w dokumencie można wywoływać kod w zgromadzeniu dostosowywania.Jest to przydatne w następujących scenariuszach:

  • Chcesz rozszerzyć istniejącego kodu VBA w dokumencie przy użyciu funkcji programu dostosowania poziomu dokumentu, który jest skojarzony z tym samym dokumencie.

  • Chcesz udostępnić usługi, które można opracować w dostosowania poziomu dokumentu użytkownikom końcowym, którzy mogą korzystać z usług poprzez napisanie kodu VBA w dokumencie.

Narzędzia rozwoju pakietu Office w programie Visual Studio zapewnić podobny funkcji na poziomie aplikacji dodatków.Jeśli tworzysz dodatek, można wywoływać kod w swojej dodatek od innych rozwiązań Microsoft Office.Aby uzyskać więcej informacji, zobacz Wywoływanie kodu w dodatkach na poziomie aplikacji z innych rozwiązań pakietu Office.

[!UWAGA]

Nie można użyć tej funkcji w projekty szablonów programu Word.Służy on tylko w przypadku dokumentu programu Word, skoroszyt programu Excel lub projekty szablonów programu Excel.

Wymagania

Przed włączeniem kod VBA do montażu dostosowywania projektu muszą spełniać następujące wymagania:

  • Dokument musi mieć jedną z następujących rozszerzeń nazwy pliku:

    • Dla programu Word: Docm lub doc

    • Dla programu Excel: Xlsm, xltm, .xls lub .xlt

  • Dokument musi już zawierać projekt VBA, który ma kod VBA w nim.

  • Kod VBA w dokumencie musi mieć możliwość uruchomienia bez monitowania użytkownika o włączenie makr.Kod VBA, dodając lokalizację programu Office project do listy Zaufane lokalizacje w ustawienia Centrum zaufania dla programu Word lub Excel można zaufać.

  • Office project musi zawierać co najmniej jeden public class, która zawiera jeden lub więcej członków publicznych, które wyświetlasz VBA.

    Może narazić metod, właściwości i zdarzeń (VBA).Klasy, który naraża może być klasa pozycji host (takich jak ThisDocument dla programu Word, lub ThisWorkbook i Sheet1 dla programu Excel) lub innej klasy zdefiniowane w projekcie.Aby uzyskać więcej informacji na temat elementów hosta, zobacz Przegląd obiektów hosta i formantów hosta.

Włączanie kod VBA do montażu dostosowywania

Istnieją dwa różne sposoby, że można wystawiać członków Zgromadzenia dostosowywania do kodu VBA w dokumencie:

  • Można wystawiać członkowie klasy elementu hosta w Visual Basic projektu VBA.Aby to zrobić, należy ustawić EnableVbaCallers właściwość elementu hosta do True w Właściwości okna, a pozycja hosta (czyli dokumentu, arkusza lub skoroszytu) jest otwarty w projektancie.Visual Studio automatycznie wykonuje wszystkie prace wymagane do uruchomienia kodu VBA do wywołania członków klasy.

  • Można wystawiać członków w dowolnej klasy publiczne w projekcie programu Visual C# lub członków w non-host element klasy w Visual Basic projektu VBA.Opcja ta zapewnia więcej swobody wyboru klas, które narażają na VBA, ale również wymaga więcej czynności ręcznie.

    Aby to zrobić, należy wykonać następujące czynności główne:

    1. Wystawiać klasy modelu COM.

    2. Zastąpić GetAutomationObject metody klasy elementu hosta w projekcie, aby przywrócić wystąpienie klasy, który naraża VBA.

    3. Zestaw ReferenceAssemblyFromVbaProject właściwość żadnej klasy elementu hosta w projekcie do True.Osadza biblioteki typów zestawów dostosowywania do zespołu i dodaje odwołanie do biblioteki typów do projektu VBA w dokumencie.

Aby uzyskać szczegółowe instrukcje, zobacz Porady: udostępnianie kodu z VBA w projektach Visual Basic i Porady: udostępnianie kodu z VBA w projektach Visual C#.

EnableVbaCallers i ReferenceAssemblyFromVbaProject właściwości są dostępne tylko w Właściwości okna w czasie projektowania; Nie można używać w czasie wykonywania.Aby wyświetlić właściwości, należy otworzyć projektanta dla elementu hosta w Visual Studio.Aby uzyskać więcej informacji na temat określonych zadań, które wykonuje Visual Studio, ustawienie tych właściwości, zobacz Zadania wykonywane przez hosta właściwości elementu.

[!UWAGA]

Jeśli skoroszyt lub dokument nie zawiera kodu języka VBA lub jeśli kod VBA w dokumencie nie jest zaufany do uruchomienia, zostanie wyświetlony komunikat o błędzie podczas ustawiania EnableVbaCallers lub ReferenceAssemblyFromVbaProject właściwość, aby True.Wynika to z programu Visual Studio nie można zmodyfikować projekt VBA w dokumencie w tej sytuacji.

Za pomocą elementów członkowskich w kodzie języka VBA do montażu dostosowywania

Po skonfigurowaniu projektu do kodu VBA do montażu dostosowywania, Visual Studio dodaje następujące elementy do projektu VBA w dokumencie:

  • Dla wszystkich projektów programu Visual Studio dodaje metodę globalną o nazwie GetManagedClass.

  • Dla Visual Basic projektów, w których członkowie hosta wystawiać elementu klasy za pomocą EnableVbaCallers właściwość, Visual Studio dodaje również właściwość o nazwie CallVSTOAssembly do ThisDocument, ThisWorkbook, Sheet1, Sheet2, lub Sheet3 moduł w projekcie VBA.

Można użyć CallVSTOAssembly właściwość lub GetManagedClass metoda dostępu publicznego członkowie klasy, która jest narażony na kod języka VBA w projekcie.

[!UWAGA]

Podczas opracowania i wdrożenia rozwiązania, istnieje kilka różnych kopii dokumentu, gdzie można dodać kod języka VBA.Aby uzyskać więcej informacji, zobacz wytyczne dotyczące dodawania kodu VBA w dokumencie.

Za pomocą właściwości CallVSTOAssembly w projekcie języka Visual Basic

Użycie CallVSTOAssembly właściwość, aby dostęp do publicznych członków, które są dodawane do klasy elementu hosta.Na przykład następujące makro VBA wywołuje metodę o nazwie MyVSTOMethod zdefiniowanego w Sheet1 klasy w projekcie skoroszytu programu Excel.

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

Ta właściwość jest wygodny sposób do montażu dostosowywania niż przy użyciu GetManagedClass metoda bezpośrednio.CallVSTOAssemblyZwraca obiekt, który reprezentuje przyjmującego klasy element, który zostanie narażony VBA.Członkowie i parametry metod zwracane obiektu pojawiają się w IntelliSense.

CallVSTOAssembly Właściwość zawiera oświadczenie, że jest podobny do następującego kodu.Kod ten zakłada, że zostały narażone Sheet1 host element klasy w projekcie programu Excel skoroszyt o nazwie ExcelWorkbook1 (VBA).

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

Za pomocą metody GetManagedClass

Aby użyć szablonu globalnego GetManagedClass metody obiektu języka VBA, który odpowiada do klasy elementu hosta, który zawiera Twoje zastępująca GetAutomationObject metoda.Następnie należy użyć zwracany obiekt na dostęp do tej klasy, które narażone na VBA.

Na przykład następujące makro VBA wywołuje metodę o nazwie MyVSTOMethod zdefiniowanego w Sheet1 host element klasy w projekcie programu Excel skoroszyt o nazwie ExcelWorkbook1.

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

GetManagedClass Metoda ma następującą deklarację.

GetManagedClass(pdispInteropObject Object) As Object

Ta metoda zwraca obiekt, który reprezentuje klasę, do której zostanie narażony VBA.Członkowie i parametry metod zwracane obiektu pojawiają się w IntelliSense.

Zasady dotyczące dodawania kodu języka VBA do dokumentu

Istnieje kilka różnych kopii dokumentu, gdzie można dodać kod VBA, który wzywa do dostosowywania poziomie dokumentu.

Jak opracować i przetestować rozwiązanie, można napisać kod VBA w dokumencie, który otwiera podczas debugowania lub uruchom projekt w programie Visual Studio (oznacza to, że dokument w folderze wyjściowym kompilacji).Jednak kod VBA, Dodaj do tego dokumentu zostaną zastąpione przy następnym budowania projektu, ponieważ program Visual Studio zastępuje dokument w folderze wyjściowym budować kopię dokumentu z folderu głównego projektu.

Jeśli chcesz zapisać kod VBA można dodać do dokumentu podczas debugowania lub uruchamiania rozwiązanie, skopiuj kod VBA do dokumentu w folderze projektu.Aby uzyskać więcej informacji na temat procesu tworzenia, zobacz Kompilowanie rozwiązań pakietu Office.

Gdy jesteś gotowy do wdrożenia rozwiązania, istnieją trzy lokalizacje dokumentu głównego, w których można dodać kod języka VBA.

W folderze projektu na komputerze deweloperskim

Ta lokalizacja jest wygodne, jeśli użytkownik ma pełną kontrolę nad kodu VBA w dokumencie i kod dostosowania.Ponieważ dokument jest na komputerze deweloperskim, można łatwo zmodyfikować kod VBA, jeśli zmienisz kod dostosowania.Kod VBA, Dodaj tę kopię dokumentu pozostaje w dokumencie podczas tworzenia, debugowania i publikować swoje rozwiązanie.

Nie można dodać kod języka VBA do dokumentu otwartego w projektancie.Najpierw zamknij dokument, w projektancie, a następnie otwórz dokument bezpośrednio w programie Word lub Excel.

Informacje dotyczące przestrogiPrzestroga

Jeśli dodasz kod VBA, który jest uruchamiany, gdy dokument jest otwarty, w rzadkich przypadkach ten kod może być uszkodzony dokument lub uniemożliwić otwieranie w projektancie.

W publikacji lub Folder instalacji

W niektórych przypadkach może być odpowiednie do dodawania kodu VBA do dokumentu w folderze publikowania lub instalacji.Na przykład wybierz tę opcję, jeśli kod VBA jest napisane i przetestowane przez innego autora, na komputerze, na którym nie ma zainstalowanego Visual Studio.

Jeśli użytkownicy zainstalować rozwiązanie bezpośrednio z folderu publikowania, należy dodać kod języka VBA do dokumentu przy każdym publikowaniu rozwiązanie.Visual Studio zastępuje dokument w lokalizacji podczas publikowania rozwiązanie.

Jeśli użytkownicy zainstalować rozwiązanie z folderu instalacji, który różni się od folderu publikowania, można uniknąć, dodanie kodu VBA w dokumencie, przy każdym publikowaniu rozwiązanie.Podczas aktualizacji publikowania jest gotowy do być przeniesiony z folderu publikowania do folderu instalacji, należy skopiować wszystkie pliki do folderu instalacyjnego, z wyjątkiem dokumentu.

Na komputerze użytkownika końcowego

Jeśli użytkownicy końcowi są VBA deweloperzy, którzy dzwonią do usług, które zapewniają w dostosowania poziomu dokumentu, można powiedzieć ich sposób wywołania kodu za pomocą CallVSTOAssembly właściwość lub GetManagedClass metoda w swoich kopiach dokumentu.Podczas publikowania aktualizacji do roztworu, kodu VBA w dokumencie na komputerze użytkownika nie zostaną zastąpione, ponieważ dokument nie jest modyfikowany poprzez publikowanie aktualizacji.

Zadania wykonywane przez hosta właściwości elementu

Podczas korzystania z EnableVbaCallers i ReferenceAssemblyFromVbaProject właściwości, Visual Studio wykonuje różne zestawy zadań.

EnableVbaCallers

Podczas ustawiania EnableVbaCallers właściwość elementu hosta do True w projekcie języka Visual Basic, Visual Studio wykonuje następujące zadania:

  1. Dodaje on ComClassAttribute i ComVisibleAttribute atrybuty do klasy elementu hosta.

  2. Zastępuje on GetAutomationObject metoda klasy elementu hosta.

  3. Ustawia ReferenceAssemblyFromVbaProject właściwość elementu hosta do True.

Podczas ustawiania EnableVbaCallers właściwość z powrotem do False, Visual Studio wykonuje następujące zadania:

  1. Usuwa ComClassAttribute i ComVisibleAttribute atrybuty z ThisDocument klasy.

  2. Usuwa GetAutomationObject metody z klasy elementu hosta.

    [!UWAGA]

    Visual Studio nie ustawia automatycznie ReferenceAssemblyFromVbaProject właściwość z powrotem do False.Właociwooć tę można ustawić, False ręcznie za pomocą Właściwości okna.

ReferenceAssemblyFromVbaProject

Gdy ReferenceAssemblyFromVbaProject ustawiono właściwość dowolnego elementu hosta w projekcie języka Visual Basic lub Visual C# True, Visual Studio wykonuje następujące zadania:

  1. Generuje biblioteki typów dla zestawów dostosowywania i osadza biblioteki typów w zestawie.

  2. Dodaje odwołanie do następujących bibliotek typów w projekcie VBA dokumentu:

    • Biblioteki typów dla swojego zespołu dostosowywania.

    • Narzędzia Microsoft Visual Studio dla pakietu Office silnika 9.0 biblioteki typów.Ten typ biblioteki znajduje się w Visual Studio Tools for Office Runtime.

Gdy ReferenceAssemblyFromVbaProject właściwość jest ustawiana dla False, Visual Studio wykonuje następujące zadania:

  1. Usuwa odwołania do biblioteki typ z projektu VBA w dokumencie.

  2. Usuwa osadzona biblioteka typów z zestawu.

Rozwiązywanie problemów

Poniższa tabela zawiera listę niektórych typowych błędów i sugestie dotyczące poprawiania błędów.

Błąd

Sugestia

Po ustawieniu EnableVbaCallers lub ReferenceAssemblyFromVbaProject właściwość, komunikat o błędzie stwierdza, że dokument nie zawiera projekt VBA, lub nie masz uprawnień dostępu do projektu VBA w dokumencie.

Upewnij się, dokument w projekcie zawiera co najmniej jedno makro VBA, projekt VBA ma wystarczające zaufanie do uruchomienia i projekt VBA nie jest chroniony hasłem.

Po ustawieniu EnableVbaCallers lub ReferenceAssemblyFromVbaProject właściwość, komunikat o błędzie stwierdza, że GuidAttribute deklaracji lub jest uszkodzony.

Zapewnienia, że GuidAttribute deklaracji znajduje się w pliku AssemblyInfo.cs lub AssemblyInfo.vb w projekcie, oraz że ten atrybut jest ustawiony na prawidłowym identyfikatorem GUID.

Po ustawieniu EnableVbaCallers lub ReferenceAssemblyFromVbaProject właściwość, komunikat o błędzie stwierdza, że numer wersji określony przez AssemblyVersionAttribute jest nieprawidłowa.

Zapewnienia, że AssemblyVersionAttribute deklaracji w pliku AssemblyInfo.cs lub AssemblyInfo.vb w projekcie jest ustawiona na numer wersji prawidłowego zestawu.Aby uzyskać informacje o prawidłowym zestawem numerów wersji, zobacz AssemblyVersionAttribute klasy.

Po zmianie nazwy zestawu dostosowywania, kod VBA, który wzywa do zespołu dostosowywania przestanie działać.

Jeśli zmienisz nazwę zespołu dostosowywania po jest narażony na kod VBA, powiązanie projektu VBA w dokumencie i złożeniu dostosowywania zostanie przerwane.Aby rozwiązać ten problem, należy zmienić ReferenceFromVbaAssembly właściwość w projekcie, aby False i następnie z powrotem do True, a następnie zastąpić wszelkie odwołania do starej nazwy zestawu w kodzie VBA nową nazwę zestawu.

Zobacz też

Zadania

Porady: udostępnianie kodu z VBA w projektach Visual Basic

Porady: udostępnianie kodu z VBA w projektach Visual C#

Wskazówki: wywoływanie kodu z VBA w projektach Visual Basic

Wskazówki: wywoływanie kodu z VBA w projektach Visual C#

Koncepcje

VBA i rozwiązania pakietu Office w Visual Studio

Inne zasoby

Projektowanie i tworzenie rozwiązań Office

Programowanie dostosowań na poziome dokumentu