Eingabeprüfung

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

Jörg
*****
Beiträge: 401
Registriert: Mo, 21.10.2013 12:05

Eingabeprüfung

Beitrag von Jörg »

Hallo Fachleute,

mit nachstehendem Makro möchte die Richtigkeit von Eingaben prüfen.

Code: Alles auswählen

Sub HM_check
myDoc = thisComponent
mySheet = myDoc.Sheets(2)
	Dim Indikationsschluessel as String, Positionsnummer1 as String, Positionsnummer2 as String, Positionsnummer3 as String, Positionsnummer4 as String, Positionsnummer5 as String
    Dim  Anzahl1 as String, Anzahl2 as String, Anzahl3 as String, Anzahl4 as String, Anzahl5 as String
	oSheet = thisComponent.Sheets.getbyname("Eingabemaske Abr_Rechnung")
	Indikationsschluessel = oSheet.getCellRangeByName("D12").string
	Positionsnummer1 = oSheet.getCellRangeByName("F16").String
	Positionsnummer2 = oSheet.getCellRangeByName("F17").String
	Positionsnummer3 = oSheet.getCellRangeByName("F18").String
	Positionsnummer4 = oSheet.getCellRangeByName("F19").String
	Positionsnummer5 = oSheet.getCellRangeByName("F20").String
	Anzahl1 = oSheet.getCellRangeByName("G16").String
	Anzahl2 = oSheet.getCellRangeByName("G17").String
	Anzahl3 = oSheet.getCellRangeByName("G18").String
	Anzahl4 = oSheet.getCellRangeByName("G19").String
	Anzahl5 = oSheet.getCellRangeByName("G20").String
	
	if Indikationsschluessel = "Ext1a" and Positionsnummer1 = "21201" and Anzahl1 = "6" then
	
msgbox "Daten o.k."
	else 
msgbox "Heilmittel oder Anzahl der Behandlungen falsch!	"
end if
end sub
Allerdings gibt es fast unendliche Kombinationen.
z.Bsp. so

Code: Alles auswählen

if Indikationsschluessel = "WS2a" and Positionsnummer1 = "21201" and Anzahl1 = "6" then
oder

Code: Alles auswählen

if Indikationsschluessel = "Ext1a" and Positionsnummer1 = "20501" and Anzahl1 = "6" then
Kann man das irgendwie zusammenfassen, oder muß ich für jede Kombination eine if-Anweisung schreiben?

Vielen Dank.
Gruß Jörg
Gruß Jörg

Win 10 Pro AOO 4.1.15
F3K Total
********
Beiträge: 3724
Registriert: Mo, 28.02.2011 17:49

Re: Eingabeprüfung

Beitrag von F3K Total »

Na,
irgendwo wirst du die "Gültigen Kombinationen" doch haben.
Du könntest Sie auf einem eigenen Tabellenblatt speichern (hat ja schiesslich 1.048.576 Zeilen)
Dann per Makro auslesen und in einer Schleife verarbeiten. Dann bräuchtest du nur ein einziges IF.
Gruß R
Jörg
*****
Beiträge: 401
Registriert: Mo, 21.10.2013 12:05

Re: Eingabeprüfung

Beitrag von Jörg »

hallo,
da hab ich ja die Richtung.
Die Tabelle zu erstellen krieg ich ja noch hin.
Aber dann gehts auch schon los.
Den Begriff Schleife hab ich schon mehrmals gelesen, hat u.a. was mit for next zu tun(?).
Bei Dannenhöfer steht m.E. nicht soviel außer:
"For..Next-Anweisung
Wiederholt die zwischen der For- und der Next-Anweisung aufgeführten Anweisungen so oft, bis der Schleifenzähler den angegebenen Wert erreicht hat."
Vielleicht habt Ihr noch einige Hinweise?

Gruß Jörg
Gruß Jörg

Win 10 Pro AOO 4.1.15
F3K Total
********
Beiträge: 3724
Registriert: Mo, 28.02.2011 17:49

Re: Eingabeprüfung

Beitrag von F3K Total »

Wenn du ein Beispieldokument hochlädst ...
Jörg
*****
Beiträge: 401
Registriert: Mo, 21.10.2013 12:05

Re: Eingabeprüfung

Beitrag von Jörg »

Hallo,

Habe mal ein Beispieldokument zusammengestellt.
Den Spalten in Tabelle 2 habe ich Namen gegeben.
Natürlich fehlen noch ein "paar" gültige Kombinationen.
Tabelle 1:
Zellen F16:F17
In der Praxis können beide Zellen Werte enthalten, die in Bezug zu Zelle D12 stehen.
Meine erste Frage ist eigentlich:
Wie lese ich die Spalten/Zeilen in Tabelle 2 aus.
Bei Dannenhöfer steht ja wie ich die Werte einer Zelle lese und auch wie ich Zugriff auf eine Spalte bzw. Zeile bekomme.
Aber denn hakts bei mir. :oops:

