数组已确定尺寸-类模块

问题描述 投票:7回答:2

出于某些技术原因,我们不能在文字中使用样式。为了加快一遍又一遍地应用全局属性,我创建了一个可以从简单的xml样式表读取的类。该工作表包含不同的“段落”。每个段落仅存储我们最常使用的段落属性。

我习惯了可以使用动态内存的C ++,并且试图复制动态分配的数组的行为。但是,当我尝试重新调暗时,会收到错误消息“数组有铅的尺寸。”

我对MSDN的研究表明,要重新定义数组必须是Global或在“一般声明上下文”中,这使我认为可能根本不可能在类中做到这一点。

摘自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

请让我知道是否有任何想法。我希望不必“估计”每个样式表所需的段落样式数,因为每个文件都不同。

arrays ms-word word-vba
2个回答
10
投票
Private Paragraphs(0) As ...

这不是一个空数组,而是具有1元素的fixed length数组。

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

Private Paragraphs() As ...

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))
© www.soinside.com 2019 - 2024. All rights reserved.