Udostępnij za pośrednictwem


Instruktaż: Wywołanie kodu z języka VBA w Visual C# projektu

W tym instruktażu przedstawiono sposób wywołania metody w dostosowywania poziomie dokumentu dla programu Microsoft Office Excel z programu Visual Basic dla kodu Applications (VBA) w skoroszycie.Procedura obejmuje trzy podstawowe kroki: dodać metodę do Sheet1 host element klasy, wystawiać metoda do kodu VBA w skoroszycie i następnie wywołać metodę z kodu VBA w skoroszycie.

Dotyczy: Informacje przedstawione w tym temacie dotyczą 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 aplikacji pakietu Office i typ projektu.

Chociaż w tym instruktażu specjalnie używa programu Excel, pojęcia świadczy Instruktaż mają również zastosowanie do projektów poziomie dokumentu dla programu Word.

W tym instruktażu przedstawiono następujące zadania:

  • Tworzenie skoroszytu, który zawiera kod języka VBA.

  • Ufanie lokalizacji skoroszytu za pomocą Centrum zaufania w programie Excel.

  • Dodanie metody do Sheet1 host element klasy.

  • Wyodrębnianie interfejs dla Sheet1 host element klasy.

  • Wystawiając metoda do kodu VBA.

  • Wywołanie metody z kodu VBA.

[!UWAGA]

Komputer może pokazać różne nazwy lub lokalizacje dla niektórych użytkowników programu Visual Studio elementów interfejsu w poniższych instrukcji.Wydanie programu Visual Studio, że masz i ustawienia, które możesz używać określenia tych elementów.Aby uzyskać więcej informacji, zobacz Visual Studio, ustawienia.

Wymagania wstępne

Potrzebne do przeprowadzenia tego instruktażu następujące składniki:

-

Wersja Visual Studio 2012 zawierająca narzędzia dla deweloperów pakietu Microsoft Office. Aby uzyskać więcej informacji, zobacz [Konfigurowanie komputera do opracowywania rozwiązań pakietu Office](bb398242\(v=vs.110\).md).
  • Excel 2013or Excel 2010.

Tworzenie skoroszytu, który zawiera kod języka VBA

Pierwszym krokiem jest utworzenie z włączoną obsługą makr skoroszyt zawiera proste makra VBA.Zanim można wystawiać kod w dostosowywania (VBA), skoroszyt musi już zawierać kod języka VBA.W przeciwnym razie Visual Studio nie można zmodyfikować projekt VBA, aby włączyć kod VBA do montażu dostosowywania.

Jeśli masz już skoroszyt zawierający kod VBA, który chcesz użyć, możesz pominąć ten krok.

Aby utworzyć skoroszyt zawierający kod VBA

  1. Uruchom program Excel.

  2. Zapisuje aktywny dokument jako Zostaną skoroszytu (*.xlsm) o nazwie WorkbookWithVBA.Zapisz go w dogodnej lokalizacji, takiej jak pulpit.

  3. Kliknij na Wstążce, autora kartę.

    [!UWAGA]

    Jeśli autora karta nie jest widoczna, najpierw należy wyświetlić.Aby uzyskać więcej informacji, zobacz Jak: Pokaż kartę Deweloper na Wstążce.

  4. W Kod grupy, kliknij przycisk programu Visual Basic.

    Otwiera edytor Visual Basic.

  5. W Projekt okno, kliknij dwukrotnie ThisWorkbook.

    Plik kodu dla ThisWorkbook otwiera obiekt.

  6. Dodaj następujący kod VBA w pliku kodu.Ten kod zawiera definicję funkcji prostego, który nic nie robi.Jedynym celem tej funkcji jest zapewnienie, że projekt VBA istnieje w skoroszycie.Jest to wymagane do podjęcia kroków w tym instruktażu.

    Sub EmptySub()
    End Sub
    
  7. Zapisz dokument, a następnie zamknij program Excel.

Tworzenie projektu

Teraz można utworzyć projekt na poziomie dokumentu dla programu Excel z włączoną obsługą makr skoroszyt utworzony wcześniej.

