Saya memiliki loop for atas sebuah array. Yang ingin saya lakukan adalah menguji kondisi tertentu dalam loop dan lompat ke iterasi berikutnya jika benar:
For i = LBound(Schedule, 1) To UBound(Schedule, 1)
If (Schedule(i, 1) < ReferenceDate) Then
PrevCouponIndex = i
Continue '*** THIS LINE DOESN'T COMPILE, nor does "Next"
End If
DF = Application.Run("SomeFunction"....)
PV = PV + (DF * Coupon / CouponFrequency)
Next
Saya tahu saya bisa melakukan:
If (Schedule(i, 1) < ReferenceDate) Then Continue For
tetapi saya ingin dapat merekam nilai terakhir i di variabel PrevCouponIndex.
Ada ide?
Terima kasih
vba
conditional
loops
Richard H.
sumber
sumber
If (Schedule(i, 1) < ReferenceDate) Then Continue For
" Apakah Anda yakin tentang itu?Continue
bukan kata kunci VBA.Jawaban:
Tidak bisakah kamu melakukan sesuatu yang sederhana seperti ini?
sumber
IF
untuk tes jadi ini tidak terlalu mahal. Anda harus meskipun memastikan bahwa hasil yang paling umum adalah bahwaSchedule(i, 1)
kurang dariReferenceDate
untuk menghindari mengeksekusiElse
lebih sering dari yang diperlukan. Jika tidak, gunakan(ReferenceDate>=Schedule(i, 1))
. (jika pengujiannya 50/50 maka tidak perlu pengoptimalan)VBA tidak memiliki
Continue
atau kata kunci lain yang setara untuk segera melompat ke pengulangan berikutnya. Saya akan menyarankan penggunaan yang bijaksanaGoto
sebagai solusi, terutama jika ini hanya contoh yang dibuat-buat dan kode asli Anda lebih rumit:Namun, jika itu benar-benar semua kode Anda, @Brian benar sekali. Letakkan saja
Else
klausa dalamIf
pernyataan Anda dan selesaikan.sumber
On Error Goto
).Continue
pernyataan). Seseorang dapat berargumen bahwa penggunaanContinue
bahasa lain harus dihindari dan oleh karena itu harus dihindari di sini juga. Dalam beberapa hal, tautan yang Anda posting menjelaskan maksud saya. Tautannya keGoTo
pernyataan di VB.Net. VB.Net memiliki penanganan kesalahan terstruktur danContinue For
/Continue Do
pernyataan. Benar-benar tidak perluGoTo
di VB.Net; Saya menduga itu dibiarkan sebagian besar untuk mendukung konversi yang lebih mudah dari kode VBA / VB6 yang ada.GoTo
memiliki keuntungan mengurangi bersarang. Melewati iterasi loop tanpa menambahkan level indentasi adalah, IMO, salah satu dari sedikit penggunaan yang sahGoTo
di VBA / VB6. Terutama jika Anda mengekstrak badan loop ke dalam prosedurnya sendiri .Anda bisa menggunakan semacam
continue
dengan menggunakan nestedDo ... Loop While False
:sumber
Continue For
tidak valid di VBA atau VB6.Dari halaman MSDN ini sepertinya telah diperkenalkan ke VB.Net di VS 2005./Net 2.
Seperti yang dikatakan orang lain sebenarnya tidak ada pilihan selain menggunakan
Goto
atauElse
.sumber
Hai, saya juga menghadapi masalah ini dan saya menyelesaikannya menggunakan kode contoh di bawah ini
sumber
Mungkin mencoba meletakkan semuanya di akhir jika dan menggunakan yang lain untuk melewati kode ini akan membuatnya sehingga Anda tidak dapat menggunakan GoTo.
sumber