Если функция для сравнения 2 двух с одинаковыми текстами, разные значения - PullRequest
0 голосов
/ 07 мая 2020

Две мои переменные, PackageOptions и cell.Value, имеют одинаковые тексты, но разные значения. Есть ли способ отформатировать их так, чтобы код переходил в оператор if? Я пробовал использовать форматирование Trim $ и ascii, но не понимаю, как его форматировать.

Первая строка - это тип PackageOptions, вторая строка - это тип PackageOptions

enter image description here

переменная извлекается из списка:

Dim PackageOptions
Dim Customer As String
Dim PreferredDate As String
Dim ServicesLine1 As String
Dim PackageOptions As String
Dim GoogleR As Byte
Dim InvoiceR As Byte

For i = 0 To LbCustomer.ListCount - 1
    If LbCustomer.Selected(i) Then
        Customer = Customer & LbCustomer.List(i) & vbNewLine
        PreferredDate = PreferredDate & LbCustomer.List(i, 1) & vbNewLine
        ServicesLine1 = ServicesLine1 & LbCustomer.List(i, 2) & vbNewLine
        **PackageOptions** = PackageOptions & LbCustomer.List(i, 3) & vbNewLine
        GoogleR = GoogleR & LbCustomer.List(i, 4) & vbNewLine  '
        InvoiceR = InvoiceR & LbCustomer.List(i, 5) & vbNewLine  
    End If
Next i

Dim PrRange As Range
Dim cell As RangeSet PrRange = shPrice.Range("PricingTable[Item]")
Dim ItemRange As Range
Set ItemRange = shPrice.Range("PricingTable[Item Number]")

>looping through a table column, return the row and item number of match
>the variables have different values (shown in images attached)
For Each cell In PrRange
         If PackageOptions = cell.Value Then
         ItemR = cell.Row - shPrice.Range("PricingTable[[#Headers],[Item]]").Row
         ItemNumber = shPrice.Range("PricingTable[Item Number]").Cells(ItemR, 1).Value
         End If

Next cell

Ответы [ 2 ]

0 голосов
/ 07 мая 2020

Завершающее «1310» в версии вашей строки в кодировке ascii PackageOptions2 представляет комбинацию возврата каретки + NewLine (то же, что и константа VBA vbCrLf).

Это потому, что вы добавил , когда вы использовали

PackageOptions = PackageOptions & LbCustomer.List(i, 3) & vbNewLine

На Windows vbNewLine совпадает с vbCRLf. Непонятно, почему вы добавляете это - собираете ли вы несколько значений в каждой из этих переменных, когда вы l oop над списком?

Попробуйте либо не добавлять vbNewLine, либо что-то вроде

If Replace(PackageOptions, vbNewLine) = cell.Value Then
0 голосов
/ 07 мая 2020

Я не совсем понимаю, что вы имеете в виду, тем более что вы не говорите, какая ошибка возникает в какой строке вашего кода. Возможно, ваша жалоба заключается в том, что сравнение не дает ожидаемого результата. В любом случае, ваша переменная PackageOptions имеет переменную типа данных Variant, содержащую строку, которая должна содержать именно то, что Cell.Value, хотя ваш вспомогательный экран показывает ее как String.

PackageOptions = cell.Value - очень грубое, но надежное сравнение. Убедитесь, что оба элемента относятся к одному типу данных. Используйте Cstr(PackageOptions), чтобы преобразовать вариант в строку. Возможно, используйте его для обоих значений: Cstr(PackageOptions) = Cstr(cell.Value).

Функция StrComp () дает больше возможностей для настройки, но, как следует из названия, сравнивает две строки. Поэтому результат не будет другим. Функция ниже сравнивает текст без учета регистра. Он вернет 0 (ноль), если обе строки равны.

StrComp(Cstr(PackageOptions), Cstr(cell.Value), VbTextCompare)
...