Wachtwoord vergeten?

Wachtwoord vergeten
Vul hier uw email adres in. U ontvangt dan een nieuw wachtwoord.

Aangepaste functies gebruiken met het onderdeel Werkblad

Gepost op 13-02-2006 - Microsoft Office - 0 reacties


De informatie in dit artikel is van toepassing op:

  • Microsoft Excel 2000 Standard Edition
  • Microsoft Office Spreadsheet Component 9.0
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic 6.0 Enterprise Edition
  • Microsoft Office Web Components

Samenvatting

U kunt eigen, aangepaste functies maken in een COM-object (of DLL-bestand van ActiveX) en deze functies beschikbaar stellen aan het onderdeel Microsoft Office Spreadsheet voor gebruik in celformules. In dit artikel wordt beschreven hoe u een COM-object kunt maken, implementeren en gebruiken in combinatie met het onderdeel Spreadsheet.

Meer informatie

Het voorbeeld-COM-object dat in dit artikel wordt besproken, stelt twee openbare functies beschikbaar: GetTicks() en CustomTrend().
  • GetTicks

    Deze functie geeft een waarde als resultaat die het aantal milliseconden voorstelt dat is verstreken sinds het systeem is gestart. De waarde wordt geretourneerd doordat de API-functie GetTickCounts wordt aangeroepen.
  • CustomTrend

    Het onderdeel Spreadsheet biedt geen ondersteuning voor het gebruik van matrixformules in cellen. Er worden derhalve geen werkbladfuncties van Excel ondersteund die een matrix met waarden retourneren. Veelgebruikte werkbladfuncties van Excel die een matrix met waarden retourneren en die niet worden ondersteund in het onderdeel Spreadsheet zijn LIJNSCH, LOGSCH, TREND en TRANSPONEREN.

    Bij de functie CustomTrend wordt toegelicht hoe u een van de functies die niet worden ondersteund in het onderdeel Spreadsheet, automatisch in Excel kunt laten aanroepen: de functie TREND. Dankzij automatisering wordt met de Excel-functie TREND een matrix met waarden geretourneerd in het COM-object. Door CustomTrend wordt vervolgens een element van de matrix geretourneerd dat wordt bepaald door een van de argumenten van de functie. Omdat een COM-object niet in staat is een matrix met waarden te retourneren aan het onderdeel Spreadsheet, kunt u de functie CustomTrend zo vaak als vereist aanroepen om alle elementen op te vragen uit de matrix die als resultaat wordt gegeven.

    Opmerking Omdat het voorbeeld-COM-object onderdelen van Microsoft Excel automatiseert moet Microsoft Excel zijn geïnstalleerd bij clients die het voorbeeld-COM-object gebruiken.

Het COM-object maken

  1. Start Microsoft Visual Basic en maak een nieuw ActiveX DLL-project.
  2. Geef het project de naam OWCAddin.
  3. Geef de klasse de naam MyFunctions.
  4. Open het menu Project, klik op Components en selecteer Microsoft Office Web Components 9.0.

    Opmerking Klik in Microsoft Office 2003 op Components in het menu Project en selecteer Microsoft Office Web Components 11.0.
  5. Voeg de volgende codemodule toe aan de klasse MyFunctions:
    Private Declare Function GetTickCount Lib "kernel32" () As Long
    Dim oExcel As Object
    Public Function GetTicks() As Long GetTicks = GetTickCount()End Function
    Private Function GetValues(xRange As IXRangeEnum) As Variant() Dim nCols As Long Dim nRows As Long Dim objRange As Object ' QI voor IDispatch-interface Set objRange = xRange ' Haal niet-ondertekende long-waarden op en wijs deze toe aan ondertekende long-waarden ' Dit is niet altijd een goede werkwijze. U kunt deze hier wel gebruiken ' omdat het aantal rijen of kolommen niet groter kan zijn dan ' de maximumwaarde van een ondertekende long-waarde nCols = objRange.ColCount nRows = objRange.RowCount ' Haal de waarden op uit een matrix met varianten ReDim vVals((nRows * nCols) - 1) As Variant objRange.Next nRows * nCols, vVals(0), vbNull ' Retourneer de volgende matrix GetValues = vVals End Function
    Public Function CustomTrend(ByVal KnownY As IXRangeEnum, ByVal KnownX As IXRangeEnum, _ ByVal NewX As IXRangeEnum, ByVal Idx As Variant) As Variant
    Dim XVals() As Variant, YVals() As Variant Dim NewXVals() As Variant, NewYVals() As Variant
    On Error GoTo ErrHandler 'Plaats de waarden van bereik in een matrix YVals = GetValues(KnownY) XVals = GetValues(KnownX) NewXVals = GetValues(NewX) 'Automatiseer Excel voor het verkrijgen van een matrix met nieuwe Y-waarden met de functie TREND NewYVals = oExcel.WorksheetFunction.Trend(YVals, XVals, NewXVals, True) 'Retourneer de gevraagde index (Idx) CustomTrend = NewYVals(Idx) Exit Function ErrHandler: CustomTrend = "#VALUE!" End Function
    Private Sub Class_Initialize() Set oExcel = CreateObject("Excel.Application")End Sub
    Private Sub Class_Terminate() oExcel.Quit Set oExcel = NothingEnd Sub

  6. Open het menu File en selecteer Make OWCAddin.dll en stel de DLL samen.
  7. Sla het project op als OWCAddin.vbp.

