Excel VBA: Memberikan nilai array sebagai batas 'untuk loop'

Saya menghadapi 'Kesalahan kompilasi: Kesalahan sintaksis' ketika saya menjalankan kode berikut:

c_bound_h() adalah array dengan indeks dari 0 hingga j. Mari kita asumsikan nilai j adalah 3 (untuk contoh ini) dan nilai di dalamnya diberikan di bawah ini. Data di baris lembar diurutkan berdasarkan batas ini. misal dari baris2 sampai baris1507 = 'Nilai 1', baris 1508 sampai baris3013 = 'Nilai 2', dan seterusnya.

Saya ingin mengulang setiap kelas data, dengan melewati batasan ini di loop For. Tapi, itu memberikan kesalahan sintaksis.

j = 3

c_bound_h(0) = 2
c_bound_h(1) = 1508
c_bound_h(2) = 3014
c_bound_h(3) = 4519

'Saya ingin mengulang setiap kelas data, dengan melewati batasan ini di perulangan For. Tapi, itu memberikan kesalahan sintaksis.

For L = 0 To j

    For c_bound_h(L) To c_bound_h(L+1)-1

Next L

person user3790349    schedule 30.06.2014    source sumber


Jawaban (4)


Ubah kode sebagai berikut:

For L = 0 To j

    For K= c_bound_h(L) To c_bound_h(L+1)-1
    Next K

Next L
person Tarik    schedule 30.06.2014

Gunakan Untuk L = 1 sampai J-1....

Karena c_bound_h(L+1) sebaliknya akan berada di luar batas

person Dan Savage    schedule 30.06.2014

Apakah Anda mendeklarasikan c_bound_h sebagai bilangan bulat?

Saya memasukkan kode ini ke dalam buku kerja dan berfungsi dengan baik untuk saya :-

Sub test()

j = 3

Dim c_bound_h(4) As Integer

c_bound_h(0) = 2
c_bound_h(1) = 1508
c_bound_h(2) = 3014
c_bound_h(3) = 4519


For L = 0 To j

    For k = c_bound_h(L) To c_bound_h(L + 1) - 1
        MsgBox ("pass")
    Next k

Next L



End Sub
person Community    schedule 30.06.2014

Perlu mencegah perulangan yang tidak perlu dengan membandingkan 2 nilai sekaligus, tetapi tidak melampaui batas array. Ini didasarkan pada kode 'Don Relentless', tetapi sedikit dimodifikasi.

Sub test()

j = 3

Dim c_bound_h(0 to 3) As Integer

c_bound_h(0) = 2
c_bound_h(1) = 1508
c_bound_h(2) = 3014
c_bound_h(3) = 4519

For L = 1 To j

    For k = c_bound_h(L-1) To c_bound_h(L) - 1
        debug.print "pass row " & k
    Next k

Next L

End Sub
person CoveGeek    schedule 30.06.2014