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.
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.
Proje menüsünde MyAddin özellikler ' i tıklatın. "AutomationAddin için" Proje adı değiştirin ve Tamam ' ı tıklatın.
Proje Gezgini'nde, Tasarımcı Bağlan'ı seçin. Name özelli?ini "XLFunctions için" olarak değiştirin.
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.
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
Eklenti AutomationAddin.dll oluşturun.
Microsoft Excel 2002 veya Microsoft Office Excel 2003 örnek Otomasyon eklentisi kullanma
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.
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.
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.
Hücrelere B1 ve B2'Yeni çalışma kitabı, 2 ve 5 sayısal değerleri sırasıyla yazın.
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.
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
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.
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
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.
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.
Ö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/
)
Bu makaleyi kullanmak için ne kadar kişisel çaba harcadınız?
Çok az
Az
Orta
Fazla
Çok fazla
Bu bilgiyi geliştirmemiz için nedenleri ve bu konuda neler yapabileceğimizi paylaşın
Teşekkürler! Görüşleriniz, destek içeriğimizi geliştirmemize yardımcı olmak için kullanılmaktadır. Diğer yardım seçenekleri için, lütfen Yardım ve Destek Giriş Sayfasını ziyaret edin.