Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Public sub in Function umschreiben

Begonnen von Bernie110, Oktober 25, 2023, 14:30:49

⏪ vorheriges - nächstes ⏩

Bernie110

Hallo, kann mir jemand helfen ?
Ich möchte diese Sub in eine globale Funktion umschreiben. K.A. ob das Sinn macht.
Ich benutze diese "Public Sub" in mehreren Formularen ( weiss mir nicht anders zu helfen)

Um was geht es : Die Tabelle STAMM_NL enthält Niederlassungsdaten.
Der NL Code wird im Feld "NL" erfasst. Als Beispiel HH für Hamburg
Gleichzeitig bekommt jede Niederlassung eine eigene Farbe.
Das stelle ich mit jeweils 3 RGB Zahlenfelder für Backcolor und ForeColor dar.

Um die Farbdaten auszulesen verwende ich eben diese Public Sub

Public Sub NL_FarbeAuslesen()
Dim XNL As String

Dim H_R As Integer
Dim H_G As Integer
Dim H_B As Integer

Dim V_R As Integer
Dim V_G As Integer
Dim V_B As Integer


XNL = Me.NL
H_R = DLookup("H_Farbe_R", "STAMM_NL", "NL like '" & XNL & "*'")
H_G = DLookup("H_Farbe_G", "STAMM_NL", "NL like '" & XNL & "*'")
H_B = DLookup("H_Farbe_B", "STAMM_NL", "NL like '" & XNL & "*'")

V_R = DLookup("V_Farbe_R", "STAMM_NL", "NL like '" & XNL & "*'")
V_G = DLookup("V_Farbe_G", "STAMM_NL", "NL like '" & XNL & "*'")
V_B = DLookup("V_Farbe_B", "STAMM_NL", "NL like '" & XNL & "*'")


If Not IsNull(H_R) And Not IsNull(H_G) And Not IsNull(H_B) Then
Me.NL.BackColor = RGB(H_R, H_G, H_B)
End If

If Not IsNull(V_R) And Not IsNull(V_G) And Not IsNull(V_B) Then
Me.NL.ForeColor = RGB(V_R, V_G, V_B)
End If
End Sub

Ich hätte das gerne etwas komfortabler ..

Jemand ne Idee  .. Ich kenn mich mit Funktionsdefinitionen nicht aus.
Ist das überhaut etwas was man als Funktion darstellen könnte ?

Gruss & vorab Danke für jedwede Hilfe
Bernie

ebs17

Sub XX()
   ' ...
End Sub

Function XY() As Variant
   ' ...
   XY = ...
End Function
Für eine ordentliche Variabilität würden Prozedur/Funktion Argumente erhalten.
Mit freundlichem Glück Auf!

Eberhard

Bernie110

Hallo Eberhard, danke für deine Antwort. Verstehe leider nicht was du meinst.  :o

ebs17

Der Unterschied zwischen einer Sub (Prozedur) und einer Funktion ist, dass eine Sub etwas macht und eine Funktion einen Rückgabewert (Ergebnis einer Berechnung) erzeugt und auf dem Wege auch etwas machen kann.

Der Weg zu Variabilität sind aber Argumente. Prinzip:
Sub XX(X1, X2)
   ' mach was mit X1
   ' mach was mit X2
End Sub

' ----------------------

' Aufruf
XX 27, 56
Die Sub/Funktion holt sich also nicht hardcodiert Werte von außen, sondern sie bekommt diese Werte im Moment des Aufrufs zugewiesen.
Mit freundlichem Glück Auf!

Eberhard

Bernie110

Ah ok. Dann ist das wohl nix.

Was wäre eine Möglichkeit ? mit einem Modul ?


MzKlMu

Hallo,
mit Modul hat das nichts zu tun. Ein Modul ist eine Container für Prozeduren oder Funktionen. Ein Modul ist nichts selbständiges.

ZitatAh ok. Dann ist das wohl nix.
Woraus schließt Du dass das nix ist ?

Gruß
Klaus

Bernie110

Zitat von: MzKlMu am Oktober 25, 2023, 16:08:54
ZitatAh ok. Dann ist das wohl nix.
Woraus schließt Du dass das nix ist ?


Aus euren Antworten. 
Will ja keiner sagen wie der richtige Weg ist. 




ebs17

ZitatWill ja keiner sagen wie der richtige Weg ist.
An Deiner Auffassungsgabe müsstest Du noch heftig arbeiten.

ZitatIst das überhaut etwas was man als Funktion darstellen könnte ?
Der Thementitel lautet ähnlich. Ich zeigte unmittelbar, wie aus der Sub eine Funktion wird.
Mit freundlichem Glück Auf!

Eberhard

Bernie110

Zitat von: ebs17 am Oktober 26, 2023, 10:12:24
ZitatWill ja keiner sagen wie der richtige Weg ist.
An Deiner Auffassungsgabe müsstest Du noch heftig arbeiten.

Wow..gleich heftig... naja der Fred kann geschlossen werden. Will die Lösung auf diese unfreundliche Art gar nicht mehr wissen.
Danke trotzdem für eure Zeit.
Lg Bernie





Beaker s.a.

Hallo Bernd,
Nicht persönlich nehmen. Eberhard hat halt die Neigung, die
Fragenden zum Selberdenken anzuregen, was bei manchen oft nicht
gut ankommt.
ZitatIch benutze diese "Public Sub" in mehreren Formularen
Dann brauchst du auf jeden Fall ein allgemeines Modul um die Prozedur
öffentlich zu machen. In diesem Fall reicht aber auch eine Sub, da es
keinen Rückgabewert zu verarbeiten gibt. Die Prozedur verändert ja nur
das übergebene Form.
Ich schreib dir jetzt nicht die ganze Prozedur, gebe dir nur ein paar
Hinweise. Haben aber auch noch Optimierungsbedarf.
Public Sub NL_GetColours(frm As Form)
'hier übergibst du der Prozedur eine Referenz auf das Formular
'Aufruf von jenem so: NL_GetColours Me
'den Wert von NL kannst du somit direkt auslesen
'die Deklarationen der Variablen bleiben wie gehabt, ausser "XNL", die
'du nicht brauchst, weil, zusätzlich deklariere eine Recordset-Variable
Dim rst As DAO.Recordset
'diesen füllst du mit
Currentdb.OpenRecordset ("SELECT * FROM STAMM_NL WHERE NL = " & frm.NL)
'da kannst du auf das Dlookup-Gewitter verzichten und die Werte direkt
'abrufen; ausserdem übergibst du mit der Variablen kein Muster
'sondern den kompletten Wert, also "=" statt "LIKE".

H_R = rst.Fields("H_Farbe_R")
'usw.
'aus Me.NL.Back- bzw. ForeColour
'wird dann
frm.NL.BackColour
gruss ekkehard
--
Frauen aller Länder vereinigt euch! Wir brauchen eine Wiedergeburt des Matriarchats.
Und schickt den Papst in die Wüste! Da kann er 40 Tage auf God(o)t warten.

Bernie110

Hallo Ekkard,
herzlichen Dank ! Besser kann man es nicht erklären. Habs hinbekommen.  :)
Lg Bernie