Lebih
Cara cek array kosong di vba macro
Saya ingin cek kosong array. Google memberiku beragam solusi tapi tidak ada yang berhasil. Mungkin aku tidak menerapkannya dengan benar.
Function GetBoiler(ByVal sFile As String) As String
'Email Signature
Dim fso As Object
Dim ts As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Set ts = fso.GetFile(sFile).OpenAsTextStream(1, -2)
GetBoiler = ts.ReadAll
ts.Close
End Function
Dim FileNamesList As Variant, i As Integer
' activate the desired startfolder for the filesearch
FileNamesList = CreateFileList("*.*", False) ' Returns File names
' performs the filesearch, includes any subfolders
' present the result
' If there are Signatures then populate SigString
Range("A:A").ClearContents
For i = 1 To UBound(FileNamesList)
Cells(i + 1, 1).Formula = FileNamesList(i)
Next i
SigString = FileNamesList(3)
If Dir(SigString) <> "" Then
Signature = GetBoiler(SigString)
Else
Signature = ""
End If
Di sini jika FileNamesList
array kosong, GetBoiler(SigString)
tidak boleh disebut sama sekali. Ketika FileNamesList
array kosong, SigString
juga kosong dan ini panggilan GetBoiler()
fungsi dengan string kosong. Saya mendapatkan error di line
Set ts = fso.GetFile(sFile).OpenAsTextStream(1, -2)
sejak sFile
kosong. Cara untuk menghindari itu?
57
23
Sebagai anda berurusan dengan sebuah string array, anda dianggap Bergabung?
Pergi dengan triple negatif:
Atau hanya:
Di VB, untuk alasan apapun,
Tidak myArray
kembali SafeArray pointer. Untuk uninitialized array, ini akan mengembalikan -1. Anda dapatTidak
ini untuk XOR dengan -1, sehingga kembali nol, jika anda lebih suka.Source
Jika anda tes pada sebuah array dengan fungsi it'll bekerja untuk semua batas-batas:
Aku melihat jawaban yang sama di sini... tapi bukan milikku...
Ini adalah bagaimana saya unfortunatley akan berurusan dengan itu... saya suka len(bergabung(arr)) > 0 pendekatan, tapi itu tidak't bekerja jika array adalah sebuah array dari emptystrings...
Ketika menulis VBA ada kalimat ini di kepala saya: "Bisa jadi mudah, tapi..."
Berikut adalah apa yang saya diadopsi ke:
Kode ini doesn't melakukan apa yang anda harapkan:
Jika anda melewati sebuah string kosong (
","
) atauvbNullString
untukDir
, itu akan mengembalikan nama file dalam direktori saat ini jalur (path kembali olehCurDir$
). Jadi, jikaSigString
kosong, andaJika
kondisi akan mengevaluasi untukBenar
karenaDir
akan kembali non-string kosong (nama file dalam direktori saat ini), danGetBoiler
akan disebut. Dan jikaSigString
kosong, panggilan untukfso.GetFile
akan gagal.Anda harus mengubah kondisi anda untuk memeriksa bahwa
SigString
isn't kosong, atau menggunakanFileSystemObject.FileExists
metode bukanDir
untuk memeriksa apakah file ada.Dir
adalah sulit untuk menggunakan justru karena itu hal-hal yang anda mungkin tidak berharap untuk melakukan. Secara pribadi, saya akan menggunakanScripting.FileSystemObject
atasDir
karena ada's tidak ada bisnis lucu (FileExists
mengembalikanTrue
jika file ada, dan, well,False
jika itu doesn't). Apa's lebih,FileExists
mengungkapkan niat kode anda lebih jelas daripadaDir
.Metode 1: Periksa bahwa
SigString
non-kosong pertamaMetode 2: Gunakan
FileSystemObject.FileExists
metodeSaya hanya paste di bawah kode oleh Chip Pearson. Karya pesona. Berikut ini's-nya halaman pada fungsi array.
Saya harap ini membantu.
Auth paling dekat tapi jawabannya melempar kesalahan type mismatch.
Adapun jawaban yang lain anda harus menghindari menggunakan sebuah kesalahan untuk menguji kondisi, jika anda bisa, karena setidaknya itu mempersulit debugging (apa yang jika ada sesuatu yang lain yang menyebabkan kesalahan itu).
Berikut ini's sederhana, solusi lengkap:
Modern periksa Array Kosong:
Berdasarkan ahuth's jawaban;
Periksa array kosong;
is_empty = AryLen(some_array)=0
Anda dapat menggunakan fungsi di bawah ini untuk memeriksa apakah varian atau string array kosong di vba
Metode lain yang akan melakukannya lebih cepat. Anda dapat membuat sebuah variabel Boolean dan set ke true setelah anda memuat data ke array. jadi semua yang anda benar-benar butuhkan adalah sederhana jika pernyataan ketika anda memuat data ke dalam array.
Berikut adalah cara lain untuk melakukannya. Saya telah digunakan dalam beberapa kasus dan's bekerja.
Mungkin
ubound
crash dan itu tetap benar, dan jikaubound < lbound
, it's kosongUntuk memeriksa apakah sebuah Byte array kosong, cara paling sederhana adalah dengan menggunakan fungsi VBA
StrPtr()
.Jika Byte array kosong,
StrPtr()
kembali0
; jika tidak, mengembalikan nilai non-nol (namun, hal's alamat elemen pertama).Namun, ini hanya bekerja dengan Byte array.
Anda dapat memeriksa count.
Di sini cid adalah sebuah array.
Saya harap ini membantu. Have a nice day!
Anda dapat memeriksa jika array kosong dengan mengambil total elemen menghitung menggunakan JScript's
VBArray()
objek (bekerja dengan array jenis varian, single atau multidimensi):Bagi saya itu membutuhkan waktu sekitar 0.3 mksec untuk setiap elemen + 15 msec inisialisasi, sehingga para 10M elemen membutuhkan waktu sekitar 3 detik. Fungsi yang sama dapat dilaksanakan melalui
ScriptControl
ActiveX (hal ini tidak tersedia dalam 64-bit MS Office versi, sehingga anda dapat menggunakan solusi seperti ini).Secara pribadi, saya pikir salah satu dari jawaban di atas dapat dimodifikasi untuk memeriksa jika array memiliki isi:
Ini menangani negatif nomor referensi dan membutuhkan waktu kurang dari beberapa pilihan lainnya.
I'll menggeneralisasi masalah dan Pertanyaan seperti yang dimaksudkan. Tes assingment pada array, dan akhirnya menangkap kesalahan
Yakin itu meleset array dengan semua negatif indeks atau semua > 1... apakah itu mungkin? di weirdland, ya.