【发布时间】:2014-04-24 11:31:51
【问题描述】:
我正在用 VBA 制作数据解析器,以便在另一个程序中输出图表。我制作了这个 vba 代码,它没有指正确的范围。
函数如下:
Function HCAlt(Rng1 As Range, Rng2 As Range, Rng3 As Range, Rng4 As Range) As String
' this function will take columns of data and properly format them for highcharts scatter pairs
Dim retVal As String
Dim i As Integer
Dim startRow As Integer
startRow = Rng1.Row
'if ranges doesn't contains one column and same rows count - return #VALUE error
If Rng1.Rows.count <> Rng2.Rows.count Or _
Rng1.Columns.count <> 1 Or Rng2.Columns.count <> 1 Or Rng3.Rows.count <> Rng2.Rows.count Then
HCAlt = CVErr(xlErrValue)
Exit Function
End If
For i = 0 To Rng1.Rows.count - 1
retVal = retVal & "{x:" & Rng3.Cells(startRow + i, 1) & ",y:" & Rng4.Cells(startRow + i, 1) & ",samp:'" & Rng1.Cells(startRow + i, 1) & "'" & ",Rock:'" & Rng2.Cells(startRow + i, 1) & "'},"
Next i
'remove last comma
If retVal <> "" Then retVal = Left(retVal, Len(retVal) - 1)
HCAlt = "[" & retVal & "]"
End Function
调用函数的单元格是这样的代码:
HCAlt(INDIRECT(M$47),INDIRECT(M46),INDIRECT(M65),INDIRECT(M61))
它所指的单元格是范围:
Cell M46= PlotData!R55:R141 'this is a range on sheet "PlotData"
Cell M47= PlotData!A55:A141 'this is a range on sheet "PlotData"
Cell M61= StData!L55:L141 'this is a range on sheet "StData"
Cell M65= StData!P55:P141 'this is a range on sheet "StData"
该功能“有效”,但它不是指我想要它的单元格(它给我返回垃圾数据)。
我需要声明它所指的工作表吗?还是间接端口中的范围值告诉函数要找到哪个表?
谢谢
【问题讨论】:
-
我在 Excel 中遇到了一些使用 R1C1 表示法效果更好的方法。我无法具体评论您的代码,因为我没有尝试过。您可以尝试检查函数中的范围地址是否与您传递给函数的地址匹配。
-
一切似乎都很好。如果这些表存在,则它们被正确引用。尝试设置断点并查看交互式调试中的值。
-
我怎样才能看到它在看哪张纸。当我运行断点时,我得到的数据不匹配。
-
为
Rng1-Rng4添加手表,也许还有其他一些变量。我很难说出哪里出了问题,因为我不知道你期望这个函数返回什么以及它实际返回什么。 -
这里有一些东西可以帮助解释这个问题。我可以看到,当我的范围是从 55 到 141 时,我从第 109 行而不是第 55 行获取数据。