Είσοδος

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

ΣΗΜΑΝΤΙΚΟ: Αυτό το άρθρο έχει μεταφραστεί χρησιμοποιώντας λογισμικό μηχανικής μετάφρασης της Microsoft και μπορείτε να το διορθώσετε χρησιμοποιώντας την τεχνολογία Community Translation Framework (CTF) (Πλαίσιο μετάφρασης κοινότητας). Η Microsoft παρέχει μηχανική μετάφραση, επεξεργασία μετά τη μηχανική μετάφραση από την κοινότητα και άρθρα μεταφρασμένα από επαγγελματίες προκειμένου να έχετε πρόσβαση σε όλα τα άρθρα της Γνωσιακής βάσης σε πολλές γλώσσες. Τα άρθρα μηχανικής μετάφρασης και αυτά που επεξεργάζονται ύστερα από μηχανική μετάφραση ενδέχεται να περιέχουν σφάλματα στο λεξιλόγιο, στη σύνταξη ή/και στη γραμματική. Η Microsoft δεν φέρει καμία ευθύνη για τυχόν ανακρίβειες, σφάλματα ή ζημίες που προκύψουν λόγω τυχόν παρερμηνειών στη μετάφραση του περιεχομένου ή χρήσης του από τους πελάτες μας. Για περισσότερες πληροφορίες σχετικά με το CTF, μεταβείτε στην τοποθεσία http://support.microsoft.com/gp/machine-translation-corrections/el.

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 ExplicitImplements IRtdServer  'Interface allows Excel to contact this RealTimeData server.Dim nCounter As LongPrivate Function IRtdServer_ConnectData(ByVal TopicID As Long, Strings() As Variant, _   GetNewValues As Boolean) As Variant    IRtdServer_ConnectData = nCounterEnd FunctionPrivate Sub IRtdServer_DisconnectData(ByVal TopicID As Long)    nCounter = 0End SubPrivate Function IRtdServer_Heartbeat() As Long    'Do nothing.End FunctionPrivate 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 = aUpdatesEnd FunctionPrivate 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 FunctionPrivate Sub IRtdServer_ServerTerminate()    KillTimer 0, g_TimerIDEnd 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 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					
  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
rtdserver realtimedata πραγματικό χρόνο δεδομένων διακομιστή rtd σε πραγματικό χρόνο prb XL2002 XL2002 XL2003 XL2007

Προειδοποίηση: Αυτό το άρθρο είναι μεταφρασμένο αυτόματα

Ιδιότητες

Αναγνωριστικό άρθρου: 284883 - Τελευταία αναθεώρηση: 01/12/2015 17:24:04 - Αναθεώρηση: 3.0

  • Microsoft Office Excel 2007
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • kbnosurvey kbarchive kberrmsg kbpending kbprb kbmt KB284883 KbMtel
Σχόλια