Apa yang setara dengan "! =" Di Excel VBA?

95

Masalahnya adalah itu !=tidak berfungsi sebagai fungsi di excel vba.

Saya ingin bisa menggunakan

If strTest != "" Then dari pada If strTest = "" Then

Apakah ada pendekatan lain untuk melakukan ini selain !=?

Fungsi saya untuk meniru !=adalah

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
Ada apa
sumber
1
Apakah kamu yakin itu !=dan tidak <>?
dasblinkenlight
Apa pertanyaan Anda? Mengapa !=tidak berfungsi di vba, atau apa operator ketidaksetaraan di vba?
GSerg

Jawaban:

154

Karena ketimpangan operator di VBA adalah <>

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

operator !=digunakan di C #, C ++.

Steve
sumber
28

Di VBA, !=operator adalah Notoperator, seperti ini:

If Not strTest = "" Then ...
frenchie
sumber
5
Ini salah Notadalah operator inversi logis, yang terkait dengan !bahasa gaya C.
Zev Spitz
7

Hanya sebuah catatan. Jika Anda ingin membandingkan string dengan "", dalam kasus Anda, gunakan

If LEN(str) > 0 Then

atau bahkan hanya

If LEN(str) Then

sebagai gantinya.

Đức Thanh Nguyễn
sumber
6
Saya tahu bagi orang yang agak baru mengenal VBA, jawaban ini mungkin tampak aneh, tetapi ini, percaya atau tidak, JAUH lebih efisien daripada memeriksa<> ""
LimaNightHawk
6
Fakta menarik untuk mendukung jawaban ini: Bahasa Visual Basic dan Pascal menyimpan string dengan panjangnya di awal dan kontennya sendiri tepat setelah itu. Bahasa berbasis C dan Java, sebaliknya, tidak menyimpan panjangnya dan memiliki terminator '\ 0' (null) untuk memberi sinyal bahwa string telah berakhir. Karena itu, mendapatkan panjang di VBA dengan cepat - hanya membaca bilangan bulat dari memori - dan lambat di Java - Anda perlu mengulang melalui string.
Paulo Avelar
1
@LimaNightHawk jauh lebih efisien? Bisakah Anda menjelaskannya? Saya rasa sebagian besar kompiler modern akan menangkap pola <> ""dan menghasilkan kode-p yang sama seperti Len(str).
Roland
@Roland Ini berkaitan dengan bagaimana VBA menyimpan string dalam memori. Aku akan membiarkan Anda Google untuk penjelasan lebih lengkap, tetapi dalam waktu singkat, bagian dari bagaimana string disimpan adalah bahwa byte pertama menyimpan panjang string, maka byte berikut menyimpan karakter: [3][C][A][T]. Sebuah string "kosong" memiliki [0]untuk byte pertama dan memeriksa Lenmemungkinkan kode untuk memeriksa dan membandingkan Integer. Selain itu, ketika Anda melakukan = ""yang kedua ""harus dialokasikan sebagai stringnya sendiri terlebih dahulu di memori, kemudian dibandingkan dengan string target Anda.
LimaNightHawk
@Roland: Itu akan menjadi pengoptimalan yang mudah, tetapi, tampaknya, compiler VBA tidak melakukannya. Seseorang melakukan benchmark dengan hasil Len(str) > 0sekitar dua kali lebih cepat str <> ""dari 10 juta iterasi. Yang mengatakan, kita berbicara tentang pengoptimalan mikro ekstrim di sini (0,36 vs 0,72 detik untuk 10 juta iterasi), jadi saya pasti akan tetap menggunakan yang lebih mudah dibaca str <> "".
Heinzi
2

Coba gunakan, <>bukan !=.

pengguna1745872
sumber