VBA Excel-循环中的解算器在引用更改单元格和条件时返回错误

VBA Excel-循环中的解算器在引用更改单元格和条件时返回错误,vba,excel,Vba,Excel,我正在尝试循环VBA Excel的解算器命令,并获取有关模型中变量和条件的错误消息。该模型的思想是找到一系列债务和股权融资,以便现金余额为零,债务和股权部分满足某些契约(在解算器运行中作为边界) 这是我的密码: Sub Debt_Capital_Balancing() Application.ScreenUpdating = False Dim Early_Repmnt As String, CashBeforeSolver As Variant, CED As Variant, _

我正在尝试循环VBA Excel的解算器命令,并获取有关模型中变量和条件的错误消息。该模型的思想是找到一系列债务和股权融资,以便现金余额为零,债务和股权部分满足某些契约(在解算器运行中作为边界)

这是我的密码:

Sub Debt_Capital_Balancing()

  Application.ScreenUpdating = False

  Dim Early_Repmnt As String, CashBeforeSolver As Variant, CED As Variant, _
  DR As Variant, CC As Variant, TW As Single, NDE As Single, DE As Single, W As Single

  K = Range("Forecast_periods").Count
  Range("Debt_Received, Debt_Early_Repayment, RE_Distribution, _ CC_APIC_Change").ClearContents

  For i = 1 To K

    CashBeforeSolver = Abs(Range("Cash_Excess_Deficit").Cells(1, i).Value)
    CED = Range("Cash_Excess_Deficit").Cells(1, i).Value
    DR = Range("Debt_Received").Cells(1, i).Value
    CC = Range("CC_APIC_Change").Cells(1, i).Value
    TW = Range("Target_WACC").Cells(1, i).Value
    NDE = Range("Net_Debt_To_EBITDA").Cells(1, i).Value
    DE = Range("D_E").Cells(1, i).Value
    W = Range("WACC").Cells(1, i).Value

    SolverReset
    SolverOk SetCell:=CED, MaxMinVal:=3, ValueOf:=0, ByChange:="DR,CC", Engine:=3, EngineDesc:="Evolutionary"

    SolverAdd cellRef:=DR, Relation:=3, FormulaText:=0
    SolverAdd cellRef:=CC, Relation:=3, FormulaText:=0
    SolverAdd cellRef:=DR, Relation:=1, FormulaText:=CashBeforeSolver
    SolverAdd cellRef:=CC, Relation:=1, FormulaText:=CashBeforeSolver
    SolverAdd cellRef:=NDE, Relation:=1, FormulaText:="Target_Net_Debt_To_EBITDA"
    SolverAdd cellRef:=DE, Relation:=1, FormulaText:="Target_D_E_Ratio"
    SolverAdd cellRef:=W, Relation:=1, FormulaText:=TW

    SolverOptions MaxTime:=0, Iterations:=0, Precision:=0.00001, _
    Convergence:=0.0001, StepThru:=False, Scaling:=True, AssumeNonNeg:=False, Derivatives:=1

    SolverOptions PopulationSize:=100, RandomSeed:=0, MutationRate:=0.075, _
    Multistart:=False, RequireBounds:=True, MaxSubproblems:=0, MaxIntegerSols:=0, _
    IntTolerance:=0.1, SolveWithout:=False, MaxTimeNoImp:=200

    SolverSolve

  Next i

End Sub
我猜我错误地引用了解算器模式中的变量。 有人能帮我吗?是否有其他方法来表示不断变化的单元格和动态条件

非常感谢,


Yury

好的,我找到了一个解决方案,可能不是最优的,但它是有效的。代码如下:

Sub Debt_Capital_Balancing()

Application.ScreenUpdating = False
Application.Calculation = xlCalculationAutomatic

Dim InitCashBalance As Variant
Dim InitCashBalance2 As Variant
Dim TargetCell As Variant
Dim DebtReceivedChangeCell As Variant
Dim DebtPaidChangeCell As Variant
Dim REChangeCell As Variant
Dim CapitalChangeCell As Variant
Dim DEConstr As Variant
Dim WACCConstr As Variant
Dim DtoEBITDAConstr As Variant
Dim TargWACC As Variant
Dim TargDE As Variant
Dim TargDtoEBITDA As Variant
Dim DebtcfConstr As Variant
Dim EquitycfConstr As Variant
Dim MinDE As Variant

Range("Debt_Received, Debt_Early_Repayment, Dividends, _
RE_Distribution, CC_APIC_Change").ClearContents

K = Range("Forecast_periods").Count

Set InitCashBalance = Range("Cash_Excess_Deficit").Cells(1, 1)
Set TargetCell = Range("Cash_Excess_Deficit").Cells(1, 1)
Set DebtReceivedChangeCell = Range("Debt_Received").Cells(1, 1)
Set DebtPaidChangeCell = Range("Debt_Early_Repayment").Cells(1, 1)
Set REChangeCell = Range("RE_Distribution").Cells(1, 1)
Set CapitalChangeCell = Range("CC_APIC_Change").Cells(1, 1)
Set DtoEBITDAConstr = Range("Net_Debt_To_EBITDA").Cells(1, 1)
Set DebtcfConstr = Range("Debt_cf").Cells(1, 1)
Set EquitycfConstr = Range("Equity_cf").Cells(1, 1)
Set TargDtoEBITDA = Range("Target_Net_Debt_To_EBITDA")

For i = 1 To K

InitCashBalance2 = Abs(InitCashBalance)

SolverReset
SolverOk SetCell:=TargetCell.Address, MaxMinVal:=3, ValueOf:=0, _
ByChange:=DebtReceivedChangeCell.Address & "," & CapitalChangeCell.Address,_
Engine:=3, EngineDesc:="Evolutionary"

SolverAdd cellRef:=DebtReceivedChangeCell.Address, Relation:=3, FormulaText:=0
SolverAdd cellRef:=CapitalChangeCell.Address, Relation:=3, FormulaText:=0
SolverAdd cellRef:=DebtReceivedChangeCell.Address, Relation:=1, FormulaText:=InitCashBalance2
SolverAdd cellRef:=CapitalChangeCell.Address, Relation:=1, FormulaText:=InitCashBalance2
SolverAdd cellRef:=DtoEBITDAConstr.Address, Relation:=1, _ FormulaText:=TargDtoEBITDA
SolverAdd cellRef:=DebtcfConstr.Address, Relation:=3, FormulaText:=0
SolverAdd cellRef:=EquitycfConstr.Address, Relation:=3, FormulaText:=0

SolverOptions MaxTime:=0, Iterations:=0, Precision:=0.00001, _
Convergence:=0.0001, StepThru:=False, Scaling:=True, _
AssumeNonNeg:=False, Derivatives:=1

SolverOptions PopulationSize:=100, RandomSeed:=0, MutationRate:=0.075, _
Multistart:=False, RequireBounds:=True, MaxSubproblems:=0, _
MaxIntegerSols:=0, IntTolerance:=0.1, SolveWithout:=False, MaxTimeNoImp:=200

SolverSolve userFinish:=True 
SolverFinish KeepFinal:=1 

Set InitCashBalance = InitCashBalance.Offset(0, 1)
Set TargetCell = TargetCell.Offset(0, 1)
Set DebtReceivedChangeCell = DebtReceivedChangeCell.Offset(0, 1)
Set DebtPaidChangeCell = DebtPaidChangeCell.Offset(0, 1)
Set REChangeCell = REChangeCell.Offset(0, 1)
Set CapitalChangeCell = CapitalChangeCell.Offset(0, 1)
Set DtoEBITDAConstr = DtoEBITDAConstr.Offset(0, 1)
Set DebtcfConstr = DebtcfConstr.Offset(0, 1)
Set EquitycfConstr = EquitycfConstr.Offset(0, 1)

Next i

Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True

End Sub

您的错误是什么?请单步执行代码:1。它在哪一行出错?2:错误是什么(李迪也是如此)