Это похмелье из-за решения какого-то яркого Microsoft Engineer о том, чтобы индексы коллекции VB начинались с 1. Я думаю, это было, когда разрабатывался VB4.
Обоснованием было то, что "проще" иметь индексы, работающие от 1 до N, а не от 0 до N-1.
В результате многие объектные модели COM, включая Excel, следуют этой модели, поэтому коллекции, такие как «Рабочие таблицы», «Фигуры» и т. Д., Индексируются от 1 до N.
Я удивлен вашим утверждением, что Shapes (0) сработал так, как ожидалось в Excel 2007. В Excel 2003 это не сработало, и кажется маловероятным, что это было бы изменено.
Обновление
Я проверял это в Excel 2007, и Shapes (0) действительно ссылается на первый Shape в коллекции - так же, как Shapes (1), насколько я могу видеть. Это изменение между Excel 2003 и Excel 2007, для которого я не могу найти никакой информации - я подозреваю, что это ошибка в Excel 2007.
Из того, что вы говорите, похоже, что Excel 2010 вернулся к тому же поведению, что и Excel 2003 (то есть ошибка в Excel 2007 была исправлена). Если вам нужен код, который работает во всех версиях Excel, используйте номера от 1 до N.