如何在Excel宏中使VBA从0开始计数而不是1

noo*_*yte 2 excel vba

我们编写了一个宏,可以生成大量图表,然后将它们传输到 Word。这在 Excel 2007 中按预期工作,当访问这样的形状时:Shapes(0)...但在 Excel 2010 中我们不得不说:Shapes(1)。有没有办法告诉 Excel 从 0 开始计数?

Joe*_*Joe 5

这是一些聪明的 Microsoft 工程师决定使 VB 集合索引从 1 开始的决定。我认为这是设计 VB4 的时候。

理由是让索引从 1 到 N 而不是从 0 到 N-1 运行“更容易”。

因此,包括 Excel 在内的许多 COM 对象模型都遵循此模型,因此工作表、形状等集合都从 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 的索引号。