- Home
- Producten
- Bedrijfsbehoeften
- Partners
- Referenties
- Kenniscentrum
- Support
- Over Perrit
- Handleidingen
- Nieuws
- Acties
=RTG(Prog-id;Server;Onderwerp1,[Onderwerp2],...)
=RTG("ExcelRTD.RTDFunctions";;"AAA"'; "10")
=RTG("ExcelRTD.RTDFunctions";;"AAA"; "5")
=RTG("ExcelRTD.RTDFunctions";;"aaa"; "5")
Deze methode wordt aangeroepen als Excel om het eerste RTG-onderwerp voor de server vraagt. ServerStart geeft een 1 als resultaat bij een geslaagde poging, en een negatieve waarde of 0 bij een mislukte poging. De eerste parameter van de methode ServerStart is een terugbelobject waarmee de RTG-server aan Excel doorgeeft wanneer updates van de RTG-server moeten worden verzameld.
Deze methode wordt aangeroepen als Excel geen RTG-onderwerpen van de RTG-server meer nodig heeft.
Deze methode wordt aangeroepen wanneer Excel om een nieuw RTG-onderwerp van de RTG-server vraagt.
Deze methode wordt aangeroepen als Excel een bepaald onderwerp niet meer nodig heeft.
Deze methode wordt door Excel aangeroepen als een bepaald interval is verstreken sinds de laatste keer dat er updates op de RTG-server werden gemeld aan Excel.
Deze methode wordt aangeroepen wanneer Excel om vernieuwing van onderwerpen vraagt. RefreshData wordt aangeroepen nadat de server aan Excel heeft doorgegeven dat er updates zijn. De methode retourneert het aantal onderwerpen waarvoor een update beschikbaar is, samen met de onderwerp-id en waarde voor elk onderwerp.
Option Explicit
Implements IRtdServer 'Interface waarmee Excel verbinding kan maken met deze RTG-server
Private m_colTopics As Collection Private Function IRtdServer_ConnectData(ByVal TopicID As Long, Strings() As Variant, GetNewValues As Boolean) As Variant '** ConnectData wordt aangeroepen wanneer om een nieuw RTG-onderwerp wordt gevraagd 'Maak een nieuwe onderwerpklasse met de opgegeven onderwerp-id en voeg de klasse toe aan de 'verzameling m_colTopics 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) 'In dit voorbeeld is de beginwaarde voor een nieuw onderwerp altijd 0 IRtdServer_ConnectData = oTopic.TopicValue Debug.Print "ConnectData", TopicIDEnd Function
Private Sub IRtdServer_DisconnectData(ByVal TopicID As Long) '** DisconnectData wordt aangeroepen wanneer een bepaald onderwerp niet meer nodig is 'Verwijder het onderwerp uit de verzameling m_colTopics.Remove CStr(TopicID) Debug.Print "DisconnectData", TopicIDEnd Sub
Private Function IRtdServer_Heartbeat() As Long '** HeartBeat wordt aangeroepen wanneer het heartbeatinterval is verstreken sinds de laatste keer ' dat Excel werd aangeroepen met UpdateNotify. Debug.Print "HeartBeat"End Function
Private Function IRtdServer_RefreshData(TopicCount As Long) As Variant() '** RefreshData wordt aangeroepen wanneer Excel om vernieuwing van onderwerpen vraagt. RefreshData wordt aangeroepen ' nadat de server een UpdateNotify heeft verzonden. Deze methode retourneert het volgende: ' - Een waarde voor TopicCount (aantal onderwerpen waarvoor een update beschikbaar is) ' - Een tweedimensionale matrix met varianten, die de onderwerp-id's en de ' nieuwe waarden van elk onderwerp bevat. 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 & " bijgewerkte onderwerpen"End Function
Private Function IRtdServer_ServerStart(ByVal CallbackObject As Excel.IRTDUpdateEvent) As Long '** ServerStart wordt aangeroepen wanneer het eerste RTG-onderwerp wordt aangevraagd 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 'Elke waarde <1 geeft mislukking aan. Debug.Print "ServerStart"End Function
Private Sub IRtdServer_ServerTerminate() '** ServerTerminate wordt aangeroepen wanneer Excel geen onderwerpen meer nodig heeft. KillTimer 0, g_TimerID
'** Verwijder eventuele resterende onderwerpen. Dit wordt hier gedaan omdat ' IRtdServer_DisconnectData alleen wordt aangeroepen als de verbinding met een onderwerp wordt verbroken ' terwijl de werkmap is geopend. De items die achterblijven in de verzameling wanneer de verbinding wordt verbroken, ' zijn de onderwerpen die actief waren toen de werkmap werd gesloten.
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
Option Explicit
Private m_TopicID As LongPrivate m_TopicString As StringPrivate m_Value As VariantPrivate m_IncrementVal As Long
Private Sub Class_Initialize() m_Value = 0 m_IncrementVal = 1End Sub
Friend Property Let TopicID(ID As Long) m_TopicID = IDEnd Property
Friend Property Get TopicID() As Long TopicID = m_TopicIDEnd Property
Friend 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) 'Retourneer #VALUE als dit niet een van de weergegeven onderwerpen is End IfEnd Property
Friend Sub Update() On Error Resume Next 'De volgende bewerking mislukt als m_Value een foutwaarde is (zoals #NUM of #VALUE) m_Value = m_Value + m_IncrementValEnd Sub
Friend Sub SetIncrement(v As Variant) On Error Resume Next m_IncrementVal = CLng(v) If Err <> 0 Then m_Value = CVErr(xlErrNum) 'Retourneer #NUM als de verhoging geen numerieke waarde is End IfEnd Sub
Friend Property Get TopicValue() As Variant If Not (IsError(m_Value)) Then TopicValue = m_TopicString & ": " & m_Value Else TopicValue = m_Value End IfEnd Property
Public Declare Function SetTimer Lib "user32" (ByVal hWnd As Long, _ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Public Declare Function KillTimer Lib "user32" (ByVal hWnd As Long, ByVal nIDEvent As Long) As Long
Public Const TIMER_INTERVAL = 5000Public oCallBack As Excel.IRTDUpdateEventPublic g_TimerID As Long
Public Sub TimerCallback(ByVal hWnd As Long, ByVal uMsg As Long, ByVal idEvent As Long, ByVal dwTime As Long) oCallBack.UpdateNotifyEnd Sub
=RTG("ExcelRTD.RTDFunctions";;"AAA"; 5)
=RTG("ExcelRTD.RTDFunctions";;"BBB"; 3)
=RTG("ExcelRTD.RTDFunctions";;"AAA"; 5)
=RTG("ExcelRTD.RTDFunctions";;"AAA"; 10)
Relevante artikelen |
Gekoppelde tagsActiveX, Cellen, DLL, Excel, Excel 2002, Excel 2003, Office, Project, Update, Visual Basic, Werkblad |