你对VBA很新,我正在努力奋斗。基本上我正在尝试使用excel来增加风力涡轮机和太阳能电池板的数量,直到达到预算为止
Dim Turbines As Integer, SolarPanels As Integer
If Range("Total_Budget") < 50000 Then
For Turbines = 1 To 10
For SolarPanels = 0 To 1000 Step 50
Range("TNumber") = Turbines
Range("SPower") = SolarPanels
Exit For
Next Turbines
Next SolarPanels
End If
End Sub
TNumber
和SPower
以及单个单元格命名范围。当我尝试运行代码时出现错误: -
无效的下一个控制变量引用。
就像我说的那样,我是VBA的新手并且正在努力解决这个问题,如果我的问题没有完全理解,那么道歉
答案 0 :(得分:0)
根据您的comment,这可以通过公式完成:
设置TurbineCount单元格:
=INT(Total_Budget/CostPerTurbine)
设置您的SolarPanel计数单元格:
=INT((Total_Budget-(TurbineCount*CostPerTurbine))/CostPerSolarPanel)
并完成它。
INT()
向下舍入到最接近的整数,这样您就不会得到部分涡轮机或面板。
Public Sub CalcTurbinesAndPanels()
Dim TotalBudget as Range
Set TotalBudget = ThisWorkbook.ThisWorksheet.Range("Total_Budget")
If TotalBudget.Value < 50000 Then
Dim TurbineCount as Range
Set TurbineCount = ThisWorkbook.ThisWorksheet.Range("TNumber")
Dim TurbineCost as Range
Set TurbineCost = ThisWorkbook.ThisWorksheet.Range("TurbineCost")
TurbineCount.Value = TotalBudget.Value / TurbineCost.Value
Dim RemainingBudget as Long
RemainingBudget = TotalBudget.Value - (TurbineCount.Value * TurbineCost.Value)
Dim PanelCount as Range
Set PanelCount = ThisWorkbook.ThisWorksheet.Range("SPower")
Dim PanelCost as Range
Set PanelCost = ThisWorkbook.ThisWorksheet.Range("SolarPanelCost")
PanelCount.Value = RemainingBudget / PanelCost.Value
End If
End Sub
注意:
Range
个变量并将它们设置为等于它们所引用的范围意味着从长期来看,在较长的函数上输入的次数较少。
ThisWorkbook.ThisWorksheet.
至少强制引用始终指向运行代码的工作簿/工作表。.Value
是Range
的默认属性,因此您无需使用它,但我将其用于使其更明确Range()
始终引用当前的ActiveWorkbook.ActiveWorksheet
。在您的代码中使用不合格的Range()
从长远来看会遇到麻烦 - 在某些时候,您,您的用户或您的代码将切换到不同的工作表,一切都会因为难以追踪的奇怪错误而中断并且可能会对工作簿中的数据造成重大损害。