2016-06-09 1 views
0

J'ai le code suivant. Comme vous pouvez le voir pour la prochaine étape avec des boucles. Les deux boucles internes fonctionnent bien, mais la boucle externe ne fonctionne pas du tout. Cela semble être quelque chose avec la façon dont je "dim" les variables, mais honnêtement, je ne sais pas pourquoi cela ne fonctionne pas. Pour simplifier j'ai supprimé une partie du code dans la boucle interne mais je ne pense pas que cela affectera les boucles suivantes.imbriqué pour la boucle avec l'étape ne fonctionne pas

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

Avez-vous vérifié que la valeur AD8 (lorsqu'il est ajouté à AD6) ne dépasse pas la valeur AD7, l'exécution de la boucle ainsi une seule fois ? Je suppose que la boucle la plus externe s'exécute au moins une fois, puisque vous dites que les boucles internes fonctionnent bien. – Dave

+1

Ce code bénéficierait d'un grand 'ole [Avec ... Fin de l'instruction] (https://msdn.microsoft.com/en-us/library/wc500chb.aspx) qui a défini la feuille de calcul * ModelSummary * autour de tous le code. Êtes-vous en train de sélectionner, d'activer ou de créer une autre feuille de calcul dans PorfolioBuilder? – Jeeped

+0

Quelles sont les valeurs de ROEmin, ROEmax et ROEstep? –

Répondre

0

Ce n'est définitivement pas un problème de code. Cela pourrait avoir quelque chose à voir avec vos données dans les cellules.

Mais pour être précis, vous devriez faire quelque chose comme ceci:

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

Merci pour les suggestions. Je vais essayer de définir le classeur. Pour ajouter à l'énoncé du problème, le code fonctionne pour certains ensembles de plages, mais pas pour d'autres. Par exemple, cela fonctionne si je mets le ROEmin à 0.5 et le max à 1 avec un pas de 0.1. Mais cela ne fonctionne pas si min est fixé à 0,8 et le maximum est 1 avec un pas de 0,1. Cela fonctionne aussi si je mets le maximum un peu plus haut là où je le veux vraiment. Donc, si je veux que le maximum soit de 1.2, alors je mets le maximum utilisé dans la boucle à 1.21 avec un pas de 0.1 et cela fonctionne. – Jcarl

+0

Il semble donc y avoir un problème avec les données dans les cellules. – Jcarl