Aby utworzyć nowy projekt

  1. Start Visual Studio.

  2. Na pliku menu, wskaż Nowa, a następnie kliknij przycisk Projekt.

  3. W okienku szablony, rozwiń węzeł Visual C#, a następnie rozwiń węzeł Office i SharePoint.

  4. Wybierz Dodatki pakietu Office węzła.

  5. Zaznacz na liście szablonów projektu, Skoroszyt programu Excel 2010 lub Skoroszytu programu Excel 2013 projektu.

  6. W Nazwa wpisz CallingCodeFromVBA.

  7. Kliknij przycisk OK.

    Visual Studio Tools for Office Project kreatora otwiera.

  8. Wybierz skopiować istniejący dokumenti w pełną ścieżkę do istniejącego dokumentu określ lokalizację WorkbookWithVBA skoroszytu, który został utworzony wcześniej.Jeśli używasz własne skoroszyt z obsługą makr, należy określić lokalizację tego skoroszytu.

  9. Kliknij przycisk wykończenie.

    Visual StudioOtwiera WorkbookWithVBA skoroszyt w Projektancie i dodaje CallingCodeFromVBA projekt Solution Explorer.

Ufanie lokalizacji skoroszytu

Przed udostępnieniem kodu w swoje rozwiązanie do kodu VBA w skoroszycie, musi ufać VBA w skoroszycie, aby uruchomić.Aby to zrobić na kilka sposobów.W tym instruktażu będzie wykonać to zadanie przez zaufanie do lokalizacji skoroszytu w Centrum zaufania w programie Excel.

Aby ufać lokalizacji skoroszytu

  1. Uruchom program Excel.

  2. Kliknij przycisk pliku kartę.

  3. Kliknij przycisk Opcje programu Excel przycisk.

  4. W okienku Kategoria kliknij Centrum zaufania.

  5. W okienku szczegółów kliknij Ustawienia Centrum zaufania.

  6. W okienku Kategoria kliknij Zaufane lokalizacje.

  7. W okienku szczegółów kliknij Dodaj nową lokalizację.

  8. W Zaufanej lokalizacji w programie Microsoft Office okno dialogowe, przejdź do folderu, który zawiera projekt CallingCodeFromVBA.

  9. Wybierz podfoldery tej lokalizacji są także zaufane.

  10. W Zaufanej lokalizacji w programie Microsoft Office okno dialogowe, kliknij przycisk OK.

  11. W Centrum zaufania okno dialogowe, kliknij przycisk OK.

  12. W Opcje programu Excel okno dialogowe, kliknij przycisk OK.

  13. Zakończ Excel.

Dodanie metody do klasy Arkusz1

Teraz, że projekt VBA jest skonfigurowana, dodać metodę publicznych do Sheet1 host klasy element, który można połączyć z kodu VBA.

Aby dodać metodę do klasy Arkusz1

  1. W Solution Explorer, kliknij prawym przyciskiem myszy Sheet1.cs, a następnie kliknij przycisk Widok Kod.

    Sheet1.cs plik zostanie otwarty w edytorze kodu.

  2. Dodaj następujący kod do Sheet1 klasy.CreateVstoNamedRange Metoda tworzy nową NamedRange obiektu w określonym zakresie.Metoda ta również tworzy moduł obsługi zdarzenia Selected przypadku NamedRange.Później w tym instruktażu będą wywoływać CreateVstoNamedRange metoda z kodu VBA w dokumencie.

    private Microsoft.Office.Tools.Excel.NamedRange namedRange1;
    
    public void CreateVstoNamedRange(Excel.Range range, string name)
    {
        if (!this.Controls.Contains(name))
        {
            namedRange1 = this.Controls.AddNamedRange(range, name);
            namedRange1.Selected += new Excel.DocEvents_SelectionChangeEventHandler(
                    namedRange1_Selected);
        }
        else
        {
            MessageBox.Show("A named range with this specific name " +
                "already exists on the worksheet.");
        }
    }
    
    private void namedRange1_Selected(Microsoft.Office.Interop.Excel.Range Target)
    {
        MessageBox.Show("This named range was created by Visual Studio " +
            "Tools for Office.");
    }
    
  3. Dodaj następującą metodę do Sheet1 klasy.Ta metoda zastępuje GetAutomationObject metoda zwraca bieżące wystąpienie Sheet1 klasy.

    protected override object GetAutomationObject()
    {
        return this;
    }
    
  4. Zastosować następujące atrybuty przed pierwszą linię Sheet1 deklaracji klasy.Te atrybuty uwidocznić klasy COM, ale bez generowania interfejsu klasy.

    [System.Runtime.InteropServices.ComVisible(true)]
    [System.Runtime.InteropServices.ClassInterface(
        System.Runtime.InteropServices.ClassInterfaceType.None)]
    

Wyodrębnianie interfejs dla klasy Arkusz1

