2010-06-18 12 views
39

Zauważyłem, że Office 2010 pochodzi z Visual Basic for Applications 7.0. Jednak nie mogę znaleźć wiele dokumentacji na temat zmian, które zostały wprowadzone. Czy ktoś ma podsumowanie zmian lub jakiekolwiek zasoby opisujące różnice?Jakie są różnice między VBA 6.0 a VBA 7.0?

Odpowiedz

37

Nie wiele zmieniło się między VBA6 a VBA7. VBA7 został wprowadzony do obsługi 64-bitowych wersji Office i Windows (zobacz poniżej, na czym polegają te różnice). Oto najważniejsze zmiany:

  1. 64-bitowego, głównie dla API połączeń. Jest to zarówno używany do pracy kod z OS/wersja pakietu Office, a także innych (tzn ktoś w pakiecie Office 2003/WinXP)

    • Jeśli jesteś w wersji 64-bitowej Windows, ale są w 32-bitowej wersji pakietu Office , można zadeklarować wywołania API jak poniżej. .

      #If Win64 Then 
          Declare PtrSafe Function GetTickCount64 Lib "kernel32"() As LongLong 
      #Else 
          Declare PtrSafe Function GetTickCount Lib "kernel32"() As Long 
      #End If
    • Jeśli jesteś w wersji 64-bitowej Windows i są w 64-bitowej wersji Urzędu, można zadeklarować wywołań API jak: .

      #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. W tym wspiera, są:

    • trzy słowa kluczowe (2 typy danych i 1 modyfikator): LongPtr, LongLong i PtrSafe

    • Jedna nowa funkcja: CLngLng() (tj. Int64)

    • Nowe stałe kompilacji użyte powyżej: VBA7 i Win64

+7

@ Todd Chcę tylko zwrócić uwagę, LongPtr jest aliasem i wskazuje na prawidłowy typ danych podczas korzystania z 64-bitowego lub 32-bitowego słowa. Zatem LongPtr wskazywałby LongLong na 64-bitowe biuro i Long na 32-bitowe biuro. Poniższa instrukcja będzie działać zarówno w biurze 32-bitowym, jak i 64-bitowym. Zadeklaruj funkcję PtrSafe GetTickCount Lib "kernel32"() Jako LongPtr – Syler

+0

@Syler, to dobra uwaga. Nie testowałem jeszcze tego, ale ma to sens, co powiedziałeś. –

6

VBA7 jest zgodny z 64-bitowymi wersjami pakietu Office.

9
+5

Podczas gdy ten link może odpowiedzieć na pytanie, lepiej umieścić tutaj istotne części odpowiedzi i podać odnośnik. Odpowiedzi dotyczące linków mogą stać się nieprawidłowe, jeśli strona z linkami się zmieni. – Marco13

+2

Oczywiście masz rację, ale pamiętaj, że była to odpowiedź ze stosunkowo wczesnych dni SO, zanim takie konwencje zostały naprawdę skodyfikowane. Pomyśl o zaakceptowanej odpowiedzi, a ta prawie całkiem pokrywa sprawy :) – Lunatik

+1

Ten komentarz został automatycznie wstawiony podczas sprawdzania (tylko link-only-end zazwyczaj kończy się kolejką o niskiej jakości). – Marco13

0

T tutaj są również inne zmiany ... Mam użytkowników w polu raportu, że kod, który działał poprawnie w 2007 r. nie działa i pokazuje błędy.

Przykład ten działa w VBA6 (Excel 2007)

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

To wypisuje linię wykonaną z "=" znaków jako wizualny przerwy, a potem patrzy na MyData, przeskakuje znaków i dostaje z nich, wynik jest przechowywany w mynewdata. Nie powiedzie się w VBA7 (Excel 2010).

znalazłem potencjalne obejście ...

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

LUB

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

Pełną listę zmian nadal będzie pomocny ... i/lub konwerter plików.

Powiązane problemy