2016-01-21 6 views
0

У меня есть случай выбора, который предназначен для поиска и поиска установленных точных случаев. Что меня озадачивает, это его выполнение в случаях, которые имеют 2 цифры, но не на ячейках с одной цифрой. Толком говоря, случай «B» и «C» выполняется в другом заявлении вместо соответствующих случаев, любые указатели будут оценены ...VBA select case, игнорирующий ячейки с одной цифрой (LEN)

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 
+0

Пожалуйста, заполните полную функцию. – RLH

+0

У вас определенно есть непечатаемые символы в столбце E. Итак, у вас есть как «B» что-то после него, пробелы или другие непечатаемые символы. В пустом столбце положите '= TRIM (CLEAN (E1)) и скопируйте. Затем скопируйте и вставьте значения только этого столбца над столбцом E. –

ответ

1

Попробуйте изменить ваш выбор, чтобы:

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

и второй выбрать

Trim(contTypeRange) 

Похоже, что вы могли бы иметь дополнительные пробелы. Если это не сработает, проверьте значение contTypeRange на длину, чтобы увидеть, есть ли в нем какие-то странные символы ...

+0

Это все равно даст 2 буквы вместо 1, которые никогда не будут работать –

+0

Если второй символ - это пробел, он получит 1 символ. – PKatona

+0

, что совершенно неверно - сделайте это в ближайшем окне: «? Len (Left (« b », 2))', и вы увидите, что длина по-прежнему равна 2, потому что она возвращает «b» * и * пробел –

3
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 заявления

+0

Хммм ... просто попробовал '? ucase (слева («b», 2)) = «B» 'в непосредственном окне, и оно вернулось. –

+0

Он говорит, что он выполняется на «E», но не распознает «B» или «C» во втором select, ergo, есть что-то в contTypeRange (возможно, «B» или какой-то другой символ). – PKatona

+0

@ScottCraner, но знаем ли мы, что ячейка содержит только букву «B»? –

2

Вы уверены, что «В» и «С» выполнены в другом? Вы можете написать в ELSE

debug.print contTypeRange debug.print len(contTypeRange)

только чтобы увидеть, что это возвращение?

+0

@PKatona, ваше решение сработало, спасибо! и всем, кто внес свой вклад, я узнал намного больше способов отладки от всех вас, спасибо, спасибо, спасибо! – joes

Смежные вопросы