我正在尝试将VBA创建的数组打印到Excel电子表格的单元格中。渗透和径流值会导致“下标超出范围”错误我是否正确创建了软管阵列?我已将计算和打印子功能合并为一个。
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
答案 0 :(得分:2)
它的application.transpose而不是workheetfunction
Range(Cells(rw, col), Cells(rw + NumMonth - 1, col)).Value = _
application.Transpose(WC)
这是一个测试子
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
如果您调用在另一个子组件中创建的阵列,则会出现错误。当您单步执行代码时,可以在本地窗口中看到这个原因。当你运行创建数组的sub时,它将以locals显示,当sub结束时它将消失,这意味着它不再存储在内存中。要从另一个子引用变量或数组,您必须传递它。
答案 1 :(得分:1)
您的Precip
和RefET
始终是平等的,这是真的吗?
Precip(i) = Cells(4 + i, 2).Value
RefET(i) = Cells(4 + i, 2).Value
此外,当您设置Runoff
和Percolation
数组时,如果不满足if语句(下面),则它们不会被设置为任何内容,并且我可以使用提供的数据来满足它: / p>
If (fc - WC(j - 1) + RefET(i) * dz < Precip(i) * dz) then
我会添加一些内容以确保其中始终有值:
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
执行此操作后,我发现您ReDim
和Runoff
变量没有Percolation
。
您需要将以下内容添加到WaterBalanceRead
子。
ReDim Runoff(1 To NumMonth + 1)
ReDim Percolation(1 To NumMonth + 1)