Momentálne ste offline a čaká sa, kým sa znova pripojíte na internet

Ako vytvoriť RealTimeData servera pre program Excel

DÔLEŽITÉ: Tento článok bol preložený pomocou softvéru na strojový preklad od spoločnosti Microsoft, nie prekladateľom. Spoločnosť Microsoft ponúka články preložené prekladateľmi aj strojovo preložené články, vďaka čomu máte možnosť prístupu ku všetkým článkom databázy Knowledge Base vo svojom jazyku. Strojovo preložený článok však nie je vždy perfektný. Môže obsahovať chyby týkajúce sa slovnej zásoby, syntaxe alebo gramatiky, podobne ako cudzinec môže robiť chyby, keď rozpráva vašim jazykom. Spoločnosť Microsoft nenesie zodpovednosť za akékoľvek nepresnosti, chyby alebo škody spôsobené akýmkoľvek nepresným prekladom obsahu alebo jeho použitím zo strany zákazníkov. Spoločnosť Microsoft softvér na strojový preklad pravidelne aktualizuje.

Pokiaľ chcete vidieť anglickú verziu článku, kliknite sem:285339
SUHRN
Program Microsoft Excel poskytuje novú funkciu pracovného hárka, VTR, to vám umožňuje volať Component Object Model (COM) automatizačný server pre účel získavanie údajov v reálnom čase. Tento článok popisuje použitie Jazyka Visual Basic vytvárať RealTimeData Server na používanie s funkciu RTD programu Excel.
DALSIE INFORMACIE
Funkcia pracovného hárka VTR má nasledovnú syntax:
= () VTRProgID, Server, reťazec1,[Reťazec2]...)
Prvý argument ProgID, predstavuje programovým identifikátorom (ProgID) z RealTimeData server. V Server argument označuje názov počítača, na ktorom RealTimeData server je spustený; Tento argument môže byť reťazec hodnotu null alebo vynechané, ak RealTimeData server je na lokálne spúšťanie. Zostávajúce argumenty jednoducho predstavujú parametre odosielať na RealTimeData server; každý unikátny kombinácia týchto parametrov predstavuje jednu "tému," ktoré má priradené "id témy." Parametre sú malé a veľké písmená. Napríklad, nasledovné ilustruje volania na server VTR, ktorý by mal za následok tri samostatné tému ID:
= RTD("ExcelRTD.RTDFunctions",,"AAA", "10")

= RTD("ExcelRTD.RTDFunctions",,"AAA", "5")

= RTD("ExcelRTD.RTDFunctions",,"aaa", "5")
Aby COM automatizačný Server sa RealTimeData Server na použitie s funkciou RTD programu Excel, musí implementovať IRTDServer rozhranie. Server musí realizovať všetky metódy IRTDServer:

ServerStart
Nazýva keď Excel požaduje prvej VTR témy pre server. ServerStart by návratnosť 1 na úspech, a zápornú hodnotu alebo 0 zlyhanie. Prvý parameter ServerStart metóda je objekt spätného volania, ktorý RealTimeData server používa na upozorní Excel by mal zhromažďovať aktualizácie z RealTimeData Server.
ServerTerminate
Názvom keď Excel už vyžaduje VTR témy z RealTimeData servera.
ConnectData
Nazýva kedykoľvek Excel požiada o novú tému RTD zo servera RealTimeData.
DisconnectData
Nazýva kedykoľvek Excel už vyžaduje konkrétnu tému.
Srdcový tep
Nazýva programom Excel, ak daný interval uplynul od poslednej dobe Excel bol upozornenia na aktualizácie zo servera RealTimeData.
RefreshData
Názvom keď Excel požaduje obnoviť na témy. RefreshData sa nazýva po server upozorní programu Excel, ktoré aktualizácie existujú, a Vráti počet tém aktualizovať spolu s id témy a hodnoty pre každú tému.

Vytvoriť vzorky RealTimeData Server

