Excel VBA数组参数、初始化及Math.Max调用语法错误排查
问题1 二维数组参数语法报错
你使用的是VB.NET的语法规范,VBA不支持显式标注数组维度的参数声明,同时Excel可调用的自定义函数必须用Function而非Sub(Sub无法被单元格公式引用)。
正确的参数声明写法如下:
' 若要作为单元格可调用的自定义函数,改为Function Function EmptyValid210917(RefData As String, RefRow As Integer, PhraseArray() As String, _ DayIndex As Integer, EmptyCol As Boolean, ValidCol As Boolean) ' 函数逻辑写在这里 End Function
如果需要在函数内校验PhraseArray是否为二维数组,可以用UBound(PhraseArray, 2)判断,无报错即为二维数组。
问题2 二维数组定义与初始化异常
- 动态二维数组声明:VBA动态数组统一写为
Dim ColOffset() As Integer,不需要标注维度,后续使用ReDim ColOffset(1 To 2, 1 To 2)即可调整为二维数组。 - 定长数组初始化:VBA不支持声明时直接用
{{},{}}的语法批量赋值,这是VB.NET的特性。两种常用初始化方案:- 逐元素赋值
Dim ColOffset(1 To 2, 1 To 2) As Integer ColOffset(1,1) = 1: ColOffset(1,2) = 2 ColOffset(2,1) = 3: ColOffset(2,2) = 4- 用嵌套Array生成Variant类型二维数组
Dim ColOffset As Variant ColOffset = Array(Array(1,2), Array(3,4))
问题3 Math.Max调用报错
VBA原生没有Math.Max方法,该方法属于.NET框架的VB.NET语法。VBA中取最大值可以直接调用Excel工作表函数:
FirstValidDay = WorksheetFunction.Max(1, 2)
如果仅比较两个数值,也可以用IIf函数实现,性能更好:
FirstValidDay = IIf(1 > 2, 1, 2)
内容的提问来源于stack exchange,提问作者jack
相关产品推荐
相关产品推荐

