What are the differences between VBA 6.0 and VBA 7.0?

I noticed that Office 2010 comes with Visual Basic for Applications 7.0. However I can't seem to find much documentation on what changes were made. Does anyone have a summary of the changes, or any resources describing the differences?

Difference Between, is partially compiled and requires an interpreter to execute. VB (Visual Basic only up to 6.0) is a superset of VBA (Visual Basic for Applications). I know that others have sort of eluded to this but my understanding is that the semantics (i.e. the vocabulary) of VBA is included in VB6 (except for objects specific to Office products), therefore, VBA is a subset of VB6.

This piece on MSDN has more on the changes in VBA 7 for Office 2010:


Visual Basic for Applications, has held its position as "most dreaded" language for developers for 2 years. Difference Between Visual Basic 6.0 and VBA What is the difference between the two. I always thought VBA is somewhat 'crippled' version of VB, but when a friend asked me the other day I had no idea what the actual differences are.

VBA7 is compatible with 64-bit versions of Office.

Will VBA Die in 2019?, keyword to a Declare statement only signifies that the Declare statement explicitly targets 64-bits. Syntax of VBA and VB 6.0 are same. VB -Visual Basic Vb 6.0 we can create an executable programs (.exe file) which can be installed. VB represent as standalone application.

There are other changes as well... I'm having users in the field report that code which functioned properly in 2007 no longer works and shows errors.

Example, this works in VBA6 (Excel 2007)

mynewdata = MID$(mydata, 15,4)

It prints out a line made of "=" characters as a visual break, then looks at mydata, jumps over 15 characters and gets 4 of them, the result is stored in mynewdata. It fails in VBA7 (Excel 2010).

I did find a potential workaround...

mynewdata = VBA.MID$(mydata, 15,4)


mynewdata = VBA.MID(mydata, 15,4)

A complete list of changes would still be helpful... and/or a file converter.

PtrSafe keyword (VBA), Is there any listing of those differences and work arounds? Access 2010 uses VBA 7.0 (under which my Access Application runs), so there also  However, there were two substantial advantages to using VBScript over VBA: VBA was unnecessarily complex for the scripting tasks required. Licensing costs for VBA were significantly higher. For these reasons, DIAdem standardized on VBScript. VBScript is a "light-weight" sub-set of Visual Basic.

Differences between VBA 7.1 and 6.5, VBA 7.0. Office 2010. Support for both 32 bit and 64 bit. DefType - DefLngPtr vartype constant It is only supported in the VBA 7 runtime on 32-bit and 64-bit. Note that you can Code is running in VBA version 6 or earlier #end if #If Vba7  Scott McDaniel. Replied on January 27, 2016. There's really not much difference between the two. 7.0 basically added compatibility for the 64 bit environment, which included the addition of a couple of new keywords and one or two functions. 7.0 is backwards compatible with earlier versions, so if you're having troubles with your application in different environments the cause is almost certainly NOT the version of VBA in those environments.

VBA Visual Basic Editor - VBA 7.0, Syntax of VBA and VB 6.0 are same. VB -Visual Basic Vb 6.0 we can create an executable programs (.exe file) which can be installed. Answered Nov 7, 2017. VB vs VBA. VB abbreviated from Visual Basic and VBA known as Visual Basic for Applications, have both originated from Basic. In this way, they share fundamental similarity. Visual Basic got popularity as a third generation that supports an integrated development environment introduced by the leading software company, Microsoft.

What is the difference between VBA and VB 6.0?, I noticed that Office 2010 comes with Visual Basic for Applications 7.0. However I can't seem to find much documentation on what changes  00:08 cover first is just a little background on the difference between macros and VBA. 00:13 We tend to toss those terms out interchangeably, but; 00:16 they're not exactly the same thing, and I wanna cover off why that is. 00:20 The first thing we wanna talk about is macros.

  • @Todd I just want to point out, LongPtr is an alias and it points to the correct datatype when using 64bit or 32bit of word. So LongPtr would point to LongLong on 64bit office and Long on 32bit office. The below statement would work on both 32 and 64bit office. Declare PtrSafe Function GetTickCount Lib "kernel32" () As LongPtr
  • @Syler, that's a good point. I haven't tested it yet, but it makes sense what you said.
  • While this answer shows what is possible with the new keywords, it may certainly come off misleading when it comes to what should be done with them. Having different API declarations for 32-on-64 and for 64-on-64 is not right, and implies there are different Excel files for different architectures. The right thing is to only check for VBA7 and use LongPtr in all places where pointer-sized argument must occur.
  • The specific choice of GetTickCount/GetTickCount64 for the first code samples makes it extra confusing because those are two different functions, as opposed to two variants of the same function, and they both exist on both 32 and 64-bit architectures. The @Syler's comment, while correct in its spirit, is unfortunately wrong technically because the return value of GetTickCount is always Long regardless of Windows bitness, so should not be declared using LongPtr.
  • The second code sample is absolutely correct as far as the code goes, but it is titled incorrectly: it is not for 64-on-64, it is the correct, universal piece of code that will work on all combinations of Office and Windows bitnesses.
  • While this link may answer the question, it is better to include the essential parts of the answer here and provide the link for reference. Link-only answers can become invalid if the linked page changes.
  • You are of course correct, but remember that this was an answer from the relatively early days of SO, before such conventions were really codified. Think the accepted answer and this one pretty much covers things :)
  • This comment was auto-inserted during a review (link-only-answers tend to end up in the low-quality review queue)
  • A possibly related difference is documented at : riptutorial.com/vba/example/18930/vb-globalnamespace .
  • This limitation is common to all versions of VBA