【问题标题】:Print VBA Array in to Excel Cells将 VBA 数组打印到 Excel 单元格
【发布时间】:2013-02-22 20:03:30
【问题描述】:

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

【问题讨论】:

  • 能否提供一些示例数据?
  • 月:1-12,参考 Et:0.4,降水:0.07,fc:0.3,pwp=0.1,WC(i)=0.15。我不知道提供数据的更好方法??

标签: vba excel


【解决方案1】:

它的application.transpose而不是worksheetfunction

  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 中创建的数组,你会得到一个错误。当您单步执行代码时,可以在本地窗口中看到其原因。当您运行创建数组的子程序时,它将显示在本地,当子程序结束时它将消失,这意味着它不再存储在内存中。要从另一个 sub 引用变量或数组,您必须传递它。

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

【讨论】:

  • 不,application.Tanspose 不起作用。它是在 VBA 中创建的数组
  • 我认为我已经对您向我推荐的代码进行了正确的调整(请参阅原始帖子中的编辑),但是它仍然无法正常工作。我这样做对吗?
  • 有错误吗?您可能会遇到使用未分配给工作表的范围的问题。例如sheets("sheet1").range("A1:A5").value = application.transpose(wc)
  • 是的,这与我之前遇到的错误相同——过程无效或调用错误。如果我将其更改为 "Sheets("sheet1").Range("M5:M22").Value = Application.Transpose(WC)" 我仍然会遇到同样的错误。
  • 我已将其声明为全局。我在上面包含并编辑了我的完整代码。
【解决方案2】:

你的PrecipRefET 总是相等的,这是不是这样?

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

此外,当您设置 RunoffPercolation 数组时,如果您的 if 语句不满足(如下),它们不会被设置为任何内容,我可以通过提供的数据来满足它:

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'd RunoffPercolation 变量。 您需要将以下内容添加到您的 WaterBalanceRead 子中。

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

【讨论】:

  • 感谢您发现数据读取错误!如果我使用我提供给你的数据,我的数组仍然不会设置?
  • @user1977802 - 最后一行修复了我的!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-19
  • 2013-09-03
  • 2017-12-18
  • 1970-01-01
相关资源
最近更新 更多