VBA代码跳过function没有错误

我正在为一些数据,特别是2列(即2x2matrix)生成一个协方差matrix的代码。 发生了什么事情是,代码完美的工作之前,现在它并没有任何重大的变化(只是做了一个function)。 代码运行,显示MsgBox,以及什么时候需要计算matrix,它只是跳到所有行的末尾。

码:

Function GetBaseRate(ranges() As Variant, Days() As Variant) As Object ' Get Data from Data Base ' Use this array to render the bucket titles Dim Covariance As Object Dim Cov As Variant Set Covariance = CreateObject("Scripting.Dictionary") Set sh = ThisWorkbook.Worksheets("AUX") ' Get Covariance for each range limit = UBound(ranges) MsgBox limit For i = 0 To limit MsgBox ranges(i) & " - " & Days(i) Next i For i = 0 To limit sh.UsedRange.ClearContents ' query for each day MsgBox ranges(i) & " - " & Days(i) Query = "SELECT TASA FROM [NVSSQLBI].[MESA].[dbo].[CURVA_BASE_CLP_ON_FECHA] WHERE DIAS ='" & Days(i) & "' AND FECHA > '" & DateAdd("yyyy", -5, Date) & "' ORDER BY FECHA DESC" Query2 = "SELECT TASA FROM [NVSSQLBI].[MESA].[dbo].[CURVA_BASE_CLF_ON_FECHA] WHERE DIAS ='" & Days(i) & "' AND FECHA > '" & DateAdd("yyyy", -5, Date) & "' ORDER BY FECHA DESC" aux = BDconexion2(Query) aux2 = BDconexion2(Query2) Count = 1 ' CLP For Each element In aux sh.Cells(Count, 1).Value = element Count = Count + 1 Next element Count = 1 ' UF For Each element In aux2 sh.Cells(Count, 2).Value = element Count = Count + 1 Next element ' Generate Cov Cov = VarCov(Range("A1:B" & Count - 1)) 'Debug.Print Cov(0, 0) & " - " Covariance.Add CStr(ranges(i)), Cov Next i GetBaseRate = Covariance End Function 

它对数据库进行sql查询,并将数据放入工作表中,以便以后计算协方差matrix。 计算matrix的代码是这样的:

 Function VarCov(rng As Range) As Variant ' Returns covariance matrix Dim i As Integer Dim j As Integer Dim colnum As Integer Dim Matrix() As Double colnum = rng.columns.Count ReDim Matrix(colnum, colnum) For i = 1 To colnum For j = 1 To colnum Matrix(i - 1, j - 1) = Application.WorksheetFunction.Covar(rng.columns(i), rng.columns(j)) Next j Next i VarCov = Matrix End Function 

我不知道为什么它不工作,我正在使用以前的版本,它并没有失败。 debugging完成后,失败点位于

  Matrix(i - 1, j - 1) = Application.WorksheetFunction.Covar(rng.columns(i), rng.columns(j)) 

线以前工作完美,现在它不会抛出任何错误只是去function(一个MsgBox说“完成”)后的行

尝试将图表对象添加到传递给VarCov函数的范围。 即 – 尝试改变

 Cov = VarCov(Range("A1:B" & Count - 1)) 

 Cov = VarCov(sh.Range("A1:B" & Count - 1)) 

假定sh是范围所在的工作表。

你能写这个,看看你在即时窗口得到什么?

  debug.print colnum For i = 1 To colnum For j = 1 To colnum Matrix(i - 1, j - 1) = Application.WorksheetFunction.Covar(rng.columns(i), rng.columns(j)) debug.print i debug.print j debug.print Matrix(i - 1, j - 1) debug.print "---------" Next j Next i