2017-07-21 3 views
0

Hallo bin sehr neu zu VBA und kämpfe ziemlich viel. Grundsätzlich versuche ich, Excel zu verwenden, um die Anzahl von Windkraftanlagen und Sonnenkollektoren in einer Schleife zu erhöhen, bis das BudgetSchleife innerhalb einer einzelnen Zelle

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 

Die TNumber und SPower und einzelne Zelle benannte Bereiche erreicht ist. Wenn ich versuche, den Code auszuführen bekomme ich einen Fehler: -

Invalid next control variable reference.

Wie ich schon sagte ich VBA bin hier und kämpfen, meinen Kopf um es so Entschuldigungen zu bekommen, wenn mein Problem durchaus Sinn machen nicht

+0

* "erhöhen Sie die Anzahl von ... in einer Schleife, bis das Budget erreicht ist" * klingt, als ob Sie sich anstrengen, um eine klare alte Aufteilung hier zu vermeiden. – Tomalak

+0

Sie vermissen 'Next SolarPanels'? – StefanR

+0

Nächste Turbinen nächsten Solarpanels sein sollte .... – StefanR

Antwort

0

Stellen Sie Ihre TurbineCount Zelle:
=INT(Total_Budget/CostPerTurbine)

Stellen Sie Ihre Solarpanel zählen Zelle:
Basierend auf Ihren comment, könnte dies alles mit Formeln durchgeführt werden

und damit erledigt werden.

INT() wird auf die nächste ganze Zahl abgerundet, damit Sie nicht mit einer Teilturbine oder -platte enden.


Wenn Sie haben es in VBA zu tun:

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 

Hinweise:

  • Ich mache die Annahme, dass es einige zusätzliche benannte Bereiche für Ihren TurbineCount, SolarPanelCount, TurbineCost und SolarPanelCost Zellen. Bei Bedarf anpassen.
  • Das Deklarieren von Range Variablen und ihre Einstellung auf den Bereich, auf den sie sich beziehen, bedeutet weniger Tipparbeit bei längeren Funktionen.
  • Ich habe ThisWorkbook.ThisWorksheet. hinzugefügt, um die Referenzen zu zwingen, immer auf das Arbeitsbuch/Arbeitsblatt zu verweisen, in dem der Code ausgeführt wird.
  • Dies ist wahrscheinlich ein unbedeutender Punkt in so einer kleinen Routine, aber es ist eine gute Idee, richtige Gewohnheiten früh zu beginnen.
  • .Value ist die Standardeigenschaft eines Range so brauchen Sie nicht, es zu benutzen, aber ich bin es in setzen, um es
  • Range() immer bezieht sich auf die aktuelle, ActiveWorkbook.ActiveWorksheet deutlicher zu machen. Wenn Sie in Ihrem Code einen unqualifizierten Code Range() verwenden, werden Sie auf lange Sicht nach Ärger fragen - irgendwann werden Sie, Ihr Benutzer oder Ihr Code zu einem anderen Arbeitsblatt wechseln und alles wird mit seltsamen Fehlern behaftet sein, die schwer zu finden sind erheblicher Schaden für die Daten in Ihrer Arbeitsmappe.
  • Doing in Code ist signifikant Overkill, es sei denn, das Format des Arbeitsblatts ist gesperrt und Sie sind nicht in der Lage/erlaubt hinzufügen oder bearbeiten Formeln.
  • Dies war ein schneller Code von der Spitze meines Kopfes.Es wurde nicht getestet oder sogar in der VBE geschrieben. Einige kleinere Tippfehler können vorhanden sein. YMMV.
  • Verwandte Themen