Gruß und schönen Sonntag noch
Jörg
Eingabeprüfung.ods
(16.55 KiB) 55-mal heruntergeladen
Gruß Jörg

Win 10 Pro AOO 4.1.15
mikeleb
*******
Beiträge: 1427
Registriert: Fr, 09.12.2011 16:50

Re: Eingabeprüfung

Beitrag von mikeleb »

Hallo,

die Eingabeprüfung geht auch ohne Makro.
Mit folgender Formel wird die Eingabe in Zeile 16 geprüft:

Code: Alles auswählen

=WENN(SUMMENPRODUKT(Indikationsschlüssel=D12;Positionsnummer=WERT(F16);Anzahl>=G16);"gültig";"ungültig")
Noch eine Anmerkung: Es bietet sich an, in den Gültigkeitsbedingungen die von dir benannten Bereiche zu verwenden und diese auf die wirklich genutzten Zeilen zu beschränken. Der Bereich "Anzahl" sollte anders benannt werden, um eine Verwechslung mit der internen Funktion Anzahl() zu vermeiden.
Dateianhänge
Eingabeprüfung_ohne_Makro.ods
(27.05 KiB) 57-mal heruntergeladen
Gruß,
mikeleb
F3K Total
********
Beiträge: 3724
Registriert: Mo, 28.02.2011 17:49

Re: Eingabeprüfung

Beitrag von F3K Total »

Hi mikele,
klasse Lösung!
Eine kleine Anmerkung, die Formeln

Code: Alles auswählen

SUMMENPRODUKT(Indikationsschlüssel=D12;Positionsnummer=WERT(F16);Anzahl>=G16)
und

Code: Alles auswählen

NICHT(SUMMENPRODUKT(Indikationsschlüssel=D12;Positionsnummer=WERT(F16);Anzahl>=G16))
können hervorragend in einer bedingten Formatierung verwendet werden, so dass man gültige z.B. grün und ungültige rot darstellen kann.
Gruß R
Dateianhänge
Eingabeprüfung_ohne_Makros_bedingte_Formatierung.ods
(11.99 KiB) 56-mal heruntergeladen
mikeleb
*******
Beiträge: 1427
Registriert: Fr, 09.12.2011 16:50

Re: Eingabeprüfung

Beitrag von mikeleb »

Hallo F3K Total,

so tat ich (zumindest mit rot) ohne es zu verraten :)
Gruß,
mikeleb
Jörg
*****
Beiträge: 401
Registriert: Mo, 21.10.2013 12:05

Re: Eingabeprüfung

Beitrag von Jörg »

Hallo Ihr beiden,

ich danke Euch für Eure Lösungen, obwohl die Idee von F3K ursprünglich eine andere war. Aber so gehts.
Ich werde es in der Orginaldok. umsetzen.
Hoffe, daß die Tabelle überschaubar bleibt. Namen und Bereiche passe ich entsprechend an.
Kann sein, daß vielleicht noch eine Bedingung hinzukommt. Aber schaun wir mal.

Also vielen Dank und schönen Sonntag noch.

Gruß Jörg
Gruß Jörg

Win 10 Pro AOO 4.1.15
F3K Total
********
Beiträge: 3724
Registriert: Mo, 28.02.2011 17:49

Re: Eingabeprüfung

Beitrag von F3K Total »

Hallo,
Jörg hat geschrieben: ... die Idee von F3K ursprünglich eine andere war.
T'schuldigung, die Verwendung von Makros war nicht meine Idee. Allein weil ich nicht wusste, wie die Datei aufgebaut ist, habe ich einen möglichen Weg vorgeschlagen.
Grundsätzlich bin ich der Ansicht, dass, wenn möglich, es immer besser ist, Calc-Funktionen zu verwenden und nur dann auf Makros zurückzugreifen, wenn die Calc-Funktionen nicht ausreichen.
Dieser Thread ist ein hübsches Beispiel dafür, wie durch die Bereitstellung eines Beispieldokumentes überhaupt erst mögliche alternative Lösungen angeboten werden können, auf die der Fragesteller nie gekommen wäre.

Darum ein Tipp:
Geschlossenen Fragen sind schlecht.
Offene Fragen, ggf. mit Beispiel, sind hervorragend.

Hättest Du beschrieben, was du am Ende erreichen möchtest, wette ich, wäre eine Lösung herausgekommen, bei der du ohne Makro
  • erst den Indikationsschlüssel gewählt hättest
  • dann in der Gültigkeitsliste nur zu diesem Schlüssel zulässige Positionsnummern angeboten bekommen hättest
  • nach deren Festlegung dann nur die zulässigen Anzahlen auswählbar gewesen wären
Also eine Datei, in der es nicht möglich wäre, falsche Kombinationen überhaupt einzugeben.

Man kann nicht alles haben ... :wink:

Gruß R
Antworten