Что эквивалентно «! =» В Excel VBA?

95

Проблема в том, что !=не работает функция в excel vba.

Я хочу иметь возможность использовать

If strTest != "" Then вместо того If strTest = "" Then

Есть ли другой подход к этому !=?

Моя функция мимических !=IS

Sub test()

Dim intTest As Integer
Dim strTest As String

intTest = 5

strTest = CStr(intTest) ' convert

Range("A" + strTest) = "5"



    For i = 1 To 10
        Cells(i, 1) = i

        If strTest = "" Then
            Cells(i, 1) = i
        End If

    Next i


End Sub
Что происходит
источник
1
Вы уверены, что это !=и нет <>?
dasblinkenlight
Какой у Вас вопрос? Почему !=не работает в vba, или что такое оператор неравенства в vba?
GSerg
1
duckduckgo.com/?q=VBA+comparison+operators
Жан-Франсуа Корбетт

Ответы:

154

Поскольку оператор неравенства в VBA имеет вид <>

If strTest <> "" Then
    .....

оператор !=используется в C #, C ++.

Стив
источник
28

В VBA !=оператором является Notоператор, например:

If Not strTest = "" Then ...
француженка
источник
5
Это неверно. Notявляется оператором логической инверсии, который соответствует !в языках C-стиля.
Zev Spitz
7

Просто примечание. Если вы хотите сравнить строку "", в вашем случае используйте

If LEN(str) > 0 Then

или даже просто

If LEN(str) Then

вместо.

C Thanh Nguyễn
источник
6
Я знаю, что для людей, <> ""
плохо знакомых
6
Интересный факт, подтверждающий этот ответ: языки Visual Basic и Pascal хранят строки с указанием их длины в начале и самого содержимого сразу после этого. С другой стороны, языки на основе C и Java не хранят длину и имеют признак конца строки '\ 0' (ноль), сигнализирующий о завершении строки. Из-за этого получение длины в VBA происходит быстро - он просто читает целое число из памяти - и медленно в Java - вам нужно перебирать строку.
Пауло Авелар
1
@LimaNightHawk намного эффективнее? Не могли бы вы рассказать об этом подробнее? Я предполагаю, что большинство современных компиляторов поймают шаблон <> ""и выдадут тот же p-код, что и Len(str).
Роланд
@Roland Это связано с тем, как VBA хранит строки в памяти. Я дам вам Google для более полного объяснения, но в общем, часть того , как строки хранятся в том , что первые байты хранения длины строки, то следующие байты хранить символы: [3][C][A][T]. «Пустая» строка имеет [0]первые байты, и проверка Lenпозволяет коду просто проверять и сравнивать целые числа. Кроме того, когда вы делаете это, = ""эта вторая ""должна сначала выделяться как собственная строка в памяти, а затем сравниваться с вашей целевой строкой.
LimaNightHawk
@Roland: Это была бы простая оптимизация, но, по-видимому, компилятор VBA этого не делает. Кто-то провел тест с результатом Len(str) > 0примерно в два раза быстрее, чем str <> ""за 10 миллионов итераций. Тем не менее, мы говорим здесь об экстремальной микрооптимизации (0,36 против 0,72 секунды для 10 миллионов итераций), поэтому я определенно буду придерживаться более удобочитаемой str <> "".
Heinzi
2

Попробуйте использовать <>вместо !=.

user1745872
источник