Как сделать так, чтобы VBA считал от 0, а не от 1 в макросе Excel - PullRequest
2 голосов
/ 22 марта 2011

Мы написали макрос, который генерирует множество диаграмм и затем передает их в Word. Это работает, как и ожидалось в Excel 2007, при доступе к таким фигурам: Shapes (0) ... Но в Excel 2010 мы должны были сказать: Shapes (1). Есть ли способ указать Excel начать отсчет с 0?

Ответы [ 2 ]

4 голосов
/ 22 марта 2011

Это похмелье из-за решения какого-то яркого 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.

0 голосов
/ 22 марта 2011

Звуки - из краткой статистики, показанной здесь - как ошибка Excel 2010.

Как правило, все сценарии, написанные для Excel 2007, должны работать в Excel 2010 без изменений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...