Wie Sie einen RealTimeData-Server für Excel erstellen

Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.

Den englischen Originalartikel können Sie über folgenden Link abrufen: 285339
Zusammenfassung
Microsoft Excel bietet eine neue Tabellenfunktion RTD, die das Aufrufen eines COM-Automatisierungsserver zum Zweck der Abrufen von Daten in Echtzeit ermöglicht. Dieser Artikel beschreibt die Visual Basic verwenden, um einen RealTimeData Server für die Verwendung mit Excel RTD-Funktion zu erstellen.
Weitere Informationen
Die RTD-Tabellenfunktion verwendet die folgende Syntax:
= RTD(ProgID,Server,String1,[String2],...)
Das erste Argument, ProgID , stellt die programmgesteuerte ID (ProgID) des Servers RealTimeData dar. Das Server -Argument gibt den Namen der der Computer, auf dem der RealTimeData-Server ausgeführt wird; dieses Argument kann eine null-Zeichenfolge, oder ausgelassen, wenn der RealTimeData-Server lokal ausgeführt ist. Die verbleibenden Argumente einfach Parameter zum Senden an den Server RealTimeData darstellen; jede eindeutige Kombination dieser Parameter steht eine "Thema Thema-Id", hat eine zugeordnete"." Parameter sind Unterscheidung nach Groß-/Kleinschreibung. Der folgende Code zeigt beispielsweise, Aufrufe an die RTD-Server, der in drei separaten Thema Ids entstehen würden:
= RTD("ExcelRTD.RTDFunctions",,"AAA", "10")

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

= RTD("ExcelRTD.RTDFunctions",,"aaa", "5")
Für ein COM-Automatisierungsserver einen RealTimeData Server für die Verwendung mit Excel RTD-Funktion werden muss er die IRTDServer -Schnittstelle implementieren. Der Server muss alle IRTDServer -Methoden implementieren:

ServerStart
Aufgerufen, wenn Excel das erste Thema RTD für den Server anfordert. ServerStart sollte auf Erfolg, und einen negativen Wert oder 0 bei einer 1 zurückgeben. Der erste Parameter der ServerStart -Methode ist ein Callback-Objekt, der RealTimeData-Server verwendet, um Excel zu benachrichtigen, wenn Sie Updates von der RealTimeData sammeln sollten, Server.
ServerTerminate
Wird aufgerufen, wenn Excel RTD Themen aus der RealTimeData-Server nicht mehr benötigt.
ConnectData
Aufgerufen, wenn Excel ein neues RTD Thema vom RealTimeData Server anfordert.
DisconnectData
Wird aufgerufen, wenn Excel ein bestimmtes Thema nicht mehr benötigt.
Takt
Von Excel aufgerufen, wenn ein bestimmten Zeitraum seit der letzten abgelaufen Excel von Updates von der RealTimeData-Server benachrichtigt wurde.
RefreshData
Aufgerufen, wenn Excel eine Aktualisierung auf Themen anfordert. RefreshData aufgerufen, nachdem der Server Excel benachrichtigt, die Aktualisierungen vorhanden sind, und gibt die Anzahl der Themen, zusammen mit dem Thema-Id und Wert für jedes Thema aktualisieren zurück.

Erstellen Sie eine RealTimeData-Beispielserver

Das folgende Beispiel veranschaulicht, wie erstellen und einen RealTimeData-Server mit Microsoft Excel 2002 verwenden. Dieser Server stellt einfach einen Zähler, der alle 10 Sekunden in einem Arbeitsblatt aktualisiert wird. Der Server akzeptiert bis zu zwei Thema Zeichenfolgen. Die erste Zeichenfolge Thema kann AAA, BBB und CCC; andere Thema-Zeichenfolge als ungültig angesehen und der Server Fehlerwert! Der RTD-Funktion. Die zweite Zeichenfolge ist ein numerischer Wert, der darstellt, wie der Rückgabewert erhöht werden soll. Wenn die zweite Zeichenfolge weggelassen wird, Standardwert die Schrittweite 1. Die zweite Zeichenfolge nicht numerisch ist, gibt der Server Fehlerwert # Zahl! Der RTD-Funktion.
  1. Starten Sie ein neues ActiveX DLL-Projekt in Visual Basic.
  2. Im Menü Projekt klicken Sie auf Verweise auf die Objektbibliothek für Ihre Version von Excel, und klicken Sie dann auf OK . Beispielsweise Wählen Sie eine der folgenden:
    • Wählen Sie für Microsoft Office Excel 2007 Microsoft Excel 12.0-Objektbibliothek .
    • Wählen Sie für Microsoft Office Excel 2003 Microsoft Excel 11.0-Objektbibliothek .
    • Wählen Sie für Microsoft Excel 2002 Microsoft Excel 10.0-Objektbibliothek .
  3. Klicken Sie im Projekt auf Eigenschaften von Projekt1 . Ändern Sie den Projektnamen , ExcelRTD , und klicken Sie dann auf OK .
  4. Ändern Sie die Name -Eigenschaft des Klassenmoduls Class1 in RTDFunctions . Fügen Sie folgenden Code zu 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. Klicken Sie im Menü Projekt auf Klassenmodul hinzufügen . Ändern Sie das Klassenmodul Name -Eigenschaft zum Thema und ändern Sie die Instancing -Eigenschaft auf private . Fügen Sie zu dem Thema Klassenmodul den folgenden Code:
    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. Wählen Sie im Projekt die Option Modul hinzufügen . Fügen Sie folgenden Code in das neue Modul:
    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. Klicken Sie im Datei -Menü auf ExcelRTD.dll erstellen , die Komponente zu erstellen.

Verwenden des RTD-Servers in Excel

  1. Starten Sie eine neue Arbeitsmappe in Microsoft Excel.
  2. Geben Sie in Zelle A1 die folgende Formel ein und drücken Sie anschließend die [EINGABETASTE]:
    = RTD("ExcelRTD.RTDFunctions",,"AAA", 5)
    Der erste zurückgegebene Wert ist "AAA: 0". Nach fünf Sekunden aktualisiert der Wert auf "AAA: 10" und nach 10 Sekunden aktualisiert der Wert auf "AAA:15".

  3. Geben Sie in Zelle A2 die folgende Formel, und drücken Sie die [EINGABETASTE]:
    = RTD("ExcelRTD.RTDFunctions",,"BBB", 3)
    Der erste zurückgegebene Wert ist "BBB: 0". Alle fünf Sekunden der Wert der Zelle durch 3 erhöht.

  4. Geben Sie in Zelle A3 die folgende Formel, und drücken Sie die [EINGABETASTE]:
    = RTD("ExcelRTD.RTDFunctions",,"AAA", 5)
    Der anfängliche Rückgabewert entspricht dem Inhalt von Zelle A1, da dies die gleichen "Thema" ist, das in A1 verwendet wird.

  5. Geben Sie in Zelle A4 die folgende Formel, und drücken Sie die EINGABETASTE:
    = RTD("ExcelRTD.RTDFunctions",,"AAA", 10)
    Der erste zurückgegebene Wert ist "AAA: 0." alle fünf Sekunden der Zelle Wert erhöht, wie die anderen Zellen. Beachten Sie, dass return Wert nicht den Inhalt der Zelle A1 oder A3 übereinstimmt, da die Kombination von Parametern an den Server übergeben unterscheidet.
Diese Abbildung der RTD-Server wurde kompiliert und Excel wurde mit der Run-Time-Version der Komponente. Für Debugzwecke, RTD-Server aus der Visual Basic-Entwicklungsumgebung ausgeführt werden können.

So führen Sie in Debug-Modus:
  1. Beenden Sie Microsoft Excel, und wechseln Sie zu dem Projekt in Visual Basic.
  2. Drücken Sie F5, um die Komponente zu starten. Wenn im Dialogfeld Projekteigenschaften angezeigt wird, klicken Sie auf OK , um die Standardoption für Komponenten erstellt werden, warten auszuwählen.
  3. Stellen Sie sicher, dass das Direktfenster in Visual Basic angezeigt wird. Überprüfen Sie Sie Formeln in Zellen eingeben und die Zellen aktualisiert werden, den Inhalt des Direktfensters im Visual Basic zu sehen, welche Aktionen verschiedene Ereignisse ausgelöst werden.
Hinweis bezüglich das DisconnectData-Ereignis

Während Excel einen Abonnenten RTD-Server ist, löst das DisconnectData -Ereignis, wenn Sie ein Thema (z. B. beim Löschen oder deaktivieren eine RTD-Formel in einer Zelle) nicht mehr benötigt wird. Jedoch Excel nicht aufruft DisconnectData auf jedes Thema für die RTD-Server beim Schließen der Arbeitsmappe oder Excel wird beendet; stattdessen Excel ruft nur ServerTerminate . Wenn Sie einen RTD-Server erstellen, sollten Sie für alle erforderlichen Bereinigung von Themen oder anderen Objekten code Wenn das ServerTerminate -Ereignis ausgelöst wird.

(c) Microsoft Corporation 2001, Alle Rechte vorbehalten. Beiträge von Lori B. Turner, Microsoft Corporation.

Informationsquellen
Weitere Informationen finden Sie die folgende KB-Artikelnummer:
284883RTD-Server wird an mehreren Excel-Instanzen Update Benachrichtigungen nicht gesendet werden.
XL2007

Warnung: Dieser Artikel wurde automatisch übersetzt.

Eigenschaften

Artikelnummer: 285339 – Letzte Überarbeitung: 03/29/2007 16:44:08 – Revision: 5.1

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

  • kbmt kbexpertisebeginner kbautomation kbhowto KB285339 KbMtde
Feedback