将VBA阵列打印到Excel单元格中

时间:2013-02-22 20:03:31

标签: excel vba excel-vba

我正在尝试将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

2 个答案:

答案 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结束时它将消失,这意味着它不再存储在内存中。要从另一个子引用变量或数组,您必须传递它。

传递数组或变量可以通过不同的方式完成,这里有几个链接 Here And Here

答案 1 :(得分:1)

您的PrecipRefET始终是平等的,这是真的吗?

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

此外,当您设置RunoffPercolation数组时,如果不满足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

执行此操作后,我发现您ReDimRunoff变量没有Percolation 您需要将以下内容添加到WaterBalanceRead子。

ReDim Runoff(1 To NumMonth + 1)
ReDim Percolation(1 To NumMonth + 1)