HATA: Excel JScript'ten Otomatikleştirerken Çıkma Yöntemini Aradıktan Sonra Kapatılamıyor

Not

Office 365 ProPlus, Microsoft 365 Kurumsal Uygulamaları olarak yeniden adlandırılıyor. Bu değişiklik hakkında daha fazla bilgi için, bu blog yazısını okuyun.

Belirtiler

Microsoft JScript'ten Microsoft Excel'i otomatikleştirirken, Internet Explorer'ı kapatana veya başka bir sayfaya gidinceye kadar Excel, Quit yöntemini çağırdıktan sonra bellekte kalır.

Neden

JScript, Excel'e bir başvuruyu elinde tutuyor. Quit komutunu verdiyseniz Excel'de bir başvuru olduğundan, Excel kapanmaz. JScript bir çöp toplama dilidir, bu da değişkenleri NULL olarak ayarladığınızda değil, motorun kendisinden sonra temizlendiği anlamına gelir. Internet Explorer'ı kapattığınızda veya başka bir sayfaya taşındığınızda, motor yok edilir. Bu davranış çöp toplamayı zorlar ve Excel'e başvuruyu serbest sağlar.

Çözüm

Bu sorunu aşmak için CollectGarbage yöntemini arayabilirsiniz. Bu, JScript'in çöp toplamasını hemen oluşmaya zorlar ve bu da başvuruyu Excel'e bırakır. Aşağıdaki kod parçacığı, Çöp Toplama yönteminin nasıl kullanılacağını gösterir:

<HTML> 
<BODY> 
<INPUT type="button" value="Automate Excel" name=AutomateExcel onclick="StartExcel()"> 
<SCRIPT LANGUAGE=Javascript> 
  var idTmr = "";

function StartExcel() { 
    var oExcel; 

oExcel = new ActiveXObject("Excel.Application"); 
    oExcel.Quit(); 
    oExcel = null;
    idTmr = window.setInterval("Cleanup();",1);
  } 

function Cleanup() {
    window.clearInterval(idTmr);
    CollectGarbage();
  }

</SCRIPT> 
</BODY> 
</HTML> 

CollectGarbage yönteminin Excel'in Quit yönteminden hemen sonra çağrılmadığını unutmayın. CollectGarbage'i aramadan önce JScript'e az miktarda zaman vermeniz gerekir. Çöp toplamayı zorlamadan önce nasıl bekleyeceğini göstermek için bu örnekte bir zamanlayıcı kullanılır.

Bu sorunun başka bir geçici çözümü, Microsoft Excel Otomasyonu için VBScript'i kullanmaktır. JScript'in aksine, VBScript çöp toplama dili değildir ve bu nedenle değişkenleri Hiçbir Şey olarak ayarladığınızda başvurular serbest bırakılır. VBScript'i kullanan Excel, Quit yöntemini aradıktan ve değişkenleri serbest bıraktıktan hemen sonra kapanır. Daha fazla bilgi için lütfen bu makalenin "Referanslar" bölümüne bakın.

NOT Belgelenmemiş CollectGarbage yöntemi ECMA-262 belirtiminin bir parçası değildir ve komut dosyası altyapısının gelecekteki sürümlerinde kullanılamayabilir. Çöp toplayıcısını CollectGarbage'i arayarak çalışmaya zorladığınızda, bu performansı da olumsuz etkileyebilir.

Durum

Microsoft, bu makalenin başında listelenen Microsoft ürünlerinde bir hata olduğunu doğruladı.

Daha Fazla Bilgi

Davranışı Çoğaltma Adımları

  1. Not Defteri'ni başlatın ve editöre aşağıdaki kodu yapıştırın:
  <HTML> 
  <BODY> 
  <INPUT type="button" value="Automate Excel" name=AutomateExcel onclick="StartExcel()"> 
  <SCRIPT LANGUAGE=Javascript> 
    function StartExcel() { 
      var oExcel; 
  
  oExcel = new ActiveXObject("Excel.Application"); 
      oExcel.Quit(); 
      oExcel = null; 
    } 
  </SCRIPT> 
  </BODY> 
  </HTML> 
  1. Dosyayı JScriptTest.HTM olarak kaydedin ve ardından Not Defteri'nden çıkın.
  2. Dosyayı Internet Explorer'a yüklemek için JScriptTest.HTM dosyasını çift tıklatın.
  3. Windows Görev Yöneticisi'ni başlatın.
  4. Internet Explorer'da Web sayfasında Excel'i Otomatikleştir düğmesini tıklatın. Windows Görev Yöneticisi'ni inceleyin ve Excel'in bellekte başlayıp kaldığını unutmayın.
  5. Başka bir sayfaya gidin veya Internet Explorer'dan çıkın. Excel'in ayrıldığını ve artık Windows Görev Yöneticisi'nde görünmediğini unutmayın.

Başvuru

Ek bilgi için Excel'e Otomasyon gösteren bir VBScript kod örneği için, excel'i istemci tarafındaki VBScript'ten nasıl otomatikleştirin.