2010-06-18 5 views
39

Office 2010에 Visual Basic for Applications 7.0이 포함되어있는 것으로 나타났습니다. 그러나 나는 어떤 변화가 있었는지 많은 문서를 찾을 수없는 것 같습니다. 누구나 변경 사항 요약이나 차이점을 설명하는 리소스가 있습니까?VBA 6.0과 VBA 7.0의 차이점은 무엇입니까?

답변

37

VBA6과 VBA7 사이에는 많은 변경이 없습니다. VBA7은 Office와 Windows의 64 비트 버전을 지원하기 위해 도입되었습니다 (차이점은 아래 참조). 다음은 주요 변경 사항은 다음과 같습니다

  1. 64 비트 지원, 주로 API 호출을 위해. 이것은 모두 당신의 OS/Office 버전뿐만 아니라 다른 사람 (즉, 사무실에 사람 2003/WINXP)

    • 당신이 64 비트 버전의 Windows에있는 경우와 코드가 작동하는 데 사용되지만, Office의 32 비트 버전 에있는 경우 다음과 같은 API 호출 을 선언 할 수 있습니다. . :

      #If Win64 Then 
          Declare PtrSafe Function GetTickCount64 Lib "kernel32"() As LongLong 
      #Else 
          Declare PtrSafe Function GetTickCount Lib "kernel32"() As Long 
      #End If
    • 당신이 64 비트 버전의 Windows에있는 경우, 의 Office 64 비트 버전 에, 당신은 API 같은 를 호출 선언 할 수 있습니다. 이를 지원하기 위해

      #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. 이있다 :

    • 세 새로운 키워드 (2 개 데이터 유형 및 1 개질제) LongPtr, LongLongPtrSafe

    • 하나의 새로운 기능 : CLngLng() (즉, INT64) 이상 사용

    • 새로운 컴파일 상수 : VBA7Win64

+7

@Todd LongPtr은 별칭이고 64 비트 또는 32 비트 단어를 사용할 때 올바른 데이터 형식을 가리키고 있습니다. 따라서 LongPtr은 64 비트 사무실에서는 LongLong을, 32 비트 사무실에서는 Long을 가리 킵니다. 아래 진술은 32 비트와 64 비트 모두에서 작동합니다. PtrSafe 함수 선언 GetTickCount Lib "kernel32"() LongPtr – Syler

+0

@Syler로, 좋은 지적입니다. 나는 아직 그것을 테스트하지 않았지만, 당신이 말한 것은 의미가 있습니다. –

6

VBA7은 64 비트 버전의 Office와 호환됩니다.

9

MSDN에서이 작품은 Office 2010의 VBA (7)의 변화에 ​​더 있습니다

http://msdn.microsoft.com/en-us/library/ee691831(loband).aspx#odc_office2010_Compatibility32bit64bit_IntroducingVBA7CodeBase

+5

이 링크는 질문에 대답 할 수 있지만 답변의 핵심 부분을 여기에 포함시키고 참조 용 링크를 제공하는 것이 좋습니다. 링크 된 페이지가 변경되면 링크 전용 답변이 유효하지 않게 될 수 있습니다. – Marco13

+2

물론 당신은 맞습니다. 그러나 이것은 비교적 일찍부터 그런 관습이 성문화되기 전에 있었던 대답이라는 것을 기억하십시오. 이 대답은 받아 들여지는 대답을 생각하면이 것들은 꽤 많은 것을 다루고 있습니다. – Lunatik

+1

이 댓글은 리뷰 중에 자동 삽입되었습니다 (링크 만 - 답변은 저품질 리뷰 큐에 저장되는 경향이 있음). – Marco13

0

T 여기에 다른 변화가 있습니다 ... 나는 2007 년에 제대로 작동 한 코드가 더 이상 작동하지 않으며 오류를 보여주는 코드를 현장에서보고하도록했습니다.

예,이 VBA6에서 작동 (Excel 2007의)

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

그것은, 시각적 인 휴식으로 "="문자로 만들어진 라인을 출력 한 후 mydata을에 보이는이 넘는 점프 자이고 인 경우 결과는 mynewdata에 저장됩니다. VBA7 (Excel 2010)에서 오류가 발생합니다.

나는 잠재적 인 해결 방법을 찾았어요

...

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

또는

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

변경의 전체 목록은 여전히 ​​도움이 될 것입니다 ... 그리고/또는 파일 변환기.