Làm th? nào đ? t?o m?t máy ch? RealTimeData cho Excel

D?ch tiêu đ? D?ch tiêu đ?
ID c?a bài: 285339 - Xem s?n ph?m mà bài này áp d?ng vào.
Bung t?t c? | Thu g?n t?t c?

TÓM T?T

Microsoft Excel cung c?p m?t ch?c năng b?ng tính m?i, RTD, cho phép b?n g?i m?t máy ch? t? đ?ng hóa mô h?nh đ?i tư?ng thành ph?n (COM) cho m?c đích c?a l?y d? li?u th?i gian th?c. Bài vi?t này mô t? cách s? d?ng Visual Basic đ? t?o ra m?t máy ch? RealTimeData đ? s? d?ng v?i Excel RTD ch?c năng.

THÔNG TIN THÊM

Ch?c năng b?ng tính RTD có cú pháp sau:
= RTD)ProgID, máy ch?, String1,[String2]...)
Đ?i s? đ?u tiên, ProgID, đ?i di?n cho chương tr?nh Identifier (ProgID) c?a các RealTimeData máy ch?. Các Máy chủ đ?i s? cho bi?t tên c?a máy tính mà trên đó các H? ph?c v? RealTimeData đư?c đi?u hành; đ?i s? này có th? là m?t chu?i vô ho?c b? qua n?u các máy ch? RealTimeData là đ? ch?y c?c b?. Các đ?i s? c?n l?i ch? đơn gi?n đ?i di?n cho các tham s? đ? g?i t?i h? ph?c v? RealTimeData; m?i đ?c đáo s? k?t h?p c?a các tham s? đ?i di?n cho m?t trong nh?ng "ch? đ?," có m?t liên k?t "ch? đ? id." Tham s? là ch?. Ví d?, sau đây minh h?a các cu?c g?i đ?n các máy ch? RTD s? cho k?t qu? trong ba ch? đ? riêng bi?t ID:
= RTD("ExcelRTD.RTDFunctions",,"AAA", "10")

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

= RTD("ExcelRTD.RTDFunctions",,"aaa", "5")
Đ? cho m?t máy ch? t? đ?ng hóa COM là m?t máy ch? RealTimeData đ? s? d?ng v?i Excel RTD hàm, nó ph?i th?c hi?n các IRTDServer giao di?n. H? ph?c v? ph?i th?c hi?n t?t c? các phương pháp IRTDServer:

ServerStart
Đư?c g?i là khi Excel yêu c?u ch? đ? RTD đ?u tiên cho máy ch?. ServerStart nên tr? v? m?t 1 ngày thành công, và m?t giá tr? tiêu c?c ho?c 0 ngày s? th?t b?i. Tham s? đ?u tiên c?a các ServerStart phương pháp là m?t đ?i tư?ng g?i l?i máy ch? RealTimeData s? d?ng đ? thông báo cho Excel khi nó nên thu th?p thông tin C?p Nh?t t? RealTimeData h? ph?c v?.
ServerTerminate
Đư?c g?i là khi Excel không c?n đ?i h?i các ch? đ? RTD t? h? ph?c v? RealTimeData.
ConnectData
G?i là b?t c? khi nào Excel yêu c?u ch? đ? RTD m?i t? h? ph?c v? RealTimeData.
DisconnectData
G?i là b?t c? khi nào Excel không c?n yêu c?u m?t ch? đ? c? th?.
Nh?p tim
G?i là c?a Excel n?u m?t kho?ng th?i gian nh?t đ?nh đ? trôi qua k? t? l?n cu?i cùng Excel đư?c thông báo v? b?n C?p Nh?t t? h? ph?c v? RealTimeData.
RefreshData
Đư?c g?i là khi Excel yêu c?u làm m?i m?t v? các ch? đ?. RefreshData đư?c g?i là sau khi h? ph?c v? thông báo cho Excel có b?n C?p Nh?t t?n t?i, và nó có tr? l?i m?t s? các ch? đ? đ? c?p nh?t cùng v?i ch? đ? id và giá tr? cho m?i ch? đ?.

T?o ra m?t m?u RealTimeData Server

