VBA相当新,但是已经在java和C中进行了很多编程。
遗憾的是,我有一个似乎是经典的错误。遇到这个问题的其他人似乎没有问题的根源。原因是我在函数调用中发现了所有其他帖子的错误。我在函数定义上的错误标志!
声明:
Dim aktier() As String
ReDim aktier(antalTr) As String
Dim unikaAktier() As String
ReDim unikaAktier(antalTr) As String
Dim antalTr As Integer
Dim Kop As Integer
Kop = 1
Dim Salj As Integer
Salj = 2
Dim antalUnika As Integer
antalUnika = 0
for循环中的函数调用。这里没有错误标志。
For o = 1 To antalUnika
Cells(o + 1, 3).Value = snittInkopEllerSalj(unikaAktier(o), antalTr, Kop)
Cells(o + 1, 4).Value = snittInkopEllerSalj(unikaAktier(o), antalTr, Salj)
Next o
功能。在第一行标记。
Function snittInkopEllerSalj(bolag As String, antalTr As Integer, InUt As Integer) As Integer
Dim totKopSalj As Integer
Dim totAktier As Integer
totKopSalj = 0
totAktier = 0
For i = 1 To antalTr
If Sheet1.Cells(i, 4).Value = bolag Then
If InUt = 1 Then
If isCorrectTrans(i, InUt) = True Then
totKopSalj = totKop + Sheet1.Cells(i, 7)
totAktier = totAktier + Sheet1.Cells(i, 5)
End If
Else
If isCorrectTrans(i, InUt) = True Then
totKopSalj = totKop + Sheet1.Cells(i, 7)
totAktier = totAktier + Sheet1.Cells(i, 5)
End If
End If
End If
Next i
snittInkopEllerSalj = Round(totKopSalj / totAktier)
End Function
我真的不明白为什么我会收到这个错误。我觉得一切都很明确?
答案 0 :(得分:0)
您应始终将Option Explicit
放在所有模块的第一行。这强制要求必须声明所有变量。
如果添加所有缺少的变量声明,则代码应该有效。
此外,在antalTr
ReDim aktier(antalTr) As String
之前,必须先声明Integer
与您的问题无关,但是:
Long
类型。请改用Private
。由于VBA中的整数只有16位,但现在的计算机没有16位寄存器,因此它将以32位长的速度存储。另外,您不必担心打破32767边界。Public
或ByRef
,则后者将成为默认值。ByVal
)传递。如果您不希望在Sub或Function声明中将FilterAttribute
放在参数名称之前。