最近我一直致力于在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
每次我在表上测试这段代码时,过程数组最终会被来自键数组中最后一个元素的信息所填充。任何输入都是有价值的和赞赏的。
答案 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
如何工作,我的代码仍然无法正常工作,所以我会将其标记为答案。