2016-06-09 134 views
0

我有以下代码。正如你可以看到的下一步循环。两个内部循环工作正常,但外部循环根本没有运行。这似乎是我如何“变暗”变量的东西,但老实说,我不知道为什么这不起作用。为了简化,我删除了内部循环中的一些代码,但我认为这不会影响下一个循环。嵌套for循环步骤不工作

Sub AlgorithmOptimizertest() 

    Dim PBmin As Double 
    Dim PBmax As Double 
    Dim PBstep As Double 
    Dim PRORmin As Double 
    Dim PRORmax As Double 
    Dim PRORstep As Double 

    Dim ROEmin As Double 
    Dim ROEmax As Double 
    Dim ROEstep As Double 

    PBmin = Sheets("ModelSummary").Range("AP6").Value 
    PBmax = Sheets("ModelSummary").Range("AP7").Value 
    PBstep = Sheets("ModelSummary").Range("AP8").Value 
    PRORmin = Sheets("ModelSummary").Range("AO6").Value 
    PRORmax = Sheets("ModelSummary").Range("AO7").Value 
    PRORstep = Sheets("ModelSummary").Range("AO8").Value 
    ROEmin = Sheets("ModelSummary").Range("AD6").Value 
    ROEmax = Sheets("ModelSummary").Range("AD7").Value 
    ROEstep = Sheets("ModelSummary").Range("AD8").Value 

    For k = ROEmin To ROEmax Step ROEstep 
     Range("AD5").Value = k 
     For j = PRORmin To PRORmax Step PRORstep 
      Range("AO5").Value = j 
      For i = PBmin To PBmax Step PBstep 
       Range("AP5").Value = i 

       Call PorfolioBuilder 

      Next i 
     Next j 
    Next k 

End Sub 
+1

您是否已经验证,在AD8(当加入AD6)值不超过AD7值,从而执行循环只有一次?我假设最外层的循环至少执行一次,因为你说内层循环工作正常。 – Dave

+1

此代码将受益于一个大的'ole [With ... End With语句](https://msdn.microsoft.com/en-us/library/wc500chb.aspx),它定义了* ModelSummary *工作表代码。您是否在PorfolioBuilder中选择,激活或创建另一个工作表? – Jeeped

+0

ROEmin,ROEmax和ROEstep的值是多少? –

回答

0

它绝对不是代码问题。 它可能与您在单元格中的数据有关。

但要准确,你应该做这样的事情:

dim wb as workbook, ws as worksheet 
'put your dim's here 

set wb=thisworkbook 
set ws=wb.worksheets("ModelSummary") 

'read your values here 
ROEmin = ws.Range("AD6").Value 
'also you might want to try this 
'ROEMIN = ws.Cells(ws.Range("AD6").row,ws.Range("AD6").column) 

'then call your loops 
For k = ROEmin To ROEmax Step ROEstep 
    Range("AD5").Value = k 
    For j = PRORmin To PRORmax Step PRORstep 
     Range("AO5").Value = j 
     For i = PBmin To PBmax Step PBstep 
      Range("AP5").Value = i 

      Call PorfolioBuilder 

     Next i 
    Next j 
Next k 
+0

感谢您的建议。我会尝试定义工作簿。要添加到问题陈述中,代码适用于一些范围集合,但不适用于其他范围。例如,如果我将ROEmin设置为0.5,并将最大值设置为1并且步长为0.1,则它可以工作。但如果min设置为0.8,最大值为1,步长为0.1,则不起作用。如果我将最大值设置在真正想要的位置上方,它也可以工作。所以,如果我想要最大值为1.2,那么我将循环中使用的最大值设置为1.21,步长为0.1,它可以工作。 – Jcarl

+0

因此,它似乎是与单元格中的数据有关的问题。 – Jcarl