☆本期内容概要☆
上期代码修正
数组元素内容比较(2种方法)
在上期的文章中,我们的代码部分有一点小bug:
原代码33行、50行IF语句InStr函数的第2个参数,没有加限定符:
原代码第45行SQL语句,没有加末级科目的条件:
大家猜猜会不会有什么问题?还是举个简单的例子说明吧:
新代码:
……
If InStr(strCheck, "/" & xlTitle(i) & "/") = 0 Then
……
If InStr(strCheck, "/" & xlData(PosAccCode, k) & "/") = 0 Then
……
arr = clsDQ.GetData("select 科目代码 from tb科目 where 是否末级=True")
改过之后,我把一个科目220301改为2203,结果是这样子的:
当然,这个提示“【2203】科目代码不存在”有点不太准确,应该是提示“【2203】科目代码非末级”,可以实现,但感觉没有必要,不去管它了。
扯远了,回到今天的正题:数组元素内容的比较,也就是检查数组arrA()的各个元素,在arrB()中是否存在,就像上期我们导入凭证的时候,要检查一下导入的科目代码是否已存在,如果不存在,我们要先添加后再导入,否则会引起错乱。
方法我想到2种,一种是用两层循环:
for i=Lbound(arrA) to Ubound(arrA)
t=0
for j=Lbound(arrB) to Ubound(arrB)
if arrA(i)=arrB(j) then
t=1
exit for
end if
next
if t=0 then
msgA=msgA & arrA(i) & "不存在" & chr(10)
esle
msgB=msgB & arrA(i) & "已存在" & chr(10)
end if
next
msgbox msgA & msgB
代码是在这里直接敲的,没有测试,解释一下:
第2种方法,其实就是我们上期、和这期开头修改代码时提到的方法:
strCheck=join(arrB,"/")
strcheck="/" & strcheck & "/" '前后都加上限定符"/"
for i=Lbound(arrA),Ubound(arrA)
if instr(strcheck,"/" & arrA(i) & "/") =0 then
msgA=msgA & arrA(i) & "不存在" & chr(10)
esle
msgB=msgB & arrA(i) & "已存在" & chr(10)
end if
next
msgbox msgA & msgB
这段代码也不复杂,解释一下:
联系客服