Tieto vzorky demonštruje, ako vytvoriť a používať RealTimeData server s Microsoft Excel 2002. Jednoducho poskytuje tento server počítadlo, ktoré sa aktualizuje každých 10 sekúnd na pracovnom hárku. Server akceptuje až dve témy reťazcov. Prvý reťazec témy môžu byť AAA, BBB a CCC; akékoľvek iné reťazec témy sa považuje za neplatnú a server vráti chybovú hodnotu # hodnota! na Funkciu RTD. Druhým reťazcom je číselná hodnota, ktorá predstavuje ako Vráti hodnotu by zvýši. Ak druhý reťazec je vynechaný, prírastok hodnoty predvolené hodnoty 1. Ak druhý reťazec nie sú numerické, server vráti chybovú hodnotu # číslo! funkciu RTD.
  1. Začať nový projekt ActiveX DLL v jazyku Visual Basic.
  2. Na Project ponuky, kliknite na tlačidlo Odkazy, vyberte Objektová knižnica pre vašu verziu programu Excel, a potom kliknite na tlačidlo ok. Napríklad, vyberte jeden z nasledujúcich krokov:
    • Programu Microsoft Office Excel 2007, vyberte Objektová knižnica programu Microsoft Excel 12.0.
    • Programu Microsoft Office Excel 2003, vyberte Objektová knižnica programu Microsoft Excel 11.0.
    • Programu Microsoft Excel 2002, vyberte Objektová knižnica programu Microsoft Excel 10.0.
  3. Na Project ponuky, kliknite na tlačidlo Project1 vlastnosti. Zmena Názov projektu na ExcelRTD, a potom kliknite na tlačidlo ok.
  4. Zmena programu Vlastnosť modul triedy Class1 na RTDFunctions. Pridať nasledujúci kód do RTDFunctions:
    Option ExplicitImplements IRtdServer  'Interface allows Excel to contact this RealTimeData serverPrivate m_colTopics As Collection    Private Function IRtdServer_ConnectData(ByVal TopicID As Long, Strings() As Variant, GetNewValues As Boolean) As Variant    '** ConnectData is called whenever a new RTD topic is requested        'Create a new topic class with the given TopicId and string and add it to the    'm_colTopics collection    Dim oTopic As New Topic    m_colTopics.Add oTopic, CStr(TopicID)    oTopic.TopicID = TopicID    oTopic.TopicString = Strings(0)    If UBound(Strings) >= 1 Then oTopic.SetIncrement Strings(1)        'For this example, the initial value for a new topic is always 0    IRtdServer_ConnectData = oTopic.TopicValue        Debug.Print "ConnectData", TopicIDEnd FunctionPrivate Sub IRtdServer_DisconnectData(ByVal TopicID As Long)   '** DisconnectData is called whenever a specific topic is not longer needed      'Remove the topic from the collection   m_colTopics.Remove CStr(TopicID)      Debug.Print "DisconnectData", TopicIDEnd SubPrivate Function IRtdServer_Heartbeat() As Long    '** Called by Excel if the heartbeat interval has elapsed since the last time    '   Excel was called with UpdateNotify.    Debug.Print "HeartBeat"End FunctionPrivate Function IRtdServer_RefreshData(TopicCount As Long) As Variant()    '** Called when Excel is requesting a refresh on topics. RefreshData will be called    '   after an UpdateNotify has been issued by the server. This event should:    '   - supply a value for TopicCount (number of topics to update)    '   - return a two dimensional variant array containing the topic ids and the    '     new values of each.       Dim oTopic As Topic, n As Integer    ReDim aUpdates(0 To 1, 0 To m_colTopics.Count - 1) As Variant    For Each oTopic In m_colTopics        oTopic.Update        aUpdates(0, n) = oTopic.TopicID        aUpdates(1, n) = oTopic.TopicValue        n = n + 1    Next    TopicCount = m_colTopics.Count    IRtdServer_RefreshData = aUpdates      Debug.Print "RefreshData", TopicCount & " topics updated"End FunctionPrivate Function IRtdServer_ServerStart(ByVal CallbackObject As Excel.IRTDUpdateEvent) As Long    '** ServerStart is called when the first RTD topic is requested        Set oCallBack = CallbackObject    Set m_colTopics = New Collection    g_TimerID = SetTimer(0, 0, TIMER_INTERVAL, AddressOf TimerCallback)    If g_TimerID > 0 Then IRtdServer_ServerStart = 1       'Any value <1 indicates failure.        Debug.Print "ServerStart"End FunctionPrivate Sub IRtdServer_ServerTerminate()    '** ServerTerminate is called when no more topics are needed by Excel.        KillTimer 0, g_TimerID    '** Cleanup any remaining topics. This is done here since     '   IRtdServer_DisconnectData is only called if a topic is disconnected     '   while the book is open. Items left in the collection when we terminate    '   are those topics left running when the workbook was closed.    Dim oTopic As Topic    For Each oTopic In m_colTopics        m_colTopics.Remove CStr(oTopic.TopicID)        Set oTopic = Nothing    Next    Debug.Print "ServerTerminate"  End Sub					
  5. Na Project ponuky, kliknite na tlačidlo Pridať modul triedy. Zmena modul triedy programu Vlastnosť Téma a zmeniť Instancing Vlastnosť Súkromné. Pridať nasledujúci kód do Téma Modul triedy:
    Option ExplicitPrivate m_TopicID As LongPrivate m_TopicString As StringPrivate m_Value As VariantPrivate m_IncrementVal As LongPrivate Sub Class_Initialize()    m_Value = 0    m_IncrementVal = 1End SubFriend Property Let TopicID(ID As Long)    m_TopicID = IDEnd PropertyFriend Property Get TopicID() As Long    TopicID = m_TopicIDEnd PropertyFriend Property Let TopicString(s As String)    s = UCase(s)    If s = "AAA" Or s = "BBB" Or s = "CCC" Then        m_TopicString = s    Else        m_Value = CVErr(xlErrValue) 'Return #VALUE if not one of the listed topics    End IfEnd PropertyFriend Sub Update()    On Error Resume Next 'the next operation will fail if m_Value is an error (like #NUM or #VALUE)    m_Value = m_Value + m_IncrementValEnd SubFriend Sub SetIncrement(v As Variant)    On Error Resume Next    m_IncrementVal = CLng(v)    If Err <> 0 Then        m_Value = CVErr(xlErrNum) 'Return #NUM if Increment value is not numeric    End IfEnd SubFriend Property Get TopicValue() As Variant    If Not (IsError(m_Value)) Then        TopicValue = m_TopicString & ": " & m_Value    Else        TopicValue = m_Value    End IfEnd Property					
  6. Na Project menu vyberte Pridajte modul. Do nového modulu, pridajte nasledujúci kód:
    Public Declare Function SetTimer Lib "user32" (ByVal hWnd As Long, _ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As LongPublic Declare Function KillTimer Lib "user32" (ByVal hWnd As Long, ByVal nIDEvent As Long) As LongPublic Const TIMER_INTERVAL = 5000Public oCallBack As Excel.IRTDUpdateEventPublic g_TimerID As LongPublic Sub TimerCallback(ByVal hWnd As Long, ByVal uMsg As Long, ByVal idEvent As Long, ByVal dwTime As Long)    oCallBack.UpdateNotifyEnd Sub					
  7. Na Súbor ponuky, kliknite na tlačidlo Skontrolujte, ExcelRTD.dll tvoriacej zložku.

V programe Excel používa Server VTR

  1. Začať nový zošit v programe Microsoft Excel.
  2. Do bunky A1 zadajte nasledujúci vzorec a potom stlačte kláves Zadajte kľúč:
    = RTD("ExcelRTD.RTDFunctions",,"AAA", 5)
    Počiatočné vrátená hodnota je "AAA: 0". Po piatich sekundách hodnota aktualizácie "AAA: 10" a po 10 sekundách, hodnota aktualizácie „AAA:15, ” a tak ďalej.

  3. Do bunky A2 zadajte nasledujúci vzorec a stlačte ENTER:
    = RTD("ExcelRTD.RTDFunctions",,"BBB", 3)
    Počiatočné vrátená hodnota je "BBB: 0". Každých päť sekúnd bunky hodnota krokoch 3.

  4. Do Buky A3 zadajte nasledujúci vzorec a stlačte ENTER:
    = RTD("ExcelRTD.RTDFunctions",,"AAA", 5)
    Počiatočné vrátená hodnota zodpovedá obsah bunky A1, pretože je to rovnaké "tému", ktoré sa používa v A1.

  5. Do bunky A4 zadajte nasledujúci vzorec a stlačte Enter:
    = RTD("ExcelRTD.RTDFunctions",,"AAA", 10)
    Počiatočné vrátená hodnota je "AAA: 0." každých päť sekúnd bunky prírastky hodnoty ako robiť iné bunky. Všimnite si, že nie je vrátená hodnota zápas obsah bunky A1 alebo A3, pretože kombinácie parametrov postúpené server je odlišná.
Na tomto obrázku VTR server bola zostavená a Excel bol pomocou run-time verziu súčiastky. Pre úèely, VTR ladenia servery možno spustiť z Visual Basic IDE.

Spustenie v debug režime:
  1. Skončite program Microsoft Excel a prepnúť na projekt v jazyku Visual Základné.
  2. Stlačením klávesu F5 začať komponentu. Ak Vlastnosti projektu zobrazí sa dialógové okno, kliknite na tlačidlo ok vyberte možnosť predvolené Čakať na súčasti sa vytvorí.
  3. Skontrolujte, či je okna Immediate Visual Basic zobrazí. Pri zadávaní vzorcov do buniek a bunky sú aktualizované, preskúmať obsah okna Immediate Visual Basic vidieť, ktoré akcie sa spúšťa rôznych udalostiach.
Poznámky týkajúce sa DisconnectData udalosť

Program Excel síce účastníka VTR server, to Spúšťače DisconnectData udalosť, keď to už potrebuje tému (napríklad, keď ste Odstráňte alebo vymažte VTR vzorec v bunke). Avšak, Excel nevyžaduje DisconnectData na každú tému pre VTR server zatvorenom zošite alebo Program Excel ukončí; namiesto toho program Excel iba volania ServerTerminate. Ak vytvárate server VTR, by kód pre akúkoľvek potrebné čisté-až o témach alebo iných objektov pri ServerTerminate udalosť požiare.

(c) Microsoft Corporation 2001, všetky práva Vyhradené. Príspevky Lori B. Turner, Microsoft Corporation.

ODKAZY
Ďalšie informácie získate po kliknutí na nasledujúce číslo článku databázy Microsoft Knowledge Base:
284883VTR Server neposiela aktualizácia oznámenia na viaceré inštancie programu Excel
XL2007

Upozornenie: Tento článok bol preložený automaticky.

Vlastnosti

ID článku: 285339 – Posledná kontrola: 10/24/2011 11:09:00 – Revízia: 2.0

Microsoft Office Excel 2007, Microsoft Excel 2002 Standard Edition, Microsoft Visual Basic 6.0 Professional Edition

  • kbexpertisebeginner kbautomation kbhowto kbmt KB285339 KbMtsk
Pripomienky