Aracılığıyla paylaş


İzlenecek yol: Visual C# projesi, vba kodu arama

Bu anlatım, çalışma kitabının Visual Basic for Applications (VBA) kodundan Microsoft Office Excel'deki belge düzeyi özelleştirmesinde yöntemin nasıl çağrılacağını gösterir.Yordam üç basit adımı içerir: bir yöntem ekleme Sheet1 konak öğesi sınıfına, çalışma kitabındaki vba kodunda yöntemi oluşturma ve yöntemi çalışma kitabındaki vba kodundan çağırma.

Uygulama alanı: Bu konudaki bilgiler şu uygulamaların belge düzeyi projelerine yöneliktir: Excel 2013 ve Excel 2010; Word 2013 ve Word 2010. Daha fazla bilgi için bkz. Office Uygulamalarında Kullanılabilir Özellikler ve Proje Türü.

Burada özellikle Excel kullanılıyor olsa da, izlenecek yol tarafından gösterilen kavramlar Excel belge düzeyi projelerine de uygulanabilir.

Bu örneklerde aşağıdaki görevler gösterilir:

  • VBA kodu içeren bir çalışma kitabı oluşturma.

  • Çalışma kitabının konumuna Excel'de Güven Merkezi kullanarak güvenme.

  • Sheet1 konak öğesi sınıfına bir yöntem ekleme.

  • Sheet1 konak öğesi sınıfı için bir arayüz çıkarma.

  • VBA kodunda yöntemi oluşturma.

  • VBA kodundan yöntemi çağırma.

[!NOT]

Bilgisayarınız, aşağıdaki yönergelerde yer alan Visual Studio kullanıcı arayüzü öğelerinden bazıları için farklı adlar veya konumlar gösterebilir.Bu öğeleri bilgisayarınızdaki Visual Studio sürümü ve kullandığınız ayarlar belirler.Daha fazla bilgi için bkz. Visual Studio ayarları.

Önkoşullar

Bu örneği tamamlamak için aşağıdaki bileşenler gerekmektedir:

-

Microsoft Office geliştirici araçlarını içeren bir Visual Studio 2012 sürümü. Daha fazla bilgi için bkz: [Office Çözümeri Geliştirmek İçin Bilgisayarı Yapılandırma](bb398242\(v=vs.110\).md).
  • Excel 2013 veya Excel 2010.

VBA Kodu İçeren Bir Çalışma Kitabı Oluşturma

İlk adım, basit VBA makrosu içeren, makro içerebilen bir çalışma kitabı oluşturmaktır.Özelleştirmenizdeki kodu belgedeki VBA kodunda oluşturmadan önce, çalışma kitabı zaten VBA kodunu içerir.Aksi durumda, Visual Studio, özelleştirme derlemesini çağırmak için VBA kodunu etkin kılma amacıyla VBA projesini değiştiremez.

Kullanmak istediğiniz VBA koduna sahip olan bir çalışma kitabınız varsa, bu adımı geçebilirsiniz.

VBA kodu içeren bir çalışma kitabı oluşturmak için

  1. Excel'i başlatın.

  2. Etkin çalışma kitabını Excel Makro Etkin Çalışma Kitabı (*.xlsm) olarak, WorkbookWithVBA ismiyle kaydedin.Onu, masaüstü gibi kullanışlı bir konuma kaydedin.

  3. Şerit'te Developer (Geliştirici) sekmesine tıklatın.

    [!NOT]

    Geliştirici sekmesi görünür değilse önce onu görünür yapın.Daha fazla bilgi için bkz. Nasıl yapılır: Şerit'te Geliştirici sekmesini göster.

  4. Kod grubunda Visual Basic'i tıklatın.

    Visual Basic Düzenleyicisi açılır.

  5. Proje penceresinde, ThisWorkbook'u çift tıklatın.

    ThisWorkbook nesnesi için kod dosyası açılır.

  6. Aşağıdaki VBA kodunu kod dosyasına ekleyin.Bu kod hiçbir şey yapmayan basit bir işlevi tanımlar.Bu işlevin tek amacı, VBA projesinin çalışma kitabında varolduğunu doğrulamaktır.Bu, anlatımın sonraki adımları için gereklidir.

    Sub EmptySub()
    End Sub
    
  7. Belgeyi kaydedin ve Excel'den çıkın.

Projeyi Oluşturma

Önceden yarattığınız, makro içerebilen çalışma kitabını kullanan Excel belge düzeyi projesini artık oluşturabilirsiniz.

Yeni bir proje oluşturmak için

  1. Visual Studio uygulamasını başlatın.

  2. Dosya menüsünde, Yeni'nin üzerine gelin ve Proje'ye tıklatın.

  3. Şablonlar bölmesinde genişletin **Visual C#**ve sonra genişletin Office/SharePoint.

  4. Seçin Office eklentileri düğümü.

  5. Proje şablonları listesinde seçin Excel 2010 Çalışma kitabı veya Çalışma kitabını 2013 proje.

  6. İçinde adı kutusunda, CallingCodeFromVBA yazın.

  7. Tamam düğmesini tıklatın.

    Office için Visual Studio Araçları Sihirbaz'ı açılır.

  8. Varolan belgeyi kopyala'yı seçin ve Varolan belgenin tam yolu kutusunda, önceden oluşturduğunuz WorkbookWithVBA çalışma kitabının konumunu belirleyin.Eğer kendi makro içerebilen çalışma kitabı kullanıyorsanız, bu çalışma kitabının konumunu belirleyin.

  9. Son düğmesini tıklatın.

    Visual Studio, tasarımcıdaki çalışma kitabı WorkbookWithVBA'i açar ve Çözüm Gezgini'ne CallingCodeFromVBA projesini ekler.

Çalışma Kitabının Konumuna Güvenme

Çözümünüzdeki kodu çalışma kitabındaki VBA kodunda oluşturmadan önce, çalışma kitabındaki VBA'yı çalıştırmak için ona güvenmelisiniz.Bunu yapmanın birkaç yolu vardır.Bu anlatımda, Excel'de Güven Merkezi'ndeki çalışma kitabının konumuna güveerek bir görev gerçekleştireceksiniz.

Çalışma kitabının konumuna güvenmek için

  1. Excel'i başlatın.

  2. Dosya sekmesini tıklatın.

  3. Excel Seçenekleri düğmesini tıklayın.

  4. Kategoriler bölmesinde Güven Merkezi seçeneğini tıklayın.

  5. Detaylar bölmesinde, Güven Merkezi Ayarları'nı tıklayın.

  6. Kategoriler bölmesinde Güvenilen Konumlar seçeneğini tıklayın.

  7. Ayrıntılar bölmesinde, Yeni konum ekle'yi tıklayın.

  8. İçinde Microsoft Office güvenilen konumu iletişim kutusunda, CallingCodeFromVBA projesini içeren klasörü bulun.

  9. Bu konumun alt klasörleri de güvenilirdir'i seçin.

  10. Microsoft Office Güvenilir Konum iletişim kutusunda Tamam'ı tıklayın.

  11. Güven Merkezi iletişim kutusunda Tamam'ı tıklayın.

  12. Excel Seçenekleri iletişim kutusunda Tamam'ı tıklayın.

  13. Excel'den çıkın.

Sheet1 Sınıfına Bir Yöntem Ekleme

VBA projesi kurulduğunda, VBA kodundan çağırabileceğiniz Sheet1 konak öğesi sınıfına ortak bir yöntem ekleyin.

Sheet1 sınıfına bir yöntem eklemek için

  1. Çözüm Gezgini)'de Sheet1.cs'e sağ tıklayın ve ardından Kodu Göster'i tıklayın.

    Sheet1.cs dosyası Kod Düzenleyici'sinde açılır.

  2. Aşağıdaki kodu Sheet1 sınıfına ekleyin.CreateVstoNamedRange yöntemi, yeni NamedRange nesnesini belirli bir aralıkta oluşturur.Bu yöntem, NamedRange'in Selected olayı için de bir olay işleyicisi oluşturur.Bu anlatımda, belgedeki VBA kodundan CreateVstoNamedRange yöntemini çağıracaksınız.

    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. Aşağıdaki yöntemi Sheet1 sınıfına ekleyin.Bu yöntem, geçerli Sheet1 sınıfının örneğini döndürmek için GetAutomationObject yöntemini geçersiz kılar.

    protected override object GetAutomationObject()
    {
        return this;
    }
    
  4. Aşağıdaki öznitelikleri, Sheet1 sınıf bildiriminin ilk satırından önce uygulayın.Bu öznitelikler sınıfı COM'e görünür kılar, fakat bir sınıf arayüzü yaratmaz.

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

Sheet1 Sınıfı için bir Arayüz Çıkarma

CreateVstoNamedRange yöntemini VBA kodunda oluşturmadan önce, bu yöntemi tanımlayan ortak bir arayüz oluşturmalısınız ve bu arayüzü COM'de oluşturmalısınız.

Sheet1 sınıfına bir arayüz çıkarmak için

  1. Sheet1.cs kod dosyasında, Sheet1 sınıfının herhangi bir yerine tıklayın.

  2. Yeniden Düzenle menüsünde, Arayüz Çıkart'ı tıklayın.

  3. Arayüz Çıkart iletişim kutusunda, Ortak üyeleri arayüz oluşturmak için seçin kutusunda, CreateVstoNamedRange yöntemi için bir girdiyi tıklayın.

  4. Tamam düğmesini tıklatın.

    Visual Studio, ISheet1 isimli yeni bir arayüz yaratır ve ISheet1 arayüzünü uygulaması için Sheet1 sınıfının tanımını değiştirir.Visual Studio, ISheet1.cs dosyasını Kod Düzenleyicisi'nde açar.

  5. ISheet1.cs dosyasında, ISheet1 arayüzü bildirimini aşağıdaki kodla değiştirin.Bu kod, ISheet1 arayüzünü artak yapar ve arayüzü COM'e görünür kılmak için ComVisibleAttribute özniteliğini uygular.

    [System.Runtime.InteropServices.ComVisible(true)]
    public interface ISheet1
    {
        void CreateVstoNamedRange(Microsoft.Office.Interop.Excel.Range range, string name);
    }
    
  6. Projeyi yapılandırın.

VBA Kodunda Yöntemi Oluşturma

Çalışma kitabını VBA kodunda CreateVstoNamedRange yöntemini oluşturmak için, ReferenceAssemblyFromVbaProject özelliğini Sheet1 konak öğesi için True'ya ayarlayın.

VBA kodunda yöntemi oluşturmak için

  1. Çözüm Gezgini'nde Sheet1.cs kod dosyasına çift tıklayın.

    WorkbookWithVBA dosyası, Sheet1 görünürken tasarımcıda açılır.

  2. Özellikler penceresinde, ReferenceAssemblyFromVbaProject özelliğini seçin ve değerini True olarak değiştirin.

  3. Görüntülenen iletide Tamam'ı tıklayın.

  4. Projeyi yapılandırın.

VBA Kodundan Yöntemi Çağırma

CreateVstoNamedRange yöntemini çalışma kitabındaki VBA kodundan çağırabilirsiniz.

[!NOT]

Bu anlatımda, projede hata ayıklarken VBA kodunu çalışma kitabına ekleyeceksiniz.Bu belgeye eklediğiniz VBA kod, siz projeyi bir sonraki seferde yapılandırdığınızda yeniden yazılır, çünkü Visual Studio yapı çıktısı klasöründeki belgeyi, ana proje klasöründeki belgenin kopyasıyla değiştirir.VBA kodunu kaydetmek istiyorsanız, proje klasöründeki belgenin içine kopyalayabilirsiniz.Daha fazla bilgi için bkz. VBA ve Belge Düzeyi Özelleştirmelerini Birleştirme.

VBA kodundan yöntemi çağırmak için

  1. F5 tuşuna basarak projeyi çalıştırın.

  2. Geliştirici sekmesindeki Kod grubunda, Visual Basic'i tıklatın.

    Visual Basic Düzenleyicisi açılır.

  3. Ekle menüsünde Modül komutunu tıklatın.

  4. Aşağıdaki kodu yeni bir modüle ekleyin.

    Bu kod, özelleştirme derlemesindeki CreateTable yöntemini çağırır.Makro, VBA kodunda oluşturdupunuz Sheet1 konak öğesi sınıfına erişim amacıyla genel GetManagedClass yöntemini kullanarak bu yönteme erişir.GetManagedClass yöntemi, ReferenceAssemblyFromVbaProject özelliğini bu anlatımda önceden ayarladığınızda otomatik olaral oluşturulmuştur.

    Sub CallVSTOMethod()
        Dim VSTOSheet1 As CallingCodeFromVBA.Sheet1
        Set VSTOSheet1 = GetManagedClass(Sheet1)
        Call VSTOSheet1.CreateVstoNamedRange(Sheet1.Range("A1"), "VstoNamedRange")
    End Sub
    
  5. F5'e basın.

  6. Açık çalışma kitabında, Sheet1 üzerindeki A1 hücresini tıklayın.İleti kutusunun görünür olduğunu doğrulayın.

  7. Değişiklikleri kaydetmeden Excel'den çıkın.

Sonraki Adımlar

Bu konularda, VBA'den Office çözümlerindeki kodu çağırma hakkında daha fazlasını öğrenebilirsiniz.

Ayrıca bkz.

Görevler

Nasıl yapılır: Visual Basic projesindeki vba koduna açığa çıkaran

Nasıl yapılır: Visual C# projesi, vba kodu göstermek

İzlenecek yol: Visual Basic projesindeki vba kodu arama

Diğer Kaynaklar

VBA ve Belge Düzeyi Özelleştirmelerini Birleştirme

Belge Düzeyi Özelleştirmelerini Programlama