数组已经标注尺寸 - 类模块

时间:2014-05-28 14:44:52

标签: arrays ms-word word-vba

出于某些技术原因,我们不能在单词中使用样式。为了加快反复应用全局属性,我创建了一个可以从简单的xml样式表中读取的类。该表包含不同的"段落。"每个段落只存储我们最常使用的段落属性。

我习惯使用C ++,我可以使用动态内存,而且我试图复制动态分配的数组的行为。但是,当我尝试重新调暗时,我收到错误消息" Array arleady dimensioned。"

我对MSDN的研究表明,为了ReDim,数组必须是全局的或者在"一般声明上下文中#34;这让我觉得可能根本无法在课堂上进行。

摘自MSDN:

  

"您只能在程序级别使用ReDim。因此,申报   变量的上下文必须是一个过程;它不能成为一个来源   文件,命名空间,接口,类,结构,模块或   。块"

我试图搜索堆栈溢出"已经标注了Word VBA阵列"并且完成了所有3页的结果,但没有用。

private type pStyle 'Definition removed because it's not needed
private Paragraphs(0) As pStyle 'Initially an empty array of paragraphs

稍后我有以下功能

Public Function AddEmpty()

'Create space
count = count + 1
ReDim Preserve Paragraphs(count)
AddEmpty = count
End Function

如果有任何想法,请告诉我。我宁愿不必估计"每个样式表我们需要的段落样式的数量,因为每个文件都不同。

2 个答案:

答案 0 :(得分:10)

Private Paragraphs(0) As ...

这不是一个空数组,而是一个固定长度数组,其中包含 1 元素。

对于动态数组 - 您将稍后重新定义 - 只需将其声明为:

Private Paragraphs() As ...

答案 1 :(得分:0)

Dim numbers(10) As Integer
MsgBox (UBound(numbers))
ReDim numbers(4)
MsgBox (UBound(numbers))

上面的代码将引发数组已维数。
我们可以做到

ReDim numbers(10) As Integer
MsgBox (UBound(numbers))
ReDim numbers(4)
MsgBox (UBound(numbers))