Διακομιστής RTD δεν αποστέλλει ειδοποιήσεις ενημέρωσης σε πολλές εμφανίσεις του Excel

Μεταφράσεις άρθρων Μεταφράσεις άρθρων
Αναγν. άρθρου: 284883 - Δείτε τα προϊόντα στα οποία αναφέρεται το συγκεκριμένο άρθρο.
Ανάπτυξη όλων | Σύμπτυξη όλων

Σε αυτήν τη σελίδα

Συμπτώματα

Όταν χρησιμοποιείτε πολλές παρουσίες του Microsoft Office Excel μαζί με το διακομιστή σας RealTimeData (RTD), ενδέχεται να λάβετε το ακόλουθο μήνυμα:
Ο διακομιστής δεδομένων πραγματικού χρόνου 'servername.classname' δεν ανταποκρίνεται. Θέλετε να προσπαθήσετε να κάνετε επανεκκίνηση του διακομιστή Microsoft Excel;
Επομένως, ο διακομιστής RTD δεν είναι δυνατό να στείλει ειδοποιήσεις ενημέρωσης σε πολλές περιόδους λειτουργίας του Excel.

Αιτία

Ενδέχεται να λάβετε αυτό το μήνυμα, αν ο διακομιστής RTD είναι ένα EXE ActiveX που έχει δημιουργηθεί για MultiUse instancing, που είναι μια προεπιλεγμένη ρύθμιση για έργα της Visual Basic ActiveX EXE. Ένα EXE ActiveX που είναι MultiUse μπορεί να είναι κοινόχρηστη μεταξύ των υπολογιστών-πελατών. Ξεχωριστές περιόδους λειτουργίας του Excel δεν μπορούν να κάνουν κοινή χρήση διακομιστών RTD. Κατά την εκκίνηση ενός διακομιστή RTD του Excel, το Excel καλεί ο διακομιστής RTDServerStartη μέθοδος και μετά μεταβιβάζει μια αναφορά για τοΕπιστροφή κλήσηςαντικείμενο για αυτήν την περίοδο λειτουργίας του Excel. Επομένως, εάν δύο εμφανίσεις του Excel, δοκιμάστε να κάνετε κοινή χρήση του ίδιου διακομιστή RTD, αντικαθιστά τη δεύτερη εμφάνιση τουΕπιστροφή κλήσηςτο αντικείμενο για την πρώτη περίοδο λειτουργίας. Η συμπεριφορά αυτή ακυρώνει τηνΕπιστροφή κλήσηςτο αντικείμενο για την πρώτη περίοδο λειτουργίας.

Προτεινόμενη αντιμετώπιση

Χρησιμοποιήστε SingleUse instancing για στοιχεία ActiveX EXE που θα λειτουργούν ως διακομιστές RTD για το Excel. Όταν δημιουργείτε στοιχεία ActiveX EXE ως SingleUse, κάθε εμφάνιση του Excel έχει τη δική της παρουσίας του RTD το διακομιστή.

Μια άλλη λύση είναι να χρησιμοποιήσετε μια βιβλιοθήκη DLL ActiveX για το διακομιστή RTD αντί για ένα ActiveX EXE. Η φόρτωση του DLL ActiveX στον ίδιο χώρο διεργασίας με τους υπολογιστές-πελάτες και κάθε περίοδο λειτουργίας του Excel έχει πάντα το δικό της παρουσίας του διακομιστή RTD.

Περισσότερες πληροφορίες

Βήματα για την αναπαραγωγή του ζητήματος

  1. Στη Visual Basic, δημιουργήστε ένα νέο ActiveX EXE έργου.
  2. Στο διακομιστήΤο έργομενού, κάντε κλικ στο κουμπίΑναφορές.
  3. ΕπιλογήΒιβλιοθήκη αντικειμένων του Microsoft Excel 2002, και στη συνέχεια κάντε κλικ στο κουμπίOk.
  4. Στο διακομιστήΤο έργομενού, κάντε κλικ στο κουμπίΙδιότητες Project1.
  5. Αλλάξτε το όνομα του έργου "RTDExe" και στη συνέχεια κάντε κλικ στο κουμπίOk.
  6. Αλλαγή τουNAMEη ιδιότητα από τοClass1λειτουργική μονάδα κλάσης "Παράδειγμα".
  7. Προσθέστε τον ακόλουθο κώδικα στη λειτουργική μονάδα κλάσης.
    Option Explicit
    
    Implements IRtdServer  'Interface allows Excel to contact this RealTimeData server.
    
    Dim nCounter As Long
    
    Private Function IRtdServer_ConnectData(ByVal TopicID As Long, Strings() As Variant, _
       GetNewValues As Boolean) As Variant
        IRtdServer_ConnectData = nCounter
    End Function
    
    Private Sub IRtdServer_DisconnectData(ByVal TopicID As Long)
        nCounter = 0
    End Sub
    
    Private Function IRtdServer_Heartbeat() As Long
        'Do nothing.
    End Function
    
    Private Function IRtdServer_RefreshData(TopicCount As Long) As Variant()
        Dim aUpdates(0 To 1, 0 To 0) As Variant
        nCounter = nCounter + 1
        aUpdates(0, 0) = 0   'For this sample, we only refresh topic id = 0
        aUpdates(1, 0) = nCounter
        TopicCount = 1
        IRtdServer_RefreshData = aUpdates
    End Function
    
    Private Function IRtdServer_ServerStart(ByVal CallbackObject As Excel.IRTDUpdateEvent) As Long
        nCounter = 0
        Set oCallBack = CallbackObject
        g_TimerID = SetTimer(0, 0, TIMER_INTERVAL, AddressOf TimerCallback)
        If g_TimerID > 0 Then IRtdServer_ServerStart = 1       'Any value <1 indicates failure.
    End Function
    
    Private Sub IRtdServer_ServerTerminate()
        KillTimer 0, g_TimerID
    End Sub
    					
  8. Στο διακομιστήΤο έργομενού επιλογήςΠροσθέστε τη λειτουργική μονάδα.
  9. Προσθέστε τον ακόλουθο κώδικα στη νέα λειτουργική μονάδα.
    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
    					
  10. Στο διακομιστήFILEμενού, κάντε κλικ στο κουμπίΔημιουργία RTDExe.exeΓια να δημιουργήσετε το στοιχείο.
  11. Στο Excel, δημιουργήστε ένα νέο βιβλίο εργασίας.
  12. Στο κελί A1, πληκτρολογήστε τον ακόλουθο τύπο:
    =RTD("RTDExe.Example",,"X")
    Η συνάρτηση επιστρέφει τιμή 0.
  13. Μετά από πέντε δευτερόλεπτα, η τιμή A1 κατά διαστήματα για να υποδείξετε ότι ο διακομιστής γνωστοποιεί Excel των ενημερωμένων εκδόσεων.
  14. Ξεκινήστε μια άλλη περίοδο λειτουργίας του Excel και στη συνέχεια να προσθέσετε ένα νέο βιβλίο εργασίας.
  15. Στο κελί A1, πληκτρολογήστε τον ακόλουθο τύπο:
    =RTD("RTDExe.Example",,"X")
    Η συνάρτηση επιστρέφει τιμή 0.
  16. Η τιμή του A1 της δεύτερης εμφάνισης του Excel εξακολουθεί να ενημερώσετε. Η τιμή της πρώτης εμφάνισης A1 όχι όμως. Μετά την παλμών έχει παρέλθει το χρονικό διάστημα (15 δευτερόλεπτα είναι η προεπιλογή), η πρώτη εμφάνιση του Excel εμφανίζει το ακόλουθο μήνυμα λάθους:
    Ο διακομιστής δεδομένων πραγματικού χρόνου 'rtdexe.example' δεν ανταποκρίνεται. Θέλετε να προσπαθήσετε να κάνετε επανεκκίνηση του διακομιστή Microsoft Excel;
    Εάν κάνετε κλικ στο κουμπίYES, γίνεται επανεκκίνηση του διακομιστή, και η πρώτη εμφάνιση του Excel λαμβάνει ενημέρωση ειδοποιήσεις από το διακομιστή. Ωστόσο, μετά την επανεκκίνηση του διακομιστή, τη δεύτερη εμφάνιση του Excel, στη συνέχεια, δημιουργεί το ίδιο μήνυμα αφού έφτασε το διάστημα παλμών.
Για να διορθώσετε το πρόβλημα, ώστε να μην λαμβάνετε αυτό το σφάλμα, μεταβείτε στο έργο της Visual Basic, η αλλαγή τουInstancingη ιδιότητα από τοΠαράδειγμαη κλάση ναSingleUse, και στη συνέχεια, δημιουργήστε εκ νέου ο διακομιστής RTD.

Αναφορές

Για περισσότερες πληροφορίες, κάντε κλικ στον αριθμό του άρθρου παρακάτω, για να προβάλετε το άρθρο της Γνωσιακής Βάσης της Microsoft (Knowledge Base):
285339Τρόπος δημιουργίας ενός διακομιστή RealTimeData για το Excel

Ιδιότητες

Αναγν. άρθρου: 284883 - Τελευταία αναθεώρηση: Τρίτη, 28 Σεπτεμβρίου 2010 - Αναθεώρηση: 2.0
Οι πληροφορίες σε αυτό το άρθρο ισχύουν για:
  • Microsoft Office Excel 2007
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Visual Basic 6.0 Professional Edition
Λέξεις-κλειδιά: 
kberrmsg kbpending kbprb kbmt KB284883 KbMtel
Μηχανικά μεταφρασμένο
ΣΗΜΑΝΤΙΚΟ: Αυτό το άρθρο είναι προϊόν λογισμικού μηχανικής μετάφρασης της Microsoft και όχι ανθρώπινης μετάφρασης. Η Microsoft σάς προσφέρει άρθρα που είναι προϊόντα ανθρώπινης αλλά και μηχανικής μετάφρασης έτσι ώστε να έχετε πρόσβαση σε όλα τα άρθρα της Γνωσιακής Βάσης μας στη δική σας γλώσσα. Ωστόσο, ένα άρθρο που έχει προκύψει από μηχανική μετάφραση δεν είναι πάντα άριστης ποιότητας. Ενδέχεται να περιέχει λεξιλογικά, συντακτικά ή γραμματικά λάθη, όπως ακριβώς τα λάθη που θα έκανε ένας μη φυσικός ομιλητής επιχειρώντας να μιλήσει τη γλώσσα σας. Η Microsoft δεν φέρει καμία ευθύνη για τυχόν ανακρίβειες, σφάλματα ή ζημίες που προκύψουν λόγω τυχόν παρερμηνειών στη μετάφραση του περιεχομένου ή χρήσης του από τους πελάτες της. Επίσης, η Microsoft πραγματοποιεί συχνά ενημερώσεις στο λογισμικό μηχανικής μετάφρασης.
Η αγγλική έκδοση αυτού του άρθρου είναι η ακόλουθη:284883

Αποστολή σχολίων

 

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