【发布时间】:2019-08-26 18:21:02
【问题描述】:
我有一个带有一些 VBA 的电子表格。它提示用户使用文件浏览器选择电子表格。用户选择的电子表格包含跨行的一长串项目,其中一些是重复的。每个项目在相邻列中都有多个属性。
代码获取每个项目,组合属性,并生成一个没有任何重复项目和组合属性的新工作表。
我的代码应该遍历所选电子表格中的每个项目,并检查它正在构建的工作表以查看它是否已经处理了该项目。如果有,它应该继续前进。如果没有,它会抓取属性,检查工作表的其余部分是否有重复,汇总属性并将其添加到新工作表中。
在主例程中,我找到我正在使用的列,并使用 for 循环遍历用户选择的电子表格。每次迭代我都会调用一个函数doesNotExist()。此函数将项目名称作为参数,并将遍历新工作表上的所有项目以查看该项目是否已存在于新工作表上。如果新工作表上不存在该项目,则返回True。否则返回False。
返回数据被传递给一个 If 语句,它只会评估我的函数是否返回 True。或者,至少应该如此。
我使用了很多消息框来查看我的代码到底在做什么。该函数始终正确评估数据。但是,无论返回值如何,If 语句中的代码都会一直执行。
我什至在带有消息框的 if 语句中添加了 Else。该消息框永远不会打开,即使我的函数返回值为 false。
Function doesNotExist(itemName As String, itemP As String, arSheet As Worksheet) As Boolean
'iterates through all items on the PO. Checks to see if item defined in param exists in PO
For i = 17 To (arSheet.Range("itemCount") + 17)
If ((StrComp(arSheet.Cells(i, 4), itemName)) = 0) Then
If ((StrComp(arSheet.Cells(i, 7), itemP)) = 0) Then
doesNotExist = False
End If
End If
Next i
doesNotExist = True
End Function
If (doesNotExist(wb2.Worksheets(1).Cells(i, itemName.Column), wb2.Worksheets(1).Cells(i, itemP.Column), ar)) Then
~code~
Else
MsgBox ("I did not print " & wb2.Worksheets(1).Cells(i, skuName.Column))
End If
【问题讨论】:
-
将
doesNotExist设置为false后不会退出。执行继续并在所有情况下执行doesNotExist = True。该函数始终返回true。