Forum des VBA-Tutorials

Funktion oder Ereignis? Rückgabewert oder Eigenschaft? (VBA)

Sophie, Montag, 09. Januar 2017, 11:14 (vor 79 Tagen)

Hallo Leute,

ich habe ein Problem mit der Programmierung der bedingten Formatierung meiner Exceltabelle.

Über eine Maske werden Messwerte in ein Tabellenblatt eingegeben. Auf einem zweiten Tabellenblatt stehen die Toleranzgrenzen für bestimmte Merkmale.

Bei der Datenübertragung der Eingabewerte aus der Maske in Tabellenblatt 1 möchte ich jetzt auf eine Funktion zugreifen, die mir aus Tabellenblatt 2 den oberen Grenzwert und den unteren Grenzwert für das jeweilige Merkmal raussucht und an meine übergeordnete Prozedur zurückgibt. Diese nutzt die Werte um zu vergleichen, ob die Messwerte innerhalb der Grenzen liegen, ansonsten soll der Wert rot in die Tabelle übertragen werden.

Hier ein Ausschnitt des übergeordneten Programms (die Werte werden über eine Schleife ausgelesen und eingetragen, W ist die Objektvariable die auf mein Tabellenblatt 1 zeigt, U greift auf die Eingabemaske zu, das funktioniert auch einwandfrei):

W.Cells(zeile, spalte) = U.Controls("TB" & b & c).Value

//übernimmt meine Werte

Set OT = W.Cells(zeile, spalte).OGW(b, zeile, rot)
Set UT = W.Cells(zeile, spalte).UGW(b, zeile, rot)

// OGW und UGW sind die Namen der Funktion auf die zugegriffen werden soll, die Variablen b, zeile, rot werden übergeben, um in der Funktion den richtigen Grenzwert zu filtern (ich gehe hier davon aus, dass ich eine Objekteigenschaft festgelegt habe, Erklärung siehe unten)


If U.Controls("TB" & b & c).Value < UT Or U.Controls("TB" & b & c).Value > OT Then
W.Cells(zeile, spalte).Font.Color = vbRed
End If

// Vergleich mit entsprechender Formatierung

Meine "Funktion" ermittelt folgendes Ergebnis:

OGW = ActiveWorkbook.Worksheets(2).Cells(i, 8)

//meiner Meinung nach ist das ja ein Objekt


Das Problem ist nun Folgendes:

Ich weiß nicht, ob ich die "Funktion" als Funktion deklarieren soll, oder als Ereignis (weil es sich ja um Objekte handelt, daher auch das Set OT im übergeordneten Programm).

Ich habe alles versucht: als Funktion, als Methode und als Proberty Let und Get. Aber nie erhalte ich einen Rückgabewert, der verarbeitet werden kann. Entweder die Typen waren nicht kompatibel oder es hat einfach nix gemacht oder bei den Ereignissen ist meine Deklaration falsch. Könnt ihr mir sagen wie ich vorzugehen habe, damit ich einen Rückgabewert für meinen Vergleich erhalte?

Vielen Dank schon mal

Funktion oder Ereignis? Rückgabewert oder Eigenschaft?

Martin Asal, Montag, 09. Januar 2017, 21:07 (vor 79 Tagen) @ Sophie

Hallo Sophie,

ich hoffe, ich habe dich richtig verstanden:

Du hast in Tabelle2 eine Liste mit Toleranzgrenzen für Merkmale. Das Sheet dürfte etwa wie folgt aussehen:

Merkmal UG  OG
a        5   9
b       10  15
c       25  29

Nun trägst du in einem anderen Sheet Messwerte ein, die farbig markiert werden sollen, wenn das dabei ebenfalls angegebene Merkmal nicht innerhalb dieser Toleranzen liegen.

Die folgende Funktion gibt dir entsprechende True/False Werte zurück. Bei True musst du also nur noch einfärben:

Public Function Warnung(Merkmal, Wert) As Boolean
Dim Zelle As Range
 
Warnung = False 'Startwert: Keine Warnung
Set Zelle = ActiveWorkbook.Sheets("Tabelle2").Range("A6")   '1. Zelle der Toleranzliste

Do While Zelle.Value <> ""  'Durchschleifen bis zum Ende der Toleranzliste
    If Zelle.Value = Merkmal Then
        If Zelle.Offset(0, 1) > Wert Or Zelle.Offset(0, 2) < Wert Then Warnung = True
        Exit Function
    End If
    Set Zelle = Zelle.Offset(1)   'Nächste Zeile der Toleranzliste
Loop
 
Set Zelle = Nothing
End Function

Martin

Funktion oder Ereignis? Rückgabewert oder Eigenschaft?

Sophie, Dienstag, 10. Januar 2017, 15:32 (vor 78 Tagen) @ Martin Asal

Vielen Dank, das ist eine prima Lösung gewesen. :-)

Anfangs ging es zwar trotzdem nicht, aber das lag daran, dass ich eine Variable falsch deklariert hatte :-D.

RSS-Feed dieser Diskussion
powered by my little forum