Makale numarası: 285337 - Son Gözden Geçirme: 29 Ocak 2007 Pazartesi - Gözden geçirme: 5.4

Visual Basic Automation eklentisini Excel çalışma sayfası işlevleri için oluşturma

Sistem İpucuBu makale, kullandığınızdan farklı bir işletim sistemine yöneliktir. Sizinle ilgili olmayabilecek makale içeriği devre dışı bırakıldı.
Hepsini aç | Hepsini kapa

Özet

Microsoft Excel 2000'de, bir işlev doğrudan bir Bileşen Nesne Modeli (COM) eklenti bir çalışma sayfası hücresini formülden çağrılamıyor. Bunun yerine, dolaylı işlevi çağrılabilir bir Visual Basic for Applications (VBA) sarmalayıcı COM eklentisi işlevi oluşturmanız gerekir.

Tümleştirme, COM (Otomasyon eklenti olarak da adlandırılır) eklentileri Excel 2002'de ve daha sonra COM eklentisi işlevler artık bir VBA sarmalayıcı gerek kalmadan doğrudan çalışma sayfası formül tarafından çağrılabilir şekilde geliştirilmiştir. Bu makalede, bir Otomasyon eklenti işlevleri, Excel 2002 ve daha sonra çalışma sayfası formüllerinden çağrılabilecek sunar, Visual Basic ile nasıl oluşturulacağını göstermektedir.

Daha fazla bilgi

Örnek Otomasyon eklenti oluştur

  1. Visual Basic'te, yeni bir eklenti proje başlatın.
  2. FrmAddIn adlı bir form, varsayılan olarak projeye eklenir. Bu örnek amacıyla bu formu, projeden kaldırılmış olabilir. Proje Gezgini'nde, formu sağ tıklatın ve sonra da kısayol menüsünde frmAddIn Kaldır ' ı tıklatın.
  3. Proje menüsünde MyAddin özellikler ' i tıklatın. "AutomationAddin için" Proje adı değiştirin ve Tamam ' ı tıklatın.
  4. Proje Gezgini'nde, Tasarımcı Bağlan'ı seçin. Name özelli?ini "XLFunctions için" olarak değiştirin.
  5. Proje Gezgini'nde, XLFunctions Tasarımcısı'nı çift tıklatın. Genel sekmesinde, Tasarımcı ayarları aşağıdaki değişiklikleri yapın:
    • Uygulama listesinden, Microsoft Excel'in seçin.
    • Uygulama sürümü</a0> listesinden, Microsoft Excel 10.0 seçin.
      Not: Microsoft Office Excel 2003 kullanıyorsanız, Microsoft Excel'in 11.0Uygulama sürümü seçin.
    • Ilk yükleme davranışı ayarı için isteğe bağlı yükleme değiştirin.
  6. XLFunctions hala tasarımcısını açın, Görünüm menüsünden kodu seçin. Kod modülünde aşağıdaki ile Değiştir:
    Option Explicit
    Private Declare Function GetTickCount Lib "kernel32" () As Long
    
    Dim oApp As Object  'The Excel Application object
    
    Private Sub AddinInstance_OnAddInsUpdate(custom() As Variant)
       Exit Sub
    End Sub
    
    Private Sub AddinInstance_OnConnection(ByVal Application As Object, ByVal ConnectMode As AddInDesignerObjects.ext_ConnectMode, ByVal AddInInst As Object, custom() As Variant)
       Set oApp = Application
    End Sub
    
    Private Sub AddinInstance_OnDisconnection(ByVal RemoveMode As AddInDesignerObjects.ext_DisconnectMode, custom() As Variant)
       Set oApp = Nothing
    End Sub
    
    Private Sub AddinInstance_OnStartupComplete(custom() As Variant)
       Exit Sub
    End Sub
    
    Public Function TickCount() As Long
       '----------------------------------------------------------------------
       '** A volatile function that is called each time the sheet is calculated.
       '   Call with =TICKCOUNT().
       '----------------------------------------------------------------------
       oApp.Volatile
       TickCount = GetTickCount
    End Function
    
    Public Function Add1(Num1 As Variant, Num2 As Variant) As Variant
       '----------------------------------------------------------------------
        '** A function with two required arguments.
        '   Can be called with formulas such as =Add1(1,3) or =Add1(A1,A2).
       '----------------------------------------------------------------------
        On Error Resume Next
        Add1 = "The sum of " & Num1 & " and " & Num2 & " is " & _
            CDbl(Num1) + CDbl(Num2)
        If Err <> 0 Then Add1 = CVErr(2036)  'xlErrNum = 2036
    End Function
    
    Public Function Add2(Num1 As Variant, Num2 As Variant, Optional Num3 As Variant) As Variant
       '----------------------------------------------------------------------
       '** A function with two required arguments and a third optional argument.
       '   Can be called with formulas such as =Add2(1,2), =Add2(A1,A2,A3).
       '----------------------------------------------------------------------
        Dim Sum As Double, sMsg As String
        On Error GoTo Handler
        Sum = CDbl(Num1) + CDbl(Num2)
        If IsMissing(Num3) Then
            sMsg = "The sum of " & Num1 & " and " & Num2 & " is "
        Else
            Sum = Sum + CDbl(Num3)
            sMsg = "The sum of " & Num1 & ", " & Num2 & " and " & Num3 & " is "
        End If
        Add2 = sMsg & Sum
        Exit Function
    Handler:
        Add2 = CVErr(2036)  'xlErrNum = 2036
    End Function
    
    Public Function Add3(ParamArray Nums()) As Variant
       '----------------------------------------------------------------------
       '** Demonstrates a function with a variable number of arguments.
       '   Can be called with formulas like =Add3(1), =Add3(1,2,3,4),
       '   or =Add3(A1,A2).
       '----------------------------------------------------------------------
        Dim Sum As Double, i As Integer
        On Error GoTo Handler
        For i = 0 To UBound(Nums)
            Sum = Sum + CDbl(Nums(i))
        Next
        Add3 = "The sum is " & Sum
        Exit Function
    Handler:
        Add3 = CVErr(2036)  'xlErrNum = 2036
    End Function
    
    Public Function ReturnArray(nRows As Long, nCols As Long) As Variant
       '----------------------------------------------------------------------
       '** Demonstrates how to return an array of values (for use in Excel
       '   "array formulas").
       '   Can be called with a formula such as =ReturnArray(1,3).
       '----------------------------------------------------------------------
        On Error GoTo Handler
        ReDim a(0 To nRows, 0 To nCols) As Variant
        Dim r As Long, c As Long
        For r = 0 To nRows - 1
            For c = 0 To nCols - 1
                a(r, c) = "r" & r + 1 & "c" & c + 1
            Next c
        Next r
        ReturnArray = a
        Exit Function
    Handler:
        ReturnArray = CVErr(2015)  'xlErrValue = 2015
    End Function
    
    Public Function GetArray(Nums As Variant) As Variant
       '----------------------------------------------------------------------
       '** Demonstrates how to use an array(or range of multiple cells) as
       '   a function argument.
       '   Can be called with formulas such as =GetArray(A1:B5), GetArray(A1),
       '   or GetArray({1,2,3;4,5,6}).
       '----------------------------------------------------------------------
        Dim Sum As Double, v As Variant
        On Error GoTo Handler
        If IsArray(Nums) Then
            For Each v In Nums
                Sum = Sum + CDbl(v)
            Next
        Else
            Sum = CDbl(Nums)
        End If
        GetArray = "The sum is " & Sum
        Exit Function
    Handler:
        GetArray = CVErr(2036)  'xlErrNum = 2036
    End Function
    
    					
  7. Eklenti AutomationAddin.dll oluşturun.

Microsoft Excel 2002 veya Microsoft Office Excel 2003 örnek Otomasyon eklentisi kullanma

  1. Visual Basic eklentisi proje Uygulama sürümü listesini Microsoft Excel 10.0 seçtiyseniz, Microsoft Excel 2002'yi başlatın.
    Not: Başlat Microsoft Office Excel 2003, Microsoft Excel'in 11.0Uygulama sürümü Visual Basic Eklenti Listesi'de-proje seçtiyseniz.
  2. Araçlar menüsünde, EklentilerEklenti Yöneticisi iletişim kutusunu görüntülemek için tıklatın. Automation ' ı tıklatın, AutomationAddin.XLFunctions listeden seçin ve Tamam ' ı tıklatın. AutomationAddin.XLFunctions seçin ve sonra Eklenti Yöneticisi iletişim kutusunu kapatmak için Tamam ' ı tıklatın.
  3. A1 hücresine aşağıdaki formülü yazın:
    =TickCount()
    Formül, sistemin yeniden başlatılmasından itibaren geçen milisaniye sayısını gösteren, büyük bir sayı verir.
  4. Hücrelere B1 ve B2'Yeni çalışma kitabı, 2 ve 5 sayısal değerleri sırasıyla yazın.
  5. B3 hücresine aşağıdaki formülü yazın:
    = Add1(B1, B2)
    ve ENTER tuşuna basın. Formül, "2 ve 5 7 toplamıdır" döndürür.
  6. B4 hücresinde, aşağıdaki formülü yazın:
    = Add2(B1, B2)
    ve ENTER tuşuna basın. Formül, "2 ve 5 7 toplamıdır" döndürür. Isteğe bağlı üçüncü bağımsız değişken kullanmak için formülü değiştirin:
    = Add2(B1, B2, 10)
    Formül, "2, 5 ile 10 17 toplamıdır." verir
  7. B5 hücresine aşağıdaki formülü yazın:
    =Add3(1,2,3,4,5,6)
    ve ENTER tuşuna basın. Formül, "21 toplamıdır" döndürür. Add3 işlevi için parametre ParamArray ' bildirildiğinden, bu işlev için bağımsız değişken bir dizi kullanabilirsiniz.

    Not Excel, bir tek bir çalışma sayfası işlevini 29 bağımsız değişkenleri sınırlar.
  8. B6 hücresine aşağıdaki formülü yazın:
    =Add1("x","y")
    ve ENTER tuşuna basın. Formül, # sayı! (xlErrNum) olduğundan, türü dönüştürme CDbl işlevi ile çift yazmak için "y" ve "x" dize dönüştürme başarısız. Varsayılan DEğER bir işlevi bir çalıştırma hatası ile karşılaştığında değerdir döndürür!. Farklı bir hata geri dönmek istiyorsanız, kullanım hata işleme ve Excel'in yerleşik hata değerlerinden (xlErrDiv0, xlErrNA, xlErrName, xlErrNull, xlErrNum, xlErrRef veya xlErrValue.) döndürebilir
  9. Hücreleri E1:G5 seçin. Aşağıdaki formülü yazın:
    =ReturnArray(5,3)
    ve formülünü dizi formülü olarak girmek için CTRL + ÜST KARAKTER + ENTER tuşlarına basın. Işlev bir 5 x 3 benzersiz değerler dizisini verir.
  10. Tüm sayılar hücre I1:J3 girin. ı4 hücresine aşağıdaki formülü yazın:
    =GetArray(I1:J3)
    Formülün sonucu, benzer şekilde, "n (n I1:J3 sayının toplamı olduğu) toplamıdır" döndürecektir. I5 içinde aşağıdaki formülü yazın:
    =GetArray({1,2,3,4})
    ve ENTER tuşuna basın. Formül, "10 toplamıdır" döndürür.

Işlev bağlama

Bağlama için bir Otomasyon eklentisi fonksiyonlarında işlevi bağlama öncelik sonunda ' dir. Bir işlev, otomasyon Eğer eklentisiyle aynı adı taşıyan bir Excel yerleşik işlevi, Excel'in yerleşik fonksiyon öncelik sahibi olur. VBA işlevleri çalışma kitaplarını ve normal eklentiler (.xla) göre de önceliği üzerinden Otomasyon Ekle - fonksiyonlarda. Excel'de kullanmak için kendi fonksiyonlarınızı oluşturduğunuzda, zaten kullanımda olan işlevleri adlarınız vermeyin Excel'in yerleşik işlevleri tarafından önerilir.

Özellikle, otomasyon bir eklenti içinde bir işlev çağırmak için bir formüldeki fonksiyon için sunucuadı gibi bir sözdizimi kullanarak ayrıntısına inebilir. SınıfAdı. FunctionName (...). Örneğin örnekte Add1 işlevini çağırmak için aşağıdakileri kullanabilirsiniz:
=AutomationAddin.XLFunctions.Add1(1,2)
Yalnızca, Otomasyon eklentisi, üst düzey yöntemlerini ve özelliklerini çağırabilir, nesne modeli, kendi üst düzey olmayan işlevleri çağırmak için eklenti aşağı yürütmek edemiyor.

Geçici işlevler

Bir geçici yeniden hesaplar olup olmadığı da değişen hücre işlevi için bir bağımlılık olmasına bakılmaksızın, bir çalışma sayfasındaki herhangi bir hücreyi bir değişiklik yapıldığında, bir işlevdir. Excel'e iç geçici bir işlev RAND() işlevi örneğidir. F9 tuşuna bastığınızda geçici işlevler de yeniden hesaplayın.

Otomasyon bir eklenti içinde bir işlevi geçici yapmak için <a0></a0>, Excel Uygulama nesnesinin geçici yöntemini çağırın. Örnek olarak Yukarıdaki kod, Excel Uygulama nesnesine başvuru OnConnection olayının eklenti sırasında alınan gösterir. Otomasyon eklentisi örnek TickCount işlevinde değişken ' dir. Unutmayın çalışma sayfasındaki herhangi bir hücreyi değişiklik ya da aşağıdaki formülü içeren hücre için F9 tuşuna basın:
=TickCount()
yeniden hesaplar.

Otomasyon eklentileri ve Eklenti Yöneticisi

Eklenti Yöneticisi eklenti ın adı için Otomasyon eklenti HKEY_CLASSES_ROOT\ <progid>kayıt defteri anahtarının varsayılan değeri olarak kullanılır. Bu anahtarın varsayılan değerini ayarlar, Visual Basic kullanıcı arabiriminde (UI) özellik olduğunu unutmayın; ancak, bu anahtarın el ile kayıt defteri düzenleyicisini veya yükleme sırasında için eklentiyi değiştirilebilir.

Otomasyon eklenti Yöneticisi'nde - Ekle açıklaması, her zaman eklenti ın Progıd olacaktır; bu davranışı değiştirmek için bir yolu yoktur.

Otomasyon eklentileri ve fonksiyon Sihirbazı

Her Otomasyon eklentisi kendi kategori Excel işlevi olan Sihirbazı. Kategori adı eklenti için Progıd, Otomasyon eklenti işlevleri için farklı bir kategori adını belirtemezsiniz. Ayrıca, bir işlev açıklamaları, bağımsız değişkeni açıklamaları veya Yardım Otomasyon eklenti işlevleri için işlev Sihirbazı'nda belirtmek için bir yolu yoktur.

Referanslar

Ek bilgi için, Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
256624  (http://support.microsoft.com/kb/256624/ ) Bir Excel çalışma sayfası işlevi COM eklentisi işlevi nasıl kullanılır
Daha fazla bilgi için aşağıdaki Microsoft Web sitesine bakın:
http://support.microsoft.com/ofd (http://support.microsoft.com/ofd)


(c) Microsoft Corporation 2001, tüm hakları saklıdır. Katkıyı Gamze B Turner, Microsoft Corporation.


Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Office Excel 2003
  • Microsoft Excel 2002 Standard Edition
Anahtar Kelimeler: 
kbmt kbhowto KB285337 KbMttr
Otomatik TercümeOtomatik Tercüme
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:285337  (http://support.microsoft.com/kb/285337/en-us/ )