将VBA移植到VB.NET:函数参数可能是多维数组
我正在将Excel VBA移植到VB.NET。我有一个选择数据的函数,它可能是一维的,也可能是二维的。VBA代码在将变量用作1-D或2-D数组时非常流畅,但VB.NET将其标记为错误 以下是简化代码:将VBA移植到VB.NET:函数参数可能是多维数组,.net,vb.net,vba,.net,Vb.net,Vba,我正在将Excel VBA移植到VB.NET。我有一个选择数据的函数,它可能是一维的,也可能是二维的。VBA代码在将变量用作1-D或2-D数组时非常流畅,但VB.NET将其标记为错误 以下是简化代码: Public Function Stat(ByVal Data As Range) As Object Dim Y() As Object Dim Appp As New Application() ''// Very annoying ''//Convert works
Public Function Stat(ByVal Data As Range) As Object
Dim Y() As Object
Dim Appp As New Application() ''// Very annoying
''//Convert worksheet range into array vector
Y = Appp.WorksheetFunction.Transpose(Appp.WorksheetFunction.Transpose(Data))
Dim dimensions As Integer : dimensions = NumberOfArrayDimensions(Y)
If dimensions > 1 Then
For i = LBound(Y) To UBound(Y)
If VarType(Y(i, 1)) <> 0 Then
Public Function Stat(ByVal数据作为范围)作为对象
Dim Y()作为对象
Dim Appp作为新应用程序()“”//非常烦人
''//将工作表范围转换为数组向量
Y=Appp.WorksheetFunction.Transpose(Appp.WorksheetFunction.Transpose(数据))
将尺寸标注为整数:尺寸=NumberOfArrayDimensions(Y)
如果尺寸>1,则
对于i=LBound(Y)到UBound(Y)
如果VarType(Y(i,1))为0,那么
它在最后一行出现“索引数超过索引数组的维数”时失败
编辑:所以问题是这样的,“如何在VB.NET中像在Excel VBA中一样使用单个变量--具有不明确/灵活的维度?”如果没有,则“您建议如何在VB.NET中将代码更改为最自然的?”,因为我没有样本数据来处理,这是未经测试的,但类似的方法可能会奏效:
Dim dimensions As Integer : dimensions = Y.Rank
If dimensions > 1 Then
For i = Y.GetLowerBound(0) To Y.GetUpperBound(0)
If VarType(Y.GetValue(i, 1)) <> 0 Then
因为我没有样本数据,所以这是未经测试的,但类似的东西可能会起作用:
Dim dimensions As Integer : dimensions = Y.Rank
If dimensions > 1 Then
For i = Y.GetLowerBound(0) To Y.GetUpperBound(0)
If VarType(Y.GetValue(i, 1)) <> 0 Then
编辑:想法是使用范围对象而不是数组来获取边界。我没有修改代码的其余部分(除了查找维度),这需要一些改进 EDIT2:因为转置返回一个数组,其边界从1开始。
EDIT3:上面的代码是VB6样式的。但是VB.net中的想法仍然相同 编辑:想法是使用范围对象而不是数组来获取边界。
我没有修改代码的其余部分(除了查找维度),这需要一些改进 EDIT2:因为转置返回一个数组,其边界从1开始。
EDIT3:上面的代码是VB6样式的。但是在VB.net中的想法仍然是一样的我想那就是“cols=Data.Columns.Count”。为什么在VB.NET中使用基于1的数组?此外,我还可以从数组中获取数据。这不是问题所在。那么,问题到底是什么呢?“我如何在VB.NET中使用一个变量来充当Excel VBA中的变量——具有不明确/灵活的维度?”如果没有,那么,“您建议如何在VB.NET中将代码更改为最自然的?”您所说的单个变量是什么意思?原因?我想这是‘cols=Data.Columns.Count’。为什么在VB.NET中使用基于1的数组?此外,我还可以从数组中获取数据。这不是问题所在。那么,问题到底是什么呢?“我如何在VB.NET中使用一个变量来充当Excel VBA中的变量——具有不明确/灵活的维度?”如果没有,那么,“您建议如何在VB.NET中将代码更改为最自然的?”您所说的单个变量是什么意思?原因?我认为是“Dim T as Array”让我渡过了难关。我认为是“Dim T as Array”让我渡过了难关。
Public Function Stat(ByVal Data As Range) As Object
Dim Y() As Object
Dim Appp As New Application() ''// Very annoying
dim rows as Integer
dim cols as Integer
dim rowCtr as Integer = 1
dim colCtr as Integer = 1
rows = Data.Rows.Count
cols = Data.Columns.Count
Y = Appp.WorksheetFunction.Transpose(Appp.WorksheetFunction.Transpose(Data))
for rowCtr = 1 to rows
for colCtr = 1 to cols
Debug.Print Y(rowCtr, colCtr)
next
next