2016-04-17 5 views
4

this questionのアドレスを助けようとする中で、VBAでSolverの非常に奇妙な動作が発生しました。VBAのソルバーを使用すると、計算モードが手動に設定されます

誰がそれを再現できるかどうか、私のシステム(Windowsの10、2016エクセル)、およびに何らかの問題がある場合は、誰もが上で何が起こっているかに私を指すことができる場合、私は疑問に思って。

ブックの設定は非常に簡単です。ここで

enter image description here

私は...私はF8を使用してこのコードをステップ実行して、手動でそれぞれの行が実行された後、オプションで計算モードをチェック

Sub mySolve() 
    Dim SetRng As Range, ChangeRng As Range 
    Dim i As Long 
    For i = 2 To 4 
     Set SetRng = Sheets("Sheet1").Cells(i, 5) 
     Set ChangeRng = Sheets("Sheet1").Cells(i, 4) 

     SolverReset 
     SolverOk SetCell:=SetRng.Address, MaxMinVal:=3, _ 
      ValueOf:=1, ByChange:=ChangeRng.Address, _ 
      Engine:=1, EngineDesc:="GRG NONLINEAR" 
     SolverSolve UserFinish:=True 
     SolverFinish KeepFinal:=1 

    Next i 
End Sub 

をテストしていたコードです。

  1. ソルバーソルブの後、計算モードは手動で行い、私がそれをしなければ元に戻りません。
  2. SolverResetへの呼び出しを削除した場合、SolverSolveが呼び出された後、計算モードは手動に変更されません。
+0

VBAなしでソルバーを実行するとどうなりますか。計算モードを変更しますか? –

+0

いいえ - すべてがExcelインターフェイスを通じて正常に動作します。 – OldUgly

答えて

5

Excel 2010でコードを実行したところ、同じ結果が得られました。何かがあれば、SolverResetが呼び出されているかどうかにかかわらず、バグが発生し、さらに、コードの実行後に、「設定問題...」というテキストがExcelのステータスバーに残ります

ソルバーは、ワークシート内のセルを変更することによって目的関数を評価し、正しい入力値が得られるまで評価したくないので、計算をGRG Nonlinearで手動に設定する必要があります。 Excelインターフェイスから呼び出されると、ソルバーはそれ自身の後でクリーンアップします。誰でもVBAインターフェイスをまとめる人は、この小さな詳細を忘れていたに違いない。それは明らかにバグです。おそらく、あなたは(マイクロソフトのためのソルバーを作る前線システムズのウェブサイトは)【選択回避策はもちろん十分に簡単ですSolver.comでバグレポートを提出できます。ただ、サブの下部に

Application.Calculation = xlCalculationAutomatic 

ラインを置きます。

関連する問題