Zanim można wystawiać CreateVstoNamedRange metoda kod VBA, należy utworzyć interfejs publiczny, który określa tę metodę, i musi ujawniać ten interfejs do modelu COM.

Aby wyodrębnić interfejs dla klasy Arkusz1

  1. W Sheet1.cs kod pliku, kliknij w dowolnym miejscu w Sheet1 klasy.

  2. Na refaktoringu menu, kliknij przycisk Dodatek interfejs.

  3. W Dodatek interfejs okno dialogowe, w Wybierz członków publicznych do formularza interfejsu kliknij wpis dla CreateVstoNamedRange metoda.

  4. Kliknij przycisk OK.

    Visual Studiogeneruje nowy interfejs o nazwie ISheet1, i zmienia się definicję Sheet1 klasy, tak aby implementuje ISheet1 interfejsu.Visual StudioOtwiera również ISheet1.cs plik w edytorze kodu.

  5. W ISheet1.cs pliku, należy zastąpić ISheet1 interfejs deklaracji następujący kod.Sprawia, że ten kod ISheet1 interfejsu publicznego i dotyczy ComVisibleAttribute atrybut, aby wyświetlić interfejs COM.

    [System.Runtime.InteropServices.ComVisible(true)]
    public interface ISheet1
    {
        void CreateVstoNamedRange(Microsoft.Office.Interop.Excel.Range range, string name);
    }
    
  6. Skompiluj projekt.

Wystawiając metoda do kodu VBA

Wystawiać CreateVstoNamedRange ustawić metody do kodu VBA w skoroszycie, ReferenceAssemblyFromVbaProject właściwość dla Sheet1 element hosta do True.

Aby odsłonić metoda do kodu VBA

  1. W Solution Explorer, kliknij dwukrotnie Sheet1.cs.

    WorkbookWithVBA plik zostanie otwarty w Projektancie z Arkusz1 widoczne.

  2. W Właściwości okno, wybierz ReferenceAssemblyFromVbaProject właściwość i zmień wartość na True.

  3. Kliknij przycisk OK w wiadomości, która jest wyświetlana.

  4. Skompiluj projekt.

Wywołanie metody z kodu VBA

Można teraz wywołać CreateVstoNamedRange metoda z kodu VBA w skoroszycie.

[!UWAGA]

W tym instruktażu należy dodać kod języka VBA w skoroszycie podczas debugowania projektu.Kod VBA, który można dodać do tego dokumentu zostanie zastąpiona przy następnym budowania projektu, ponieważ 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 skopiować go do dokumentu w folderze projektu.Aby uzyskać więcej informacji, zobacz Łączenie VBA i dostosowania na poziomie dokumentu.

Wywołanie metody z kodu VBA

  1. Naciśnij klawisz F5, aby uruchomić projekt.

  2. Na autora kartę w Kod grupy, kliknij przycisk programu Visual Basic.

    Otwiera edytor Visual Basic.

  3. Na wstawić menu, kliknij przycisk moduł.

  4. Dodaj następujący kod do nowego modułu.

    Ten kod wywołuje CreateTable metoda w zgromadzeniu dostosowywania.Makra uzyskuje dostęp do tej metody przy użyciu szablonu globalnego GetManagedClass metoda dostępu do Sheet1 host klasy elementu, który narażony na kod języka VBA.GetManagedClass Metoda został wygenerowany automatycznie, po ustawieniu ReferenceAssemblyFromVbaProject właściwość wcześniej w tym instruktażu.

    Sub CallVSTOMethod()
        Dim VSTOSheet1 As CallingCodeFromVBA.Sheet1
        Set VSTOSheet1 = GetManagedClass(Sheet1)
        Call VSTOSheet1.CreateVstoNamedRange(Sheet1.Range("A1"), "VstoNamedRange")
    End Sub
    
  5. Naciśnij klawisz F5.

  6. Otwórz skoroszyt, kliknij komórkę, A1 na Arkusz1.Sprawdź, czy zostanie wyświetlone okno komunikatu.

  7. Zamknij program Excel bez zapisywania zmian.

Następne kroki

Możesz się więcej o wywołanie kodu w rozwiązaniach dla pakietu Office z języka VBA w tych tematach:

Zobacz też

Zadania

Jak: narazić kodu VBA w projekcie programu Visual Basic

Jak: narazić kodu VBA w Visual C# projektu

Instruktaż: Dzwoniących kodu VBA w projekcie programu Visual Basic

Inne zasoby

Łączenie VBA i dostosowania na poziomie dokumentu

Dostosowania poziomu dokument programowania