VBAselect案例忽略单个数字(LEN)单元格

我有一个select案例,这意味着要查找和设置确切的案例。 令我困惑的是,它在具有2位数的情况下执行,而不是在单个数字单元格上执行。 显然,情况“B”和“C”在执行else语句,而不是他们各自的情况下,任何指针将不胜感激…

Public Function cartMaxCalc(i As Long) Dim contQty Set contQty = Cells(i, 6) Dim contTypeRange Set contTypeRange = Cells(i, 5) Dim cartMx As Long 'determine category by first digit of cell Select Case UCase(Left(Cells(i, 11).Value, 2)) Case "E" Select Case contTypeRange Case "B", "J3", "B0" ' "B" is not recognized cartMx = 4 * contQty Case "C", "C0", "J2", "B2" ' "C" is not recognized cartMx = 8 * contQty Case "C2", "J1", "j4" cartMx = 16 * contQty Case "D1" cartMx = 24 * contQty Case "XX", "ZZ" cartMx = 0 Case Else '"B" and "C" execute here cartMx = contQty End Select Case "G", "P" Select Case contTypeRange Case "B", "J3", "B0", "D1" 'do nothing Case "C", "C0", "J2" cartMx = 6 * contQty Case "C2", "J1" cartMx = 12 * contQty Case "XX", "ZZ" cartMx = 0 Case Else cartMx = contQty End Select Case "A", "A3", "B", "B", "C", "C3", "D", "D3", "D4" Select Case contTypeRange Case "C", "C0", "J2", "B2" cartMx = 2 * contQty Case "C2", "J1" cartMx = 4 * contQty Case "D1" cartMx = 6 * contQty Case Else cartMx = contQty End Select Case "T", "F", "R", "L" Select Case contTypeRange Case "B", "J3", "B0" cartMx = 2 * contQty Case "C", "C0", "J2", "B2" cartMx = 4 * contQty Case "C2", "J1" cartMx = 8 * contQty Case "D1" cartMx = 12 * contQty Case "XX", "ZZ" cartMx = 0 Case Else cartMx = contQty End Select Case Else cartMx = 1 * contQty End Select cartMaxCalc = cartMx End Function 

尝试修改您的select:

 Trim(UCase(Left(Cells(i, 11).Value, 2))) 

和第二个select

 Trim(contTypeRange) 

看起来你可能有额外的空间。 如果这不起作用,然后检查contTypeRange值的长度,看看是否有一些奇怪的字符…

 Select Case UCase(Left(Cells(i, 11).Value, 2)) '// <~~ Get 2 characters from left Case "E" '// <~~ Only 1 character long - will never be equal Select Case contTypeRange '// <~~ this would never be reached 

这是得到Cells(i, 11)的前两个字符永远不会评估为"E"所以我不相信,执行发生在嵌套的Select Case语句内的任何地方

你确定“B”和“C”在else中被执行吗? 你可以写在其他地方吗?

debug.print contTypeRange debug.print len(contTypeRange)

只是为了看看它是什么回来?