Are array indexes 0-based in VB6?

20,827

Solution 1

Yes - arrays are (generally) 0 based in VB6

The exceptions to this are when the explicit Dim someArray(1 To 10) as Int syntax has been used, or when Option Base 1 is declared at the top of the code module.

It's Collections that aren't - when you loop through Collection objects I'm pretty sure that they are 1 based.

Solution 2

The short answer is that array lower bounds are what you tell them to be.

The default is base 0 (unless overridden by Option Base 1), but you can declare lower bound to any value you want (Dim arr(-42 To 42) is as valid as Dim(3)).

Also, if an array is returned by some object, its lower bound is whatever that object sets it to. For example an Excel Range.Value reference will return a 1 based array.

Share:
20,827
Jader Dias
Author by

Jader Dias

Perl, Javascript, C#, Go, Matlab and Python Developer

Updated on July 09, 2022

Comments

  • Jader Dias
    Jader Dias almost 2 years

    I'm reviewing an automatic translation of VB6 code to C# and the convertor translated someArray(3) to someArray[3]. But accordingly to the old code documentation it should pick the third element not the fourth as it is doing in the translated version.

    Are array indexes 0-based in VB6? Or do they start at 1?

  • Matt Wilko
    Matt Wilko over 12 years
    "Unless Explicit Type Syntax has been used" Or Option Base 1 has been declared at the top of the code block
  • Jader Dias
    Jader Dias over 12 years
    @Matt Does this statement affect only the current file?
  • Jon Egerton
    Jon Egerton over 12 years
    @XMLforDummies: Yes - in VB6 you have the Option statements at the top of each code file.
  • Matt Wilko
    Matt Wilko over 12 years
    @XMLforDummies - Yes, so if say you have two modules and ModuleA has Option Base 1 declared then any array declared in ModuleA is 1 based.
  • Cody Gray
    Cody Gray over 12 years
    Unless explicitly specified otherwise at the moment of array declaration. It gets complicated. That's one of the reasons why they changed this for VB.NET.