RTD sunucu için birden çok Excel örneği güncelleştirme bildirimlerini göndermiyor

Makale çevirileri Makale çevirileri
Makale numarası: 284883 - Bu makalenin geçerli olduğu ürünleri görün.
Hepsini aç | Hepsini kapa

Bu Sayfada

Belirtiler

RealTimeData (RTD) sunucunuz ile birlikte Microsoft Office Excel birden çok örneğini kullandığınızda, aşağıdaki iletiyi alabilirsiniz:
'Servername.classname' gerçek zamanlı veri sunucusu yanıt vermiyor. Microsoft Excel'in sunucuyu yeniden denemek ister misiniz?
Bu nedenle, RTD sunucunuzun birden çok Excel örneği için bir güncelleştirme bildirimlerini göndermek değiştiremiyor.

Neden

Visual Basic'de ActiveX EXE projeler için varsayılan ayardır, örneklemesini MultiUse için yerleşik bir ActiveX EXE RTD sunucunuz olması durumunda, bu iletiyi alabilirsiniz. Bir ActiveX EXE MultiUse olan istemciler arasında paylaşılabilir. Ayrı bir Excel örneği RTD sunucuları paylaşamaz. Excel bir RTD Server başladığında, Excel RTD Server ServerStart yöntemini çağırır ve sonra Excel örneği için geri arama</a0> nesnesine bir başvuru gönderir. Bu nedenle, ikinci örnek, Excel'in iki kopyası aynı RTD sunucu paylaşım denerseniz, ilk örneği için geri arama nesnesi yerini alır. Bu davranış, ilk örneği için geri arama nesnesi geçersiz kılar.

Çözüm

RTD sunucuları olarak Excel çalışacak bileşenlerin ActiveX EXE SingleUse örneklerini kullanın. ActiveX EXE bileşenleri SingleUse oluşturduğunuzda, her Excel oturumunda RTD kendi örneği vardır. sunucu.

Bir ActiveX DLL DOSYASı yerine, bir ActiveX EXE RTD sunucunuz için kullanılacak başka bir çözümdür'ı tıklatın. Aynı işlemi alana istemcileri olarak ActiveX DLL yüklenemedi ve her Excel oturumunda, her zaman kendi RTD sunucu örneği vardır.

Daha fazla bilgi

Sorunu Yeniden Oluşturma Adımları

  1. Visual Basic'te, yeni bir ActiveX EXE oluşturma proje.
  2. Proje menüsünde Başvurular ' ı tıklatın.
  3. Microsoft Excel 2002 nesne kitaplığı ' nı seçin ve Tamam ' ı tıklatın.
  4. Proje menüsünde Project1 Properties ' i tıklatın.
  5. "RTDExe için" proje adını değiştirin ve Tamam ' ı tıklatın.
  6. Name özelliği Class1 sınıf modülünün "İçin örnek" olarak değiştirin.
  7. Aşağıdaki kod sınıf modülüne ekleyin.
    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. Proje) menüsünde Add Module ' ı seçin.
  9. Aşağıdaki kod yeni bir modüle ekleyin.
    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. Dosya menüsünde bileşeni oluşturmak için RTDExe.exe yap ' ı tıklatın.
  11. Excel'de, yeni bir çalışma kitabı oluşturun.
  12. A1 hücresine aşağıdaki formülü yazın:
    =RTD("RTDExe.Example",,"X")
    Işlevi 0 sonucunu verir.
  13. Beş saniye sonra güncelleştirmelerin Excel bildiren bir sunucu olduğunu göstermek üzere A1 halinde değeri.
  14. Excel'in başka bir örneği'ni başlatın ve sonra yeni bir çalışma kitabını ekleyin.
  15. A1 hücresine aşağıdaki formülü yazın:
    =RTD("RTDExe.Example",,"X")
    Işlevi 0 sonucunu verir.
  16. Değer Excel'in ikinci bir örneği, A1, güncelleştirmeye devam eder. Ancak, değer a1'ın ilk örneği yok. Sonra sinyal aralığı geçti (15 saniye olan varsayılan), Excel ilk örneği aşağıdaki hata iletisini görüntüler:
    'Rtdexe.example' gerçek zamanlı veri sunucusu yanıt vermiyor. Microsoft Excel'in sunucuyu yeniden denemek ister misiniz?
    Evet, sunucu yeniden tıklatın ve bu güncelleştirme, Excel'in ilk örneği alır, sunucu bildirimleri. Sunucu, Excel'in ikinci bir örneği yeniden başlatıldıktan sonra sinyal aralığı ulaşıldıktan sonra ancak daha sonra aynı ileti oluşturur.
Bu hata almak için bu sorunu gidermek için <a0></a0>, Visual Basic projesinde geçin, SingleUse için <a0>örnek</a0> sınıfının Instancing özelliğini değiştirmek ve sonra RTD sunucu yeniden.

Referanslar

Daha fazla bilgi için, Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
285339Excel'in bir RealTimeData sunucusu oluşturma

Özellikler

Makale numarası: 284883 - Last Review: 14 Mayıs 2007 Pazartesi - Gözden geçirme: 3.2
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Office Excel 2007
  • Microsoft Office Excel 2003
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Visual Basic 6.0 Professional Edition
Anahtar Kelimeler: 
kbmt kberrmsg kbpending kbprb KB284883 KbMttr
Machine-translated Article
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:284883

Geri Bildirim Ver

 

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