递归函数的优化

时间:2019-09-23 19:21:39

标签: excel vba

我已经编写了一些代码来计算具有默认颜色值的空单元格,这些单元格中的黑色单元格(interior.color)包围了它。

Option Explicit
    Private arr(1 To 20, 1 To 20) As Boolean
    Private pocet As Integer    

Private Sub CommandButton1_Click()

    Dim x As Integer
    Dim y As Integer
    Dim i As Integer, j As Integer

    Dim dotaz As Integer
    Erase arr()

    pocet = 0
    x = Worksheets("List2").Range("Y1").Value
    y = Worksheets("List2").Range("Y2").Value

    Worksheets("List2").Cells(y, x).Interior.Color = RGB(0, 255, 0)
    dotaz = MsgBox("Pokračovat?", vbYesNo)
    If dotaz = vbYes Then
        vyplnit x, y
    Else
    End If

    MsgBox pocet

End Sub
Private Sub vyplnit(x As Integer, y As Integer) 'rekurzivní funkce
    If x < 1 Or x > 20 Or y < 1 Or y > 20 Then
        Exit Sub
    End If

    If arr(x, y) = True Or Worksheets("List2").Cells(y, x).Interior.Color = vbBlack Then
    Else
        arr(x, y) = True
        pocet = pocet + 1
        vyplnit x + 1, y
        vyplnit x - 1, y
        vyplnit x, y + 1
        vyplnit x, y - 1
    End If

这很好用。变量“ pocet”保存有关区域内有多少个单元格的信息。但是,当我更大规模地使用此功能时,会出现错误28(堆栈空间不足)。这是由过多的功能堆栈(Functionception)引起的。我当时正在考虑进行一些优化,以免出错28,但是却一无所获。有提示吗?

0 个答案:

没有答案