Много-зависимые проблемы ComboBox - PullRequest
0 голосов
/ 15 апреля 2020

Я пытаюсь создать генератор болтов в Solidworks с помощью API. Одна из пользовательских форм, которую я сделал, создает болт с цилиндрической головкой IAW ISO 4762. На данный момент у меня есть 3 комбинированных блока; Выбор номинального диаметра болта, выбор длины болта и выбор длины резьбы.

Значение, отображаемое при выборе длины резьбы, зависит от значения, выбранного в секции болта, а значение, отображаемое в секции болта, зависит от номинального диаметра болта. Это делает выбор потока зависимым от обоих значений предыдущих комбинированных списков. Код, который я написал ниже:


Private Sub SSocketl_Change()

SSockett.Clear 'Clears the contents of SSockett whenever SSocketl changes selection

If SSocketd.Text = "M2.5" Then             'Nominal Bolt Diameter
        If SSocketl.Value = "25" Then      'Bolt Length
                SSockett.AddItem ("17")    'Thread Length

End If

        If SSocketl.Value <= "20" Then     'Bolt Length
               SSockett.AddItem ("Full")   'Thread Length
    End If
End If

Если пользователь выбирает диаметр M2,5 и длину болта 25 мм, длина резьбы должна быть 17 мм (это работает). Если длина болта меньше 20 мм, длина резьбы должна быть «Полная» (это также работает), если длина болта не меньше 10 мм, в этом случае поле длины резьбы остается пустым, когда должно быть указано «Полная».

Может кто-нибудь предложить какой-либо совет или решение этой проблемы? Кажется, не поддается логи c

Спасибо

Алекс

1 Ответ

0 голосов
/ 15 апреля 2020

Вы сравниваете строки, а не числа («20» вместо 20). При сравнении строк; VBA использует порядок сортировки, чтобы определить, какой из них больше. Вот почему, если вы проверите «9» <«20», это будет ложно. См. Ссылка <a href="https://docs.microsoft.com/en-us/dotnet/visual-basic/programming-guide/language-features/operators-and-expressions/comparison-operators" rel="nofollow noreferrer"> Операторы сравнения для получения более подробной информации.

Если ваши сохраненные значения являются цифрами c, то вы можете сравнить числа, удалив двойные кавычки:

If SSocketl.Value <= 20 Then

Если ваши сохраненные значения являются строками, то вы можете использовать Val (), чтобы интерпретировать строку как число и, таким образом, иметь возможность сравнивать числа:

If Val(SSocketl.Value) <= 20 Then
...