有条件地在VBA中填充数组

时间:2014-12-10 04:55:39

标签: arrays vba ms-word

最近我一直致力于在VBA中编写Word宏以节省某些文档的时间。我们的想法是使用基于第一列中的一串数字的过程填充表的第二列。我有一个函数读取第一列,工作正常。我将包含该数据的数组传递给另一个函数。我已经证实我正确通过了。我的问题出现在我尝试根据第一列的数组填充第二列的数组时。我有一个结构数组作为一种"键;" "键"的每个元素;包含要将第一列与一个成员进行比较的数字字符串,以及与另一个成员相对应的过程。此函数与此类似:

Sub myFunction(ByRef codesFromTable() As String, ByRef procedures() As String)
  Dim key(3) As myType
  Dim x As Integer
  Dim y As Integer
  key(0).code = "1234"
  key(0).procedure = "Procedure 1"
  key(1).code = "2345"
  key(1).procedure = "Procedure 2"
  key(2).code = "3456"
  key(2).procedure = "Procedure 3"
  For x = 0 To 5
    For y = 0 To 2
        If StrComp(codesFromTable(x), key(y).code = 0 Then
            procedures(x) = key(y).procedure
    Next y
  Next x

每次我在表上测试这段代码时,过程数组最终会被来自键数组中最后一个元素的信息所填充。任何输入都是有价值的和赞赏的。

2 个答案:

答案 0 :(得分:0)

我认为您的代码中存在两个问题:

(1)在行"如果是StrComp(codesFromTable(x),key(y).code)那么"

" STRCOMP"当两个参数相等时返回0。不幸的是,0表示在VBA中为FALSE。 您的代码集'程序'当第一列未与键匹配时。

该行应更正如下。

If StrComp(codesFromTable(x), key(y).code) = 0 Then

(2)关于" codesFromTable(x)"

的内容

通过(1)的问题,如果第一列等于key(​​0).code或key(1).code,则程序变为key(2).procedure。

这并不能解释为什么当第一列等于key(​​2)时,过程变为关键(2).procedure。代码。

我怀疑codeFromTable(x)的类型不是String而是Integer。

您可以通过向参数添加类型来检查codesFromTable()的类型,如下所示。

Sub myFunction(ByRef codesFromTable() as String, ByRef procedures() as String)

如果codesFromTable(x)的类型为Integer,则在编译时会出现类型不匹配错误。

答案 1 :(得分:0)

我现在觉得很傻。在查看了数组的内容之后,我意识到StrComp函数总是返回1或-1,因为从表中输入的字符串在末尾附加了分隔符。如果@Fumu 7没有解释StrComp如何工作,我的代码仍然无法正常工作,所以我会将其标记为答案。