检测代码不工作

我有一段使用端口代码来识别交易区域的代码。 在大多数情况下,它工作正常,但其中一个例外是不正确的识别。

实质上,当交易是EU-NA ,目的地在加勒比(在Range("RegionNACar")中以斜杠分隔的列表)时,它应该select" to NA EC"作为后缀( sSufTo )。 唯一的例外是,如果源端口是"ESSDR" ,在这种情况下,它应该恢复到" to NA GL"的默认后缀(之前成功识别)。

使用的主要function是Contains_Keyword ,在模块的其余部分广泛使用,通常工作正常:

 Function Contains_Keyword(sDescr As String, sKeywords As String) As Boolean Dim A() As String, bIsIn As Boolean, i As Integer A = Split(sKeywords, "/") bIsIn = False For i = LBound(A) To UBound(A) If InStr(1, sDescr, A(i)) Then bIsIn = True Exit For Else End If Next i Contains_Keyword = bIsIn End Function 

这被称为这行(主要使用没有.Value ,但我添加它,看看它会帮助):

 If sTrade = "EU-NA" And Contains_Keyword(UCase(sPODCo), Range("RegionNACar").Value) _ And Not (UCase(sPOL) = "ESSDR") Then sSufTo = " to NA EC" 

我已经在Range("RegionNACar").Value上设置了一个监视Range("RegionNACar").Value在该子本身中的Range("RegionNACar").Value和在该函数内的sKeywords中的值; 当它从手表中获取正确的数据时, sKeywords最终从Range("RegionSAEC")获取数据,并存储在其上方的单元格中。 我已经检查了范围名称和参考,他们都是正确的。

任何人都可以发现什么是错的? 我必须俯视一些东西,但我不能为了我的生活找出什么

那么,它不能解释发生了什么问题,或给我一个很好的优雅的单线解决scheme,但我现在已经使用了这个解决方法:

 If sTrade = "EU-NA" And Contains_Keyword(UCase(sTo), Range("RegionNACar").Value) Then sSufTo = " to NA EC" If UCase(sPOL) = "ESSDR" Then If Contains_Keyword(UCase(sTo), Range("RegionNACar")) Then sSufTo = " to NA GL" End If 

这不是干净的,但它的工作原理。 (就目前而言,据我所知)