Vytvoření doplňku automatizace jazyka pro sešit Excel funkce

ID článku: 285337 - Produkty, které se vztahují k tomuto článku.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Souhrn

V aplikaci Excel 2000 nelze volat funkci přímo v doplňku Component Object Model (COM) z vzorec buňky listu. Místo toho je nutné vytvořit jazyka pro obálky (VBA) funkce doplňku COM tak, aby funkce nazývá nepřímo.

Integrace z doplňky modelu COM (nazývané automatizace doplňky) v aplikaci Excel 2002 a novější bylo rozšířeno tak, že funkce doplňku COM může nyní volána přímo z listu vzorce bez nutnosti VBA obálky. Tento článek ukazuje, jak vytvořit automatizace doplněk s jazyka, který zpřístupňuje funkce, které lze volat z aplikace Excel 2002 a novější vzorce listu.

Další informace

Vytvoření doplňku Sample Automation

  1. V aplikaci Visual Basic spustit nový projekt doplňků.
  2. Ve výchozím nastavení je formulář s názvem frmAddIn přidán do projektu. Pro účely této ukázkové formuláře může být odebrán z projektu. V Průzkumníku Project klepněte pravým tlačítkem myši na formulář a v místní nabídce klepněte na příkaz Odebrat frmAddIn.
  3. V nabídce projekt klepněte na tlačítko Vlastnosti MyAddin. Změnit Název projektu "AutomationAddin" a potom klepněte na tlačítko OK.
  4. V Průzkumníku Project vyberte Návrhář připojit. Změnit jeho vlastnost Name "XLFunctions".
  5. V aplikaci Project Explorer poklepejte na položku Návrhář XLFunctions. Na kartě Obecné proveďte následující změny nastavení návrháře:
    • Ze seznamu aplikace vyberte Uzavřený.
    • Ze seznamu Application verze vyberte Microsoft Excel 10.0.
      Poznámka: Pokud používáte Microsoft Office Excel 2003, vyberte ze seznamu Verze aplikaceMicrosoft Excel 11.0.
    • Změnit nastavení Chování počáteční zatíženízatížení na požádání.
  6. S XLFunctions Návrhář stále otevřete, vyberte Kód z nabídky Zobrazit. Nahraďte následující kód v modulu:
    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. Sestavit doplňku jako AutomationAddin.dll.

Pomocí doplňku Sample Automation v aplikaci Microsoft Excel 2002 nebo Microsoft Office Excel 2003

  1. Spusťte aplikaci Microsoft Excel 2002, pokud jste vybrali v seznamu Aplikací verze projektu jazyka doplněk Microsoft Excel 10.0.
    Poznámka: Start aplikace Excel 2003, pokud jste vybrali uzavřený 11.0 v seznamu verze aplikace přidat jazyka - projektu.
  2. V nabídce Nástroje klepněte na příkaz Doplňky zobrazíte dialogové okno Správce doplňků. Klepněte na tlačítko AutomatizaceAutomationAddin.XLFunctions vyberte v seznamu a klepněte na tlačítko OK. Vyberte AutomationAddin.XLFunctions a potom klepněte na tlačítko OK zavřete dialogové okno Správce doplňků.
  3. V buňce A1 zadejte následující vzorec:
    =TickCount()
    Vzorec vrátí velké číslo, které představuje počet milisekund, která uplynula od spuštění systému.
  4. V buňkách B1 a B2 nový sešit zadejte číselné hodnoty 2 a 5.
  5. V buňce B3 zadejte následující vzorec:
    = Add1(B1, B2)
    a stiskněte klávesu ENTER. Vzorec vrátí "the součet 2 a 5 je 7".
  6. V buňce B4 zadejte následující vzorec:
    = Add2(B1, B2)
    a stiskněte klávesu ENTER. Vzorec vrátí "the součet 2 a 5 je 7". Upravit vzorec použít třetí argument volitelné:
    = Add2(B1, B2, 10)
    Vzorec vrátí názvem the součet 2, 5 a 10 je 17.
  7. V buňce B5 zadejte následující vzorec:
    =Add3(1,2,3,4,5,6)
    a stiskněte klávesu ENTER. Vzorec vrátí "Tento součet je 21". Protože parametr funkce Add3 je deklarován jako ParamArray, můžete použít proměnné počet argumentů pro tuto funkci.

    Poznámka: Excel omezuje funkce jednoho listu na 29 argumenty.
  8. V buňce B6 zadejte následující vzorec:
    =Add1("x","y")
    a stiskněte klávesu ENTER. Vrátí vzorec hodnotu # NUM! (xlErrNum) protože převod typu pomocí funkce CDbl selže Převod řetězce "x" a "y" Zadejte Dvojité. Výchozí vrátit hodnotu při funkci dojde k chybě při běhu je # hodnota!. Pokud chcete vrátit jiné chyby zpracování chyb použití a může vrátit libovolné Excel vestavěné chybové hodnoty (xlErrDiv0, xlErrNA, xlErrName, xlErrNull, xlErrNum, xlErrRef nebo xlErrValue.)
  9. Vyberte buňky E1:G5. Zadejte následující vzorec:
    =ReturnArray(5,3)
    a stiskněte klávesu CTRL + SHIFT + ENTER zadat vzorec jako maticový vzorec. Funkce vrátí matice 5 x 3 jedinečných hodnot.
  10. Všechna čísla zadat do buněk I1:J3. Zadejte následující vzorec v buňce I4:
    =GetArray(I1:J3)
    Vzorec vrátí výsledek podobný "Tento součet je n" (kde n je součet čísel v I1:J3). V I5 zadejte následující vzorec:
    =GetArray({1,2,3,4})
    a stiskněte klávesu ENTER. Vzorec vrátí "Tento součet je 10".

Funkce vazby

Vazba pro funkce v automatizace doplněk je na konci přednost funkce vazby. Pokud máte v vaše automatizaci funkce doplňku se stejným názvem jako vestavěné funkce Excel, Excel vestavěnou funkci budou mít přednost. Funkce jazyka VBA v pravidelných doplňky a sešity (XLA) také přednost prostřednictvím automatizace přidat - funkcí. Vytvoření vlastní funkce pro použití v aplikaci Excel je vhodné dát funkce názvy, které jsou již pomocí předdefinované funkce aplikace Excel.

Konkrétně zavolá funkci v automatizace doplněk, které lze procházet dolů funkce ve vzorci pomocí syntaxe například název_serveru. NázevTřídy. názevfunkce (...). Například volání funkce Add1 v ukázkovém, můžete použít následující:
=AutomationAddin.XLFunctions.Add1(1,2)
Můžete volat pouze nejvyšší úrovně metody a vlastnosti váš doplněk automatizace; nemůže vás dolů model objektu váš doplněk k volání funkce, které nejsou na nejvyšší úrovni.

Nestálé funkce

Nestálé funkce je přepočítán při každé změně libovolné buňky na listu, bez ohledu na to, zda je buňka změněné závislost funkce. Příkladem nestálé funkce, která je interní Excel je funkce NÁHČÍSLO(). Stále přepočítávané funkce také přepočítat při stisknutí klávesy F9.

Chcete-li funkci v automatizace doplněk nestálé, volání nestálá metody objektu aplikace Excel. Jako ukázka znázorňuje výše uvedený kód během události OnConnection doplněk může být načten odkaz na objekt aplikace Excel. Funkce TickCount v ukázkový doplněk automatizace je přechodná. Upozorňujeme, že pokud provedete změny libovolnou buňku v listu nebo stiskněte F9, buňky, které obsahují následující vzorec:
=TickCount()
bude přepočítat.

Doplněk správce a doplňky pro automatizaci

Ve Správci doplněk pro doplněk jeho název použita výchozí hodnota klíče registru <progid>HKEY_CLASSES_ROOT\ pro doplněk automatizace. Poznámka: jazyka uživatelského rozhraní (UI), která bude nastavena výchozí hodnota tohoto klíče je žádná vlastnost; však tento klíč lze upravit ručně v Editoru registru nebo během instalace pro doplněk.

Popis pro automatizaci doplněk add - in správce bude vždy doplněk 's ProgID; nijak toto chování změnit.

Doplňky pro automatizaci a Průvodce funkcí

Každý doplněk automatizace má vlastní kategorii ve funkci Excel průvodce. Název kategorie je ProgID pro doplněk; nelze zadat jiný název kategorie pro funkce doplňku automatizace. Navíc je způsob, jak zadat funkci popisy, popisy argument nebo nápovědy pro funkce doplňku automatizace Průvodce funkcí.

Odkazy

Další informace získáte v následujícím článku znalostní báze Microsoft Knowledge Base:
256624Použití funkce doplňku COM jako funkce sešitu Excel
Další informace naleznete na následujícím webu:
http://support.microsoft.com/ofd


(c) Microsoft Corporation 2001 všechny rezervované práv. Příspěvky Lenka B. Turner, Microsoft Corporation.

Vlastnosti

ID článku: 285337 - Poslední aktualizace: 29. ledna 2007 - Revize: 5.4
Informace v tomto článku jsou určeny pro produkt:
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Office Excel 2003
  • Microsoft Excel 2002 Standard Edition
Klíčová slova: 
kbmt kbhowto KB285337 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:285337

Dejte nám zpětnou vazbu