Het COM-object inpakken

  1. Start de wizard Package and Deployment.
  2. Selecteer OWCAddIn.vbp en klik op Package.
  3. Selecteer Internet Package bij Package Type en klik op Next.
  4. Select een map bij Package en klik op Next.
  5. Klik op OK wanneer u een bericht ontvangt dat er voor MSOWC.dll afhankelijkheidsgegevens ontbreken.

    Opmerking Klik in Microsoft Office 2003 op OK wanneer u een bericht ontvangt dat er voor OWC11.dll afhankelijkheidsgegevens ontbreken.
  6. Schakel MSOWC.dll uit in de lijst met bestanden die worden opgenomen en klik op Next.
    Opmerking Schakel in Microsoft Office 2003 OWC11.dll uit in de lijst met opgenomen bestanden en klik op Next.
  7. Klik op Next om alle bestandsbronnen te accepteren.
  8. Selecteer Yes voor zowel Safe for Scripting en Safe for Initialization om de beveiligingsinstellingen vast te leggen. Klik vervolgens op Next.
  9. Klik op Finish om het CAB-bestand samen te stellen.

Een HTML-pagina maken met een onderdeel van Spreadsheet dat gebruikmaakt van aangepaste functies in het COM-object

  1. Maak in Kladblok een nieuw tekstbestand met de volgende inhoud:
    <HTML><HEAD>
    <! --- BEGIN COMMENTAAR ---------------------------------><! --- De onderstaande codebase- en clsid-items wijzigen --------->
    <OBJECT classid = clsid:FFB16550-E40D-11D3-BB97-00C04FAEB609 codebase="http://MyServer/OWCAddin.CAB" id=OWCAddin></OBJECT>
    <! --- EINDE COMMENTAAR ----------------------------------->
    </HEAD>
    <BODY>
    <OBJECT classid=clsid:0002E510-0000-0000-C000-000000000046 height="50%" id=Spreadsheet1 width="80%"></OBJECT>
    <SCRIPT Language=VBScript>
    Function Window_OnLoad() 'Verwijzen naar het COM-object zodat de functies ervan kunnen worden aangeroepen vanuit 'formules in cellen op het werkblad Spreadsheet1.AddIn OWCAddin.Object
    'Vul het werkblad met gegevens With SpreadSheet1 .Range("A1:D1").Value = Array("Known X-Values", "Known Y-Values", _ "New X-Values", "New Y-Values") .Range("A2:A13").Value = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12) .Range("B2:B13").Value = Array (133890, 135000, 135790, 137300, _ 138130, 139100, 139900, 141120, _ 141890, 143230, 144000, 145290) .Range("C2:C5").Value = Array(13, 14, 15, 16) .Range("A1:D13").AutoFitColumns .Range("D2:D5").NumberFormat = "0.00" End WithEnd Function
    </SCRIPT>
    </BODY></HTML>

    Opmerking U moet de code <OBJECT> voor het OWCAddin-object wijzigen, zodat het de juiste waarden bevat voor clsid en codebase. U kunt de klasse-id voor het COM-object bepalen door de registersleutel HKEY_CLASSES_ROOT\OWCAddin.MyFunctions\Clsid te controleren in de Register-editor (Regedit.exe). De code codebase moet de locatie bevatten van het CAB-bestand dat u hebt gemaakt met de wizard Package and Deployment.

    Opmerking In Microsoft Office 2003 moet u de code clsid voor het Spreadsheet1-object vervangen door 0002E559-0000-0000-C000-000000000046.

  2. Sla het tekstbestand op als CustomFunction.htm.
  3. Dubbelklik op CustomFunction.htm in Windows Verkenner om het bestand weer te geven in de browser.
  4. Typ de volgende formules in de cellen D2:D5:


    D2: =CustomTrend(B2:B13;A2:A13;C2:C5;1)D3: =CustomTrend(B2:B13;A2:A13;C2:C5;2)D4: =CustomTrend(B2:B13;A2:A13;C2:C5;3)D5: =CustomTrend(B2:B13;A2:A13;C2:C5;4)

    De formules retourneren de volgende waarden:


    D2: 146171.52D3: 147189.70D4: 148207.88D5: 149226.06

  5. Typ de volgende formule in cel F1:


    =GetTicks()

    De formule geeft een waarde als resultaat met het aantal milliseconden dat is verstreken sinds het systeem is gestart.

