2017-08-03 48 views
0

讓我詳細解釋它。因此,如果'id'或'f'大於0且'l'或's'是6,那麼此代碼所做的是基於參數值,然後分別計算下一次迭代中的3%(2%和1%) )的值(say = P),更新'id'和'l'爲其他值,並將其存儲在別的地方。直到'id'或'f'變爲0或'l'或's'變爲大於8時才能完成。Out of Stack在Excel中使用VBScript遞歸的錯誤

這就是它需要完成的一切。但它計算到第一個值的2%,並給出了錯誤

Function percentage(f, s, t) 
Dim id, l, k, y 
k = 2 
id = f 
l = s 
y = t 
     If id <> 0 Then 

      While IsEmpty(Sheet7.Cells(k, 1).Value) = False 

       If Sheet7.Cells(k, 1).Value = id Then 
        id = Sheet7.Cells(k, 11).Value 
         If l = 6 Then 
         Sheet7.Cells(k, l).Value = 0.03 * Sheet7.Cells(y, 3).Value 
         l = l + 1 
         ElseIf l = 7 Then 
         Sheet7.Cells(k, l).Value = 0.02 * Sheet7.Cells(y, 3).Value 
         l = l + 1 
         ElseIf l = 8 Then 
         Sheet7.Cells(k, l).Value = 0.01 * Sheet7.Cells(y, 3).Value 
         End If 
       End If 
       k = k + 1 
       Wend 
       percentage = percentage(id, l, y) 
     End If 

    End Function 
+0

這是VBScript還是VBA?如果是VBScript,我希望看到在你的代碼中某處創建了一個Excel應用程序對象。 – YowE3K

+0

這個函數被一個Sub調用,大部分代碼都在sub中,而且它很長..我發佈了這個函數,因爲問題在於函數not in –

+0

'If l <9 Then'總是爲true(除非'從頭開始,'> = 9)。您可以獲得的最高'l'值是8. –

回答

0

假設這段代碼寫得好(即所有變量都設置它們的值正確),我能看到的唯一問題是l值和If l < 9 Then的條件。可能的選項包括:

  • l<6 - 你的代碼將什麼也不做,只會無限循環。這將是(幾乎)一樣

    Function percentage(f, s, t) percentage(f, s, t)

  • 6<=l<=8 - 你的代碼會做一些(If/ElseIf語句),但是仍然會無限循環,爲改變l的價值的唯一線l = l + 1這僅針對l=6l=7運行。因此,最高l值可以達到爲8

  • l>8 - 你的代碼會做什麼都

我不知道這是什麼代碼的目的,所以這是很難說應該如何修復。也許在ElseIf l = 8 Then之後加l = l + 1就夠了。但是,這隻會解決第二種情況。如果你從l<6開始,你仍然會永遠循環。

UPDATE

檢查下面的代碼。我沒有檢查值是否寫在正確的單元格中,我想你可以調試它,以防萬一以錯誤的方式顯示。

Function percentage(f, s, t) 
Dim id, l, k, y 
k = 2 
id = f 
l = s 
y = t 

If id <> 0 Then 
    If l > 5 And l < 9 Then 
     While IsEmpty(Sheet7.Cells(k, 1).Value) = False 

      If Sheet7.Cells(k, 1).Value = id Then 
       id = Sheet7.Cells(k, 11).Value 
       If l = 6 Then 
        Sheet7.Cells(k, l).Value = 0.03 * Sheet7.Cells(y, 3).Value 
        l = l + 1 
       ElseIf l = 7 Then 
        Sheet7.Cells(k, l).Value = 0.02 * Sheet7.Cells(y, 3).Value 
        l = l + 1 
       ElseIf l = 8 Then 
        Sheet7.Cells(k, l).Value = 0.01 * Sheet7.Cells(y, 3).Value 
        l = l + 1 
       End If 
      End If 
      k = k + 1 
     Wend 
     percentage = percentage(id, l, y) 
    End If 
End If 
End Function 
+1

@Dave感謝您的編輯。我不知道我怎麼沒有意識到這一點。 –

+0

你的代碼中沒有錯誤,即使有位置,但我仍然得到相同的錯誤...錯誤在這一行「百分比=百分比(id,l,y)」 –

+0

你試過調試它嗎?另外,你能提供一些簡單的數據來重現你的問題嗎? –