2016-06-09 7 views
0

У меня есть следующий код. Как вы можете видеть на следующем шаге цикла. Две внутренние петли работают нормально, но внешний контур не работает вообще. Кажется, что-то с тем, как я «тускнею» в переменных, но, честно говоря, я не уверен, почему это не работает. Чтобы упростить, я удалил часть кода внутри внутреннего цикла, но я не думаю, что это повлияет на следующие циклы.Вложенный цикл цикла с шагом не работает

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 statement] (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, а max равно 1 с шагом 0,1. Он также работает, если я устанавливаю max немного выше, где я действительно хочу. Поэтому, если я хочу, чтобы max был равен 1,2, я устанавливаю max, который используется в цикле, равным 1,21 с шагом 0,1, и он работает. – Jcarl

+0

Таким образом, это похоже на проблему с данными в ячейках. – Jcarl

Смежные вопросы