Opmerking over het gebruik van het argument Range voor aangepaste functies

Het onderdeel Spreadsheet geeft Range-argumenten door aan aangepaste functies met behulp van de IXRangeEnum-interface. IXRangeEnum is een verborgen lid van de typebibliotheek van Office Web Components (MSOWC.dll) en is daarom niet gedocumenteerd in de Help van het Office Web Components-objectmodel. IXRangeEnum biedt methoden en eigenschappen waarmee u waarden kunt ophalen uit de Range die is doorgegeven aan een aangepaste functie. De functie GetValues in het COM-object geeft aan hoe u een matrix kunt samenstellen van de waarden in een bereik met IXRangeEnum.

Zie voor meer informatie over het gebruik van IXRangeEnum hoofdstuk 11, 'Building Solutions with the Office Web Components' in de volgende publicatie:

'Programming Microsoft Office 2000 Web Components'
van Dave Stearns - ISBN 0-7356-0794-X



Referenties

Voor meer informatie over het werken met het onderdeel Spreadsheet in Office 2000 raadpleegt u het volgende artikel in de Microsoft Knowledge Base:

216578Excel 2000: Berekeningsverschillen met het Office-werkblad

Bezoek tevens de volgende website van Microsoft: Voor informatie over het implementeren van oplossingen die gebruikmaken van Office 2000 Web Components, raadpleegt u de volgende artikelen in de Microsoft Knowledge Base:

249843PRB: De wizard VB Package and Deployment bevat Office OLB-bestanden

243006Office 2000: Licenties voor de Office 2000 Web Components en Office-serverextensies


PrintPrint RSS reactiesRSS reacties BookmarkBookmark

Gekoppelde tags

ActiveX, Cellen, DLL, Excel, Excel 2000, Fix, Kolommen, Office, Office 2000, Office 2003, Patch, Project, Visual Basic, Werkblad, Works

Reacties
Nog geen reacties geplaatst.

Winkelmandje

Het winkelmandje is leeg

Inloggen
Als u hierboven op de knop 'bestellen' klikt krijgt u een overzicht van de door uw gewenste producten. Indien het overzicht compleet en correct is kunt via de wizard de verdere gegevens invullen en uw bestelling afronden. In het bestelproces kunt u altijd op 'vorige' drukken om terug te gaan in het proces. Bij Perrit staan vertrouwen, privacy en veiligheid op de eerste plaats, wij zullen uw gegevens dan ook met uiterste zorgvuldigheid behandelen en nooit doorgeven aan derden.

Perrit.nl Sherwood Rangers 29 Hengelo

Perrit.nl telefoon: +31 74 750 12 20

Kenniscentrum - Aangepaste functies gebruiken met het onderdeel Werkblad
Perrit Kenniscentrum - Aangepaste functies gebruiken met het onderdeel Werkblad