M?u sau đây ch?ng t? làm th? nào đ? t?o và s? d?ng m?t RealTimeData máy ch? v?i Microsoft Excel 2002. H? ph?c v? này ch? đơn gi?n là cung c?p m?t S? lư?t truy c?p đư?c c?p nh?t m?i 10 giây trên m?t b?ng tính. H? ph?c v? ch?p nh?n lên đ? hai ch? đ? dây. Chu?i ch? đ? đ?u tiên có th? là AAA, BBB và CCC; b?t k? ch? đ? chu?i đư?c coi là không h?p l? và máy ch? tr? v? #VALUE! đ? các RTD ch?c năng. Chu?i th? hai là m?t giá tr? s? đ?i di?n cho cách các tr? v? giá tr? nên đư?c incremented. N?u chu?i th? hai b? qua, các tăng giá tr? m?c đ?nh là 1. N?u chu?i th? hai không ph?i là s?, máy ch? tr? v? #NUM! ch?c năng RTD.
  1. B?t đ?u m?t d? án m?i ActiveX DLL trong Visual Basic.
  2. Trên các Dự án tr?nh đơn, nh?p vào Tham khảo, ch?n thư vi?n đ?i tư?ng c?a b?n Phiên b?n c?a Excel và b?m Ok. Ví d?, ch?n m?t trong các cách sau:
    • Đ?i v?i Microsoft Office Excel 2007, ch?n Microsoft Excel 12,0 đ?i tư?ng thư vi?n.
    • Đ?i v?i Microsoft Office Excel 2003, ch?n Microsoft Excel 11,0 đ?i tư?ng thư vi?n.
    • Đ?i v?i Microsoft Excel 2002, ch?n Microsoft Excel 10,0 đ?i tư?ng thư vi?n.
  3. Trên các Dự án tr?nh đơn, nh?p vào Thu?c tính Project1. Thay đ?i các Tên d? án đ? ExcelRTD, và sau đó nh?p vào Ok.
  4. Thay đ?i các Tên b?t đ?ng s?n c?a l?p module Class1 đ? RTDFunctions. Thêm m? sau đây đ? RTDFunctions:
    Option Explicit
    
    Implements IRtdServer  'Interface allows Excel to contact this RealTimeData server
    
    Private 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", TopicID
    End Function
    
    Private 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", TopicID
    End Sub
    
    Private 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 Function
    
    Private 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 Function
    
    Private 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 Function
    
    Private 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. Trên các Dự án tr?nh đơn, nh?p vào Thêm l?p Module. Thay đ?i l?p module Tên b?t đ?ng s?n đ? Ch? đ? và thay đ?i các Instancing b?t đ?ng s?n đ? Tư nhân. Thêm m? sau đây đ? các Ch? đ? l?p module:
    Option Explicit
    
    Private m_TopicID As Long
    Private m_TopicString As String
    Private m_Value As Variant
    Private m_IncrementVal As Long
    
    Private Sub Class_Initialize()
        m_Value = 0
        m_IncrementVal = 1
    End Sub
    
    Friend Property Let TopicID(ID As Long)
        m_TopicID = ID
    End Property
    
    Friend Property Get TopicID() As Long
        TopicID = m_TopicID
    End 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) 'Return #VALUE if not one of the listed topics
        End If
    End Property
    
    Friend 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_IncrementVal
    End Sub
    
    Friend 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 If
    End Sub
    
    Friend Property Get TopicValue() As Variant
        If Not (IsError(m_Value)) Then
            TopicValue = m_TopicString & ": " & m_Value
        Else
            TopicValue = m_Value
        End If
    End Property
    					
  6. Trên các Dự án tr?nh đơn, ch?n Thêm mô-đun. Thêm m? sau vào các mô-đun m?i:
    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 = 5000
    Public oCallBack As Excel.IRTDUpdateEvent
    Public g_TimerID As Long
    
    Public Sub TimerCallback(ByVal hWnd As Long, ByVal uMsg As Long, ByVal idEvent As Long, ByVal dwTime As Long)
        oCallBack.UpdateNotify
    End Sub
    					
  7. Trên các Tệp tr?nh đơn, nh?p vào Làm cho ExcelRTD.dll đ? xây d?ng các thành ph?n.

S? d?ng máy ch? RTD trong Excel

  1. B?t đ?u m?t b?ng tính m?i trong Microsoft Excel.
  2. Trong cell A1, nh?p vào công th?c sau đây, và sau đó b?m các NH?P khóa:
    = RTD("ExcelRTD.RTDFunctions",,"AAA", 5)
    Giá tr? tr? l?i ban đ?u là "AAA: 0". Sau năm giây, các giá tr? C?p Nh?t c?a "AAA: 10" và sau 10 giây, các b?n c?p nh?t giá tr? đ? "aaa:15," và như v?y.

  3. Trong t? bào A2, nh?p vào công th?c sau đây và nh?n ENTER:
    = RTD("ExcelRTD.RTDFunctions",,"BBB", 3)
    Giá tr? tr? l?i ban đ?u là "BBB: 0". M?i năm giây t? bào giá tr? gia s? 3.

  4. Trong ô A3, nh?p vào công th?c sau đây và nh?n ENTER:
    = RTD("ExcelRTD.RTDFunctions",,"AAA", 5)
    Giá tr? tr? l?i ban đ?u phù h?p v?i n?i dung c?a ô A1 v? Đây là ch? cùng "đ?" đư?c s? d?ng trong A1.

  5. Trong t? bào A4, nh?p vào công th?c sau đây và nh?n Enter:
    = RTD("ExcelRTD.RTDFunctions",,"AAA", 10)
    Giá tr? tr? l?i ban đ?u là "AAA: 0." m?i năm giây t? bào bư?c tăng giá tr? như làm các t? bào khác. Lưu ? r?ng giá tr? tr? l?i không phù h?p v?i n?i dung c?a cell A1 hay A3 b?i v? s? k?t h?p c?a các thông s? thông qua các máy ch? là khác nhau.
Đ? minh ho? này, máy ch? RTD đư?c biên so?n và Excel đ? s? d?ng phiên b?n th?i gian ch?y c?a các thành ph?n. Đ? g? l?i các m?c đích, RTD các máy ch? có th? đư?c ch?y t? IDE Visual Basic.

Đ? ch?y trong ch? đ? g? l?i:
  1. Thoát kh?i Microsoft Excel và chuy?n sang các d? án trong Visual Cơ b?n.
  2. Nh?n F5 đ? b?t đ?u các thành ph?n. Nếu Thu?c tính d? án h?p tho?i xu?t hi?n, nh?p vào Ok ch?n tùy ch?n m?c đ?nh Ch? đ?i cho các thành ph?n đư?c t?o ra.
  3. H?y ch?c ch?n r?ng c?a s? ngay l?p t?c trong Visual Basic hi?n th?. Khi b?n nh?p vào công th?c trong các t? bào và như các t? bào đư?c C?p Nh?t, ki?m tra các n?i dung c?a c?a s? ngay l?p t?c trong Visual Basic đ? xem hành đ?ng kích ho?t các s? ki?n khác nhau.
Lưu ? v? s? ki?n DisconnectData

Trong khi Excel là m?t thuê bao đ? RTD máy ch? c?a b?n, nó gây nên các DisconnectData s? ki?n khi nó không c?n c?n m?t ch? đ? (ví d?, khi b?n xóa ho?c xoá m?t công th?c RTD trong m?t t? bào). Tuy nhiên, Excel không g?i DisconnectData v? t?ng ch? đ? cho các máy ch? RTD khi b?ng tính đ? đóng ho?c Excel quits; Thay vào đó, Excel g?i ch? ServerTerminate. Khi b?n đang t?o m?t máy ch? RTD, b?n nên m? cho b?t k? c?n thi?t clean-up c?a các ch? đ? ho?c đ?i tư?ng khác khi các ServerTerminate s? ki?n cháy.

(c) Microsoft Corporation 2001, t?t c? các quy?n D? tr?. Nh?ng đóng góp c?a Lori B. Turner, Microsoft Corporation.

THAM KH?O

Để biết thêm thông tin, bấm vào số bài viết sau để xem bài viết trong Cơ sở Kiến thức Microsoft:
284883RTD máy ch? không g?i thông báo C?p Nh?t nhi?u Excel Instances

Thu?c tính

ID c?a bài: 285339 - L?n xem xét sau cùng: 23 Tháng Tám 2011 - Xem xét l?i: 2.0
Áp d?ng
  • Microsoft Office Excel 2007
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Visual Basic 6.0 Professional Edition
T? khóa: 
kbexpertisebeginner kbautomation kbhowto kbmt KB285339 KbMtvi
Máy d?ch
QUAN TRỌNG: Bài vi?t này đư?c d?ch b?ng ph?n m?m d?ch máy c?a Microsoft ch? không ph?i do con ngư?i d?ch. Microsoft cung c?p các bài vi?t do con ngư?i d?ch và c? các bài vi?t do máy d?ch đ? b?n có th? truy c?p vào t?t c? các bài vi?t trong Cơ s? Ki?n th?c c?a chúng tôi b?ng ngôn ng? c?a b?n. Tuy nhiên, bài vi?t do máy d?ch không ph?i lúc nào c?ng hoàn h?o. Lo?i bài vi?t này có th? ch?a các sai sót v? t? v?ng, cú pháp ho?c ng? pháp, gi?ng như m?t ngư?i nư?c ngoài có th? m?c sai sót khi nói ngôn ng? c?a b?n. Microsoft không ch?u trách nhi?m v? b?t k? s? thi?u chính xác, sai sót ho?c thi?t h?i nào do vi?c d?ch sai n?i dung ho?c do ho?t đ?ng s? d?ng c?a khách hàng gây ra. Microsoft c?ng thư?ng xuyên c?p nh?t ph?n m?m d?ch máy này.
Nh?p chu?t vào đây đ? xem b?n ti?ng Anh c?a bài vi?t này:285339

Cung cấp Phản hồi

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com