Cetak Array VBA ke Sel Excel

Saya mencoba mencetak array yang dibuat VBA ke dalam sel spreadsheet excel. Nilai Perkolasi dan Limpasan terus mendapatkan kesalahan "subskrip di luar jangkauan" Apakah saya membuat susunan selang dengan benar? Saya telah menggabungkan sub fungsi perhitungan dan pencetakan menjadi satu.

 NumMonth = 12
 Dim col As Long
 Dim rw As Long
 rw = 4
 col = 13

 Range(Cells(rw, col), Cells(rw + NumMonth - 1, col)).Value = _
    Application.Transpose(WC)

Range(Cells(rw, col + 1), Cells(rw + NumMonth - 1, col + 1)).Value = _
    Application.Transpose(Runoff)

   Range(Cells(rw, col + 2), Cells(rw + NumMonth - 1, col + 2)).Value = _
     Application.Transpose(Percolation)
   End Sub

person user1977802    schedule 22.02.2013    source sumber
comment
bisakah Anda memberikan beberapa contoh data?   -  person glh    schedule 23.02.2013
comment
Bulan:1-12, Ref Et:0.4, Precip: 0.07, fc:0.3, pwp=0.1, WC(i)=0.15. Saya tidak tahu cara yang lebih baik untuk memberikan data??   -  person user1977802    schedule 23.02.2013


Jawaban (2)


Precip dan RefET Anda selalu sama, apakah hal ini harus terjadi?

Precip(i) = Cells(4 + i, 2).Value
RefET(i)  = Cells(4 + i, 2).Value

Selain itu, saat Anda menyetel array Runoff dan Percolation, array tersebut tidak akan disetel ke apa pun jika pernyataan if Anda tidak terpenuhi (di bawah), dan saya dapat memenuhinya dengan data yang disediakan:

If (fc - WC(j - 1) + RefET(i) * dz < Precip(i) * dz) then

Saya akan menambahkan sesuatu untuk memastikan selalu ada nilai di dalamnya:

If (fc - WC(j - 1) + RefET(i) * dz < Precip(i) * dz) Then
    Runoff(i) = (Precip(i) - (fc - WC(j - 1) + RefET(i)) * dz) * 0.5
    Percolation(i) = (Precip(i) - (fc - WC(i - 1) + RefET(i)) * dz) * 0.5
    WC(j) = fc
Else
    Runoff(i) = 0
    Percolation(i) = 0
    WC(j) = WC(j - 1) + Precip(i) - RefET(i) / dz
End If

Setelah melakukan ini, saya mengetahui bahwa Anda belum ReDim memasukkan variabel Runoff dan Percolation. Anda perlu menambahkan yang berikut ini ke sub WaterBalanceRead Anda.

ReDim Runoff(1 To NumMonth + 1)
ReDim Percolation(1 To NumMonth + 1)
person glh    schedule 23.02.2013
comment
Terima kasih telah mengetahui kesalahan pembacaan data itu! Jika saya menggunakan data yang saya berikan kepada Anda, array saya masih belum disetel? - person user1977802; 23.02.2013
comment
@ user1977802 - baris terakhir memperbaiki milik saya! - person glh; 23.02.2013

Aplikasinya.transpose alih-alih fungsi lembar kerja

  Range(Cells(rw, col), Cells(rw + NumMonth - 1, col)).Value = _
      application.Transpose(WC)

Ini adalah sub uji

Sub test()
Dim myarray As Variant

'this is a 1 row 5 column Array
myarray = Array(1, 2, 3, 4, 5)

'This will fail because the source and destination are different shapes
Range("A1:A5").Value = myarray


'If you want to enter that array into a 1 column 5 row range like A1:A5

Range("A1:A5").Value = Application.Transpose(myarray)
End Sub

Anda akan mendapatkan kesalahan jika memanggil array yang Anda buat di sub lain. Alasannya dapat dilihat di jendela lokal saat Anda menelusuri kode Anda. Saat Anda menjalankan sub yang membuat array Anda, sub tersebut akan ditampilkan di lokal, ketika sub berakhir, sub tersebut akan hilang, artinya tidak lagi disimpan di memori. Untuk merujuk ke variabel atau array dari sub lain, Anda harus meneruskannya.

Melewati array atau variabel dapat dilakukan dengan berbagai cara berikut beberapa tautannya Di sini Dan Di Sini

person scott    schedule 22.02.2013
comment
Tidak, application.Tanspose tidak berfungsi. Ini adalah array yang dibuat di VBA - person user1977802; 23.02.2013
comment
Saya rasa saya telah membuat penyesuaian yang benar yang Anda rekomendasikan kepada saya kode (lihat editan di postingan asli) namun, masih tidak berfungsi. Apakah saya melakukan ini dengan benar? - person user1977802; 23.02.2013
comment
Apakah ada kesalahan? Anda mungkin mengalami masalah dalam menggunakan rentang yang tidak ditetapkan ke sheet.. seperti sheets("sheet1").range("A1:A5").value = application.transpose(wc) - person scott; 23.02.2013
comment
ya, itu adalah kesalahan yang sama yang saya dapatkan sebelumnya - prosedur tidak valid atau kesalahan panggilan. Jika saya mengubahnya menjadi Sheets(sheet1).Range(M5:M22).Value = Application.Transpose(WC) saya masih mendapatkan kesalahan yang sama. - person user1977802; 23.02.2013
comment
oke, sepertinya Anda mengacu pada array yang Anda buat di sub lain, ini akan menyebabkan kesalahan. Saya mendapatkan kesalahan kompilasi, apakah Anda mengaktifkan opsi eksplisit? - person scott; 23.02.2013
comment
Ya. Saya mengaktifkan opsi eksplisit. ya, array saya dibuat di sub yang berbeda, saya telah membuat sub hanya untuk mencetaknya. - person user1977802; 23.02.2013
comment
@ pengguna1977802. Untuk meneruskan array WC ke sub lainnya, Anda harus memastikan variabel ini didefinisikan sebagai global di luar semua sub. Ini akan menyimpan pembaruan Anda ke variabel - person glh; 23.02.2013
comment
Saya telah mendeklarasikannya sebagai global. Saya telah memasukkan dan mengedit kode lengkap saya di atas. - person user1977802; 23.02.2013
comment
Saya telah menggabungkan sub fungsi perhitungan dan pencetakan saya. Tampaknya semuanya tercetak dengan benar kecuali Perkolasi() dan Limpasan(). Apakah saya membuat array tersebut dengan benar? - person user1977802; 23.02.2013