【发布时间】:2020-08-19 06:53:11
【问题描述】:
我已经开始复习 cpearson 关于传递和返回数组的文章,但我对细节有点迷失了。以下内容无效,并由论文确认。似乎我可以通过遍历数组以将每个元素设置为等于另一个数组中的元素来解决问题。如何使用函数执行此操作?
Sub test()
Dim Arr() as Variant
Dim CurrDoc as Word.Document
ReDim Arr(0 to 39, 0 to 1)
Arr() = FillArr(CurrDoc, Arr())
End Sub
Function FillArr(CurrentDocument As Word.Document, CurrentArray() As Variant) As Variant
j = 1
For Each chk In CurrentDocument.ContentControls
If chk.Type = 8 Then
CurrentArray(j, 1) = chk.Title
CurrentArray(j, 2) = chk.Checked
j = j + 1
End If
Next chk
FillArr() = CurrentArray()
End Function
【问题讨论】:
-
你为什么用
ReDim AnsArr(1 to 40, 1 to 2),却用Arr? -
^ 并返回
CurrentArr(),它不会在其他任何地方使用。 -
Option ExplicitFTW 另外,CurrDoc没有,因为你没有设置它。 -
^ 除了它不会标记
ReDim AnsArr中的AnsArr... 但无论如何,是的,您非常需要Option Explicit。 -
旁注,上面的每一条评论(以及更多评论)都将被报告为Rubberduck 的代码检查结果。 IMO 一个更好的方法是使用
Sub程序来清楚地记录程序的副作用性质,然后让它接收一个ByRef数组(数组 have 被传递通过引用 anyway)复数名称参数:Private Sub GetContentControls(ByVal currentDocument As Word.Document, ByRef outControls() As Variant)(命名是关键!)。无论如何,请注意以下@Tomalak 的建议。干杯!