Saya memiliki variabel global yang merupakan turunan dari kelas khusus saya.
Bagaimana cara memeriksa apakah objek telah disetel atau jika saya perlu memulainya?
If obj Is Nothing Then
' need to initialize obj: '
Set obj = ...
Else
' obj already set / initialized. '
End If
Atau, jika Anda lebih suka sebaliknya:
If Not obj Is Nothing Then
' obj already set / initialized. '
Else
' need to initialize obj: '
Set obj = ...
End If
obj Is Nothing
TIDAK sama dengan memeriksaIsNothing(obj)
! Terima kasih atas sintaks yang benar untuk memeriksa ini ... tidak yakin mengapaIsNothing()
berperilaku berbeda ...Not (obj Is Nothing)
lebih mudah untuk memahami daripadaNot obj Is Nothing
. Otak saya tidak tahu apa itu "Not obj"!Cara (tidak) aman untuk melakukan ini - jika Anda setuju dengan tidak menggunakan opsi eksplisit - adalah ...
Not TypeName(myObj) = "Empty"
Ini juga menangani kasus jika objek belum dideklarasikan. Ini berguna jika Anda hanya ingin mengomentari deklarasi untuk menonaktifkan beberapa perilaku ...
Dim myObj as Object Not TypeName(myObj) = "Empty" '/ true, the object exists - TypeName is Object 'Dim myObj as Object Not TypeName(myObj) = "Empty" '/ false, the object has not been declared
Ini berfungsi karena VBA akan membuat instance variabel yang tidak dideklarasikan secara otomatis sebagai jenis Varian Kosong. Ini menghilangkan kebutuhan akan Boolean tambahan untuk mengelola perilaku.
sumber
Option Explicit
. Itu tidak menghasilkan apa-apa kecuali masalah. Untuk "mengganti" perilaku, gunakan Kompilasi Bersyarat.