2010-06-18 25 views
39

Office 2010'un Visual Basic for Applications 7.0 ile birlikte geldiğini fark ettim. Ancak, hangi değişikliklerin yapıldığı konusunda fazla belge bulamıyorum. Herhangi bir değişiklik ya da farklılıkları açıklayan kaynakların bir özeti var mı?VBA 6.0 ve VBA 7.0 arasındaki farklar nelerdir?

cevap

37

VBA6 ile VBA7 arasında değişen bir sürü lot yok. VBA7, hem Office hem de Windows'ın 64 bit sürümlerini desteklemek için tanıtıldı (bu farklılıkların ne olduğuna bakın). İşte anahtar değişiklikler şunlardır:

  1. 64-bit desteği, öncelikle API aramalar için. Bu, hem sizin OS/Ofis versiyonu hem de başkaları (yani Ofisi birisi 2003/WinXP)

    • Eğer Windows'un 64 bit sürümünde ise ile kod çalışması için kullanılır, ancak Office'in 32-bit sürüm üzerindeyseniz, aşağıdaki gibi numaralı API çağrılarını bildirebilirsiniz. . :

      #If Win64 Then 
          Declare PtrSafe Function GetTickCount64 Lib "kernel32"() As LongLong 
      #Else 
          Declare PtrSafe Function GetTickCount Lib "kernel32"() As Long 
      #End If
    • Eğer Windows'un 64 bit sürümünde ise, ve Office'in 64 bit sürümünde üzerinde, API gibi çağrıları ilan edebilir. Bunu desteklemek için

      #If VBA7 Then 
          Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (_ 
           ByVal lpClassName As String, _ 
           ByVal lpWindowName As String) As LongPtr 
      #Else 
          Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal _ 
           lpClassName As String, ByVal lpWindowName As String) As Long 
      #End If
  2. vardır:

    • üç yeni anahtar (2 veri türleri ve 1 modifiye edici): LongPtr, LongLong ve PtrSafe

    • Tek yeni işlev: CLngLng() (ör. Int64) yukarıda kullanıldığı gibi

    • yeni derleme sabitleri: VBA7 ve Win64

+7

@Todd Sadece işaret etmek istiyorum, LongPtr bir takma addır ve 64 bit veya 32 bit kelime kullanıldığında doğru veri tipini işaret eder. Bu yüzden LongPtr, 64 bitlik ofis ve Long 32bit ofisinde LongLong'a işaret ediyordu. Aşağıdaki ifade hem 32 hem de 64bit ofisinde çalışacaktır. PtrSafe İşlevini Bildir GetTickCount Lib "kernel32"() LongPtr – Syler

+0

@Syler, bu iyi bir nokta. Henüz test etmedim ama söylediklerini anlamışsın. –

6

VBA7, Office'in 64 bit sürümleriyle uyumludur.

9
+5

Bu bağlantı soruyu yanıtlayabilirken, cevabın temel kısımlarını buraya dahil etmek ve referans için bağlantı sağlamak daha iyidir. Bağlantılı sayfa değiştiğinde yalnızca bağlantı yanıtları geçersiz olabilir. – Marco13

+2

Elbette doğru, ama bu konvansiyonlar gerçekten kodlanmış önce, bunun SO'nun nispeten erken dönemlerinden bir cevap olduğunu unutmayın. Kabul edilen cevabı düşünün ve bu oldukça fazla şeyleri kapsar :) – Lunatik

+1

Bu yorum, bir inceleme sırasında otomatik olarak eklenmiştir (yalnızca bağlantıya yönelik yanıtlar düşük kaliteli inceleme kuyruğunda olma eğilimindedir) – Marco13

0

T Burada başka değişiklikler de var ... Alanında bulunan kullanıcılara 2007'de düzgün bir şekilde çalışan kodun artık çalışmıyor ve hataları gösterdiğine inanıyorum.

Örnek, bu VBA6 çalışır (Excel 2007)

PRINT STRING$(80,"=") 
mynewdata = MID$(mydata, 15,4) 

Bu bir görsel mola olarak "=" karakterlerden oluşan bir çizgi yazdırır sonra MyData bakar, üstünden atlar karakterler ve alır, sonuç mynewdata içinde depolanır. VBA7'de başarısız olur (Excel 2010).

Potansiyel bir çözüm buldunuz

...

PRINT VBA.STRING$(80,"=") 
mynewdata = VBA.MID$(mydata, 15,4) 

VEYA

PRINT VBA.STRING(80,"=") 
mynewdata = VBA.MID(mydata, 15,4) 

değişikliklerin tam listesi hala yararlı olacaktır ... ve/veya bir dosya dönüştürücü.