Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Ausdruck in Kontext nicht definiert

Ausdruck in Kontext nicht definiert
08.05.2013 13:32:33
Anfängerin13
Hallo ich habe folgenden Code jedoch funktioniert dieser nicht.
Ich bin Anfängerin und programmiere für meine Masterthese und kann mir leider daher nicht erklären warum hinter "mySheet" LEER angegeben wird.
Das Problem habe ich fett markiert. Hoffe einer kann mir helfen. Vielen Dank!
Mein Code:
Public Sub Optimiere()
Dim mySheet As Worksheet
Dim highestPriceDate As Date
Set mySheet = ActiveSheet
While WorksheetFunction.Min(mySheet.Range("J:J"))  0
highestPriceDate = findHighestPriceDate(mySheet.Range("F3:F8790"), 9, 1, 3, 8790)
Call populateLevels(mySheet.Range("A3:A8790"), highestPriceDate, 1, 4, 8, 10, 11, 9)
Wend
End Sub
Private Function findHighestPriceDate(DemandPrice As Range, HydroInputCol As Integer,  _
TimestampCol As Integer, startR As Long, endR As Long) As Date
Dim HighestPrice As Single
Dim HPRow As Long
Dim thisSheet As Worksheet
Dim r As Long
Dim c As Long
HighestPrice = 0
Set thisSheet = DemandPrice.Worksheet
c = DemandPrice.Column
For r = DemandPrice.Row To DemandPrice.Row + DemandPrice.Rows.Count - 1
If thisSheet.Cells(r, c) > HighestPrice And thisSheet.Cells(r, HydroInputCol) = "" Then
HighestPrice = thisSheet.Cells(r, c)
HPRow = r
End If
Next r
findHighestPriceDate = thisSheet.Cells(HPRow, TimestampCol)
End Function
Private Sub populateLevels(myRange As Range, dateToFind, TimestampCol, DemandCol,  _
availableCapacityCol, ResidualOptimizationCol, generatedMWhCol, HydroInputCol)
Dim r As Long
Dim mySheet As Worksheet
Dim myMin As Single
 r = myRange.Find(dateToFind).Row
Set mySheet = myRange.Worksheet
myMin = WorksheetFunction.Min(mySheet.Cells(r, DemandCol), mySheet.Cells(r,  _
availableCapacityCol), mySheet.Cells(r, ResidualOptimizationCol))
mySheet.Cells(r, generatedMWhCol) = myMin
mySheet.Cells(r, HydroInputCol) = myMin
End Sub

Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Ausdruck in Kontext nicht definiert
08.05.2013 14:10:20
Peter
Hallo,
die Find-Methode verlange als Empfangs-Variable eine Range
und verlange ebenfalls ein Set, um ein Ergebnis zu liefern
Option Explicit
Private Sub populateLevels(myRange As Range, dateToFind, TimestampCol, DemandCol, _
availableCapacityCol, ResidualOptimizationCol, generatedMWhCol, HydroInputCol)
Dim rZelle As Range
Dim lZeile As Long
Dim mySheet As Worksheet
Dim myMin As Single
Set rZelle = myRange.Find(What:=dateToFind, LookAt:=xlWhole, LookIn:=xlFormulas)
If Not rZelle Is Nothing Then
lZeile = rZelle.Row
Else
MsgBox "Das Datum  """ & dateToFind & """  wurde nicht gefunden."
Exit Sub
End If
Set mySheet = myRange.Worksheet
myMin = WorksheetFunction.Min(mySheet.Cells(lZeile, DemandCol), mySheet.Cells(lZeile, _
availableCapacityCol), mySheet.Cells(lZeile, ResidualOptimizationCol))
mySheet.Cells(lZeile, generatedMWhCol) = myMin
mySheet.Cells(lZeile, HydroInputCol) = myMin
End Sub

Ohne Deinen Code getestet zu haben sollte das so funktionieren
Gruß Peter

Anzeige
AW: Ausdruck in Kontext nicht definiert
08.05.2013 16:02:17
Anfängerin13
Vielen Dank Peter!! Ja es funktioniert sogar. Jedoch habe ich ein Problem bei der Ausführung des Codes.
Es besteht zwar keine Fehlermeldung mehr, jedoch sucht meine Min-Funktion das Minimum aus Demand, available Capacity und Residual Optimization. (Kurze Erläuterung: Residual Optimization beinhaltet Wasser welches entleert werden kann). Da er nun das Minimum sucht, läuft meine Wassermeng auch ins negative.
Kann ich eine IF Condition einbauen, sodass wenn Residual Optimization = 0 ist, er die Zeile überspringen soll?
Also sowas wie:
mySheet.Cells(r, generatedMWhCol) = myMin
mySheet.Cells(r, HydroInputCol) = myMin
IF mySheet.Cells(r, ResidualOptimization) = 0 Then Next r
End IF

End Sub
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Ausdruck in Kontext nicht definiert: Fehlerbehebung und Lösungen


Schritt-für-Schritt-Anleitung

Um den Fehler "Ausdruck in Kontext nicht definiert" in deinem VBA-Code zu beheben, folge diesen Schritten:

  1. Überprüfe die Variablen: Stelle sicher, dass alle Variablen korrekt deklariert sind. Insbesondere die Variable thisSheet, die in der Funktion findHighestPriceDate verwendet wird, sollte korrekt gesetzt werden.

  2. Setze die Range-Variable: Wenn du die Find-Methode verwendest, stelle sicher, dass du die gefundene Zelle korrekt zuweist. Ein Beispiel findest du im folgenden Code:

    Set rZelle = myRange.Find(What:=dateToFind, LookAt:=xlWhole, LookIn:=xlFormulas)
  3. Überprüfe die If-Bedingung: Wenn du eine IF-Bedingung implementieren möchtest, um negative Werte zu vermeiden, kannst du den Code wie folgt anpassen:

    If mySheet.Cells(r, ResidualOptimizationCol) = 0 Then
       ' Nächste Zeile überspringen
       GoTo NextIteration
    End If
  4. Testen des Codes: Führe den gesamten Code in deiner Excel-Umgebung aus, um sicherzustellen, dass keine weiteren Fehler auftreten.


Häufige Fehler und Lösungen

  • Fehler: "Ausdruck in Kontext nicht definiert"
    Lösung: Überprüfe, ob alle Variablen deklariert sind und die Range-Objekte korrekt gesetzt werden. Achte darauf, dass mySheet und thisSheet korrekt initialisiert sind.

  • Fehler bei der Find-Methode
    Lösung: Stelle sicher, dass du die richtige Syntax verwendest, und überprüfe, ob das gesuchte Datum tatsächlich in der angegebenen Range vorhanden ist.

  • Negative Werte bei der Berechnung
    Lösung: Füge eine IF-Bedingung ein, um Zeilen mit Residual Optimization = 0 zu überspringen.


Alternative Methoden

Falls du weiterhin Probleme mit dem VBA-Code hast, kannst du folgende alternative Ansätze in Betracht ziehen:

  1. Verwendung von Excel-Formeln: Anstelle von VBA kannst du auch Excel-Formeln verwenden, um die gewünschten Berechnungen durchzuführen.

  2. Debugging-Tools: Nutze die integrierten Debugging-Tools in VBA, um deinen Code Schritt für Schritt zu überprüfen. Setze Breakpoints und beobachte die Werte der Variablen.


Praktische Beispiele

Hier sind einige praktische Beispiele, die dir bei der Anwendung helfen können:

  1. Find-Methode Beispiel:

    Dim rZelle As Range
    Set rZelle = myRange.Find(What:=dateToFind, LookAt:=xlWhole)
    If Not rZelle Is Nothing Then
       ' Führe Aktionen aus
    End If
  2. IF-Bedingung Beispiel:

    If mySheet.Cells(r, ResidualOptimizationCol) > 0 Then
       mySheet.Cells(r, generatedMWhCol) = myMin
    End If

Tipps für Profis

  • Nutze Option Explicit: Dies zwingt dich dazu, alle Variablen zu deklarieren und hilft, Fehler zu vermeiden.
  • Verwende Kommentare: Dokumentiere deinen Code mit Kommentaren, um die Logik besser nachvollziehen zu können.
  • Teste in einer sicheren Umgebung: Führe neue Codes in einer Kopie deiner Datei aus, um ungewollte Datenverluste zu vermeiden.

FAQ: Häufige Fragen

1. Was bedeutet "Ausdruck in Kontext nicht definiert"?
Diese Fehlermeldung tritt auf, wenn VBA eine Variable oder ein Objekt nicht erkennen kann. Überprüfe deine Deklarationen und Initialisierungen.

2. Wie kann ich sicherstellen, dass mein Code fehlerfrei ist?
Nutze die Debugging-Tools in VBA, um Schritt für Schritt durch deinen Code zu gehen und die Werte der Variablen zu überprüfen.

3. Was ist die beste Methode, um mit Range-Objekten zu arbeiten?
Verwende die Set-Anweisung, um sicherzustellen, dass deine Range-Objekte korrekt initialisiert werden, bevor du sie in deinem Code verwendest.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige