22

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?

MarkJ
  • 30,070
  • 5
  • 68
  • 111
Jader Dias
  • 88,211
  • 155
  • 421
  • 625

2 Answers2

22

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.

Jon Egerton
  • 40,401
  • 11
  • 97
  • 129
8

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.

chris neilsen
  • 52,446
  • 10
  • 84
  • 123