Seite 1 von 1
Fallunterscheidung
Verfasst: Do, 19.02.2015 11:41
von Jörg
Hallo Fachleute,
vor der Ausführung des nachstehenden Makros möchte ich zuerst prüfen, ob C14 leer ist oder nicht.
Aber ich erhalte die Fehlermeldung: Basic-Syntaxfehler-> unerwartet end sub
Könnte bitte jemand drauf schauen, woran es liegen könnte?
Code: Alles auswählen
Public oDialog4 as Object
sub Abrechnung
Dim Datum as String
oSheet = thisComponent.Sheets(2)
Datum = oSheet.getCellRangeByName("C14").String
if Datum <> "" then
antwort = msgbox("Behandlungsdaten nicht übertragen!!",49,"Verordnung abrechnen?")
if antwort = 2 Then
exit sub
end if
else
if Datum = "" then
rem ----------------------------------------------------------------------
antwort = msgbox("Rezeptdaten erfaßt und eingetragen?",36,"Verordnung abrechnen?")
if antwort = 7 Then
exit sub
end if
odoc = ThisComponent
osheet = odoc.sheets(2)
orange = osheet.getCellRangeByName("F37:U37")
orangeAddress = orange.getrangeaddress
odata()= orange.getdataarray
oZielSheet = oDoc.sheets(3)
c = oZielSheet.getCellRangeByName("A1:A250").queryEmptyCells
oZielCell = c(0).getcellbyposition(0,0)
oZielCellAddress = oZielCell.getcelladdress
X1=oZielCellAddress.column
Y1=oZielCellAddress.row
X2=oZielCellAddress.column+(orangeAddress.EndColumn-orangeAddress.StartColumn)
Y2=oZielCellAddress.Row+(orangeAddress.EndRow-orangeAddress.StartRow)
oZielrange=oZielSheet.getCellRangeByPosition(X1,Y1,X2,Y2)
oZielrange.setdataarray(odata())
rem-------------------------------------------------------------------
oCellRange = osheet.getCellRangeByName("F16:G20")
ocellRange.clearContents(com.sun.star.sheet.CellFlags.VALUE)
oCellRange = osheet.getCellRangeByName("C23:F23")
ocellRange.clearContents(com.sun.star.sheet.CellFlags.DATETIME)
oCellRange = osheet.getCellRangeByName("I5")
ocellRange.clearContents(com.sun.star.sheet.CellFlags.STRING)
rem------------------------------------------------------------
rem get access to the document
mycell = osheet.getCellRangebyName("E12")
mycell.formulalocal= "=WENN(ZÄHLENWENN(Hilfstabelle.$C$2:$C$200;$C$8);SVERWEIS($C$8;Hilfstabelle.$C$2:$M$200;VERGLEICH($E$11;Hilfstabelle.$C$1:$M$1;0);0);"""")"
rem-------------------------------------------------------------
myView = oDoc.CurrentController
mycell = osheet.getCellRangebyName("I5")
myView.Select(mycell)
rem----------------------------------------------------------------------------------------------------
sort_Abr
rem---------------------------------------------------------------------------------
oDialog4.endexecute
rem-------------------------------------------------------------------------------------
Neue_Verordnung_erfassen_Array
end sub
Danke!!
Gruß Jörg
Re: Fallunterscheidung
Verfasst: Do, 19.02.2015 13:03
von balu
Hallo Jörg,
zähl mal ganz genau nach wieviele "if ... then" und wieviele "end if" Du hast. Zu jedem "if ..." gehört abschließend ein "end if".
Gruß
balu
Re: Fallunterscheidung
Verfasst: Do, 19.02.2015 14:10
von Jörg
Hallo Balu,
hab es jetzt so. Krieg zwar keine Fehlermeldung mehr, aber die entsprechende Meldung kommt nicht, obwohl C14 leer ist.
Code: Alles auswählen
Public oDialog4 as Object
sub Abrechnung
Dim Datum as String
oSheet = thisComponent.Sheets(2)
Datum = oSheet.getCellRangeByName("C14").String
if Datum <> "" then
antwort = msgbox("Behandlungsdaten nicht übertragen!!",49,"Verordnung abrechnen?")
if antwort = 2 Then
exit sub
end if
end if
if Datum = "" then
rem ----------------------------------------------------------------------
antwort = msgbox("Rezeptdaten erfaßt und eingetragen?",36,"Verordnung abrechnen?")
if antwort = 7 Then
exit sub
end if
end if
odoc = ThisComponent
osheet = odoc.sheets(2)
orange = osheet.getCellRangeByName("F37:U37")
orangeAddress = orange.getrangeaddress
odata()= orange.getdataarray
oZielSheet = oDoc.sheets(3)
c = oZielSheet.getCellRangeByName("A1:A250").queryEmptyCells
oZielCell = c(0).getcellbyposition(0,0)
oZielCellAddress = oZielCell.getcelladdress
X1=oZielCellAddress.column
Y1=oZielCellAddress.row
X2=oZielCellAddress.column+(orangeAddress.EndColumn-orangeAddress.StartColumn)
Y2=oZielCellAddress.Row+(orangeAddress.EndRow-orangeAddress.StartRow)
oZielrange=oZielSheet.getCellRangeByPosition(X1,Y1,X2,Y2)
oZielrange.setdataarray(odata())
rem-------------------------------------------------------------------
oCellRange = osheet.getCellRangeByName("F16:G20")
ocellRange.clearContents(com.sun.star.sheet.CellFlags.VALUE)
oCellRange = osheet.getCellRangeByName("C23:F23")
ocellRange.clearContents(com.sun.star.sheet.CellFlags.DATETIME)
oCellRange = osheet.getCellRangeByName("I5")
ocellRange.clearContents(com.sun.star.sheet.CellFlags.STRING)
rem------------------------------------------------------------
rem get access to the document
mycell = osheet.getCellRangebyName("E12")
mycell.formulalocal= "=WENN(ZÄHLENWENN(Hilfstabelle.$C$2:$C$200;$C$8);SVERWEIS($C$8;Hilfstabelle.$C$2:$M$200;VERGLEICH($E$11;Hilfstabelle.$C$1:$M$1;0);0);"""")"
rem-------------------------------------------------------------
myView = oDoc.CurrentController
mycell = osheet.getCellRangebyName("I5")
myView.Select(mycell)
rem----------------------------------------------------------------------------------------------------
sort_Abr
rem---------------------------------------------------------------------------------
oDialog4.endexecute
rem-------------------------------------------------------------------------------------
Neue_Verordnung_erfassen_Array
end sub
Möglicherweise liegt es daran?
C14 ist als Datum formatiert.
Gruß
Jörg
P.S.
Im Originalcode hat die lange Zählenwenn-Formel einen Namen("kasse")

Re: Fallunterscheidung
Verfasst: Do, 19.02.2015 14:19
von Jörg
Ich hab ne Klatsche.
das erste
muß heißen = ""
das zweite
muß heißen <>""
Code: Alles auswählen
Public oDialog4 as Object
sub Abrechnung
Dim Datum as String
oSheet = thisComponent.Sheets(2)
Datum = oSheet.getCellRangeByName("C14").String
if Datum = "" then
antwort = msgbox("Behandlungsdaten nicht übertragen!!",49,"Verordnung abrechnen?")
if antwort = 2 Then
exit sub
end if
end if
if Datum <> "" then
rem ----------------------------------------------------------------------
antwort = msgbox("Rezeptdaten erfaßt und eingetragen?",36,"Verordnung abrechnen?")
if antwort = 7 Then
exit sub
end if
end if
odoc = ThisComponent
osheet = odoc.sheets(2)
orange = osheet.getCellRangeByName("F37:U37")
orangeAddress = orange.getrangeaddress
odata()= orange.getdataarray
oZielSheet = oDoc.sheets(3)
c = oZielSheet.getCellRangeByName("A1:A250").queryEmptyCells
oZielCell = c(0).getcellbyposition(0,0)
oZielCellAddress = oZielCell.getcelladdress
X1=oZielCellAddress.column
Y1=oZielCellAddress.row
X2=oZielCellAddress.column+(orangeAddress.EndColumn-orangeAddress.StartColumn)
Y2=oZielCellAddress.Row+(orangeAddress.EndRow-orangeAddress.StartRow)
oZielrange=oZielSheet.getCellRangeByPosition(X1,Y1,X2,Y2)
oZielrange.setdataarray(odata())
rem-------------------------------------------------------------------
oCellRange = osheet.getCellRangeByName("F16:G20")
ocellRange.clearContents(com.sun.star.sheet.CellFlags.VALUE)
oCellRange = osheet.getCellRangeByName("C23:F23")
ocellRange.clearContents(com.sun.star.sheet.CellFlags.DATETIME)
oCellRange = osheet.getCellRangeByName("I5")
ocellRange.clearContents(com.sun.star.sheet.CellFlags.STRING)
rem------------------------------------------------------------
rem get access to the document
mycell = osheet.getCellRangebyName("E12")
mycell.formulalocal= "=WENN(ZÄHLENWENN(Hilfstabelle.$C$2:$C$200;$C$8);SVERWEIS($C$8;Hilfstabelle.$C$2:$M$200;VERGLEICH($E$11;Hilfstabelle.$C$1:$M$1;0);0);"""")"
rem-------------------------------------------------------------
myView = oDoc.CurrentController
mycell = osheet.getCellRangebyName("I5")
myView.Select(mycell)
rem----------------------------------------------------------------------------------------------------
sort_Abr
rem---------------------------------------------------------------------------------
oDialog4.endexecute
rem-------------------------------------------------------------------------------------
Neue_Verordnung_erfassen_Array
end sub
Schaun wir mal, ob es jetzt funkt.
Re: Fallunterscheidung
Verfasst: Fr, 20.02.2015 08:12
von Jörg
Hallo Balu,
unabhängig von den Vergleichsoper. (bin mit meinen Schltflächen durcheinander gekommen)funktioniert alles.
Danke für Deinen Hinweis.
Eine Frage dazu hätte ich noch.
Wann und wie genau verwendet man "else" und welche Bedeutung hat dieses?
Danke und schönen Tag.
Gruß Jörg
Re: Fallunterscheidung
Verfasst: Fr, 20.02.2015 08:21
von Stephan
Wann und wie genau verwendet man "else" und welche Bedeutung hat dieses?
Else kennzeichnet die Alternative die immer dann zur Anwendung kommen soll wenn keine der zu prüfenden Bedingungen zutrifft.
Gruß
Stephan
Re: Fallunterscheidung
Verfasst: Fr, 20.02.2015 09:10
von Jörg
Hallo Stephan,
danke für die Antwort. Na ja mathem. Logik war noch nie so mein Ding.
habe hier mal einen Beispielcode.
Code: Alles auswählen
if Rechnungsdatum <>"" and Rezeptdatum <>"" and vom <>"" and bis <>"" and Anrede <>"" then
RechnungErstellen
else
Rechnungsdatum = ""
msgbox ("Rechungsdatum fehlt!",0,"Rechnung erstellen")
exit sub
antwort = msgbox ("Abrechnungsdaten nicht vollständig!" & Chr(13) & "Anschrift" & Chr(13) & "Rechnungsdatum"& Chr(13) &"Rezeptdatum"& Chr(13) &"Behandlungsbeginn -ende"& chr(13) & "Rot umrandete Felder beachten !!!",48, "Rechnung erstellen")
end if
end sub
Wie müßten bsp. die Anweisungen aussehen, wenn ich jede einzelne Zelle einzeln abfragen möchte, um eine konkrete Antort zu erhalten?
Einfach mit "else" weitermachen?
Gruß Jörg
Re: Fallunterscheidung
Verfasst: Fr, 20.02.2015 09:30
von Stephan
Na ja mathem. Logik war noch nie so mein Ding.
naja, das ist doch nun aber wirklich einfach mit Else. Else ist immer das was getan wird wenn alles Andere nicht zutrifft.
z.B.
ist die Ampel rot dann: bleibe stehen
ist die Ampel gelb dann: halte an
ist die Ampel grün dann: fahre
tritt das alles nicht zu dann: ELSE,
d.h. es gelten die normalen Vorfahrtsregeln UNABHÄNGIG davon ob die Ampel gelb blinkt, garkein Licht zeigt, von einem LKW umgefahren wurde, mit einer Plane angedeckt ist, ...
Wie müßten bsp. die Anweisungen aussehen, wenn ich jede einzelne Zelle einzeln abfragen möchte, um eine konkrete Antort zu erhalten?
Da Dein Code auf keinerlei Zelle Bezug nimmt kann ich das nicht beantworten.
Re: Fallunterscheidung
Verfasst: Fr, 20.02.2015 09:37
von Jörg
Zu den Zellen.
Rechnungsnummer, Rechnungsdatum, Anrede, usw. sind die Zellen.
Code: Alles auswählen
Rechnungsdatum = oSheet.getCellRangeByName("B23").String
Gruß Jörg
Re: Fallunterscheidung
Verfasst: Fr, 20.02.2015 13:48
von balu
Hallo Jörg,
Wann und wie genau verwendet man "else" und welche Bedeutung hat dieses?
Eine IF...THEN kann man durchaus mit der Calc Funktion =WENN() vergleichen. Da gibt es ja den WENN-Teil der die Überprüfung durchführt (IF blabla) und wenn die Überprüfung zutrifft DANN (THEN). Und bei =WENN() muss man nicht unbedingt den SONST-Teil aufführen. So ist das auch bei der IF. Falls man aber doch den SONST-Teil braucht muss dieser aufgeführt und ausgeführt werden. Und bei der IF geschieht das durch die Anweisung ELSE.
Um das nochmal kurz zu verdeutlichen.
WENN DANN SONST
IF THEN ELSE
Und das END IF ist so gesehen die schließende Klammer ) der WENN.
Alles Klar
Wie müßten bsp. die Anweisungen aussehen, wenn ich jede einzelne Zelle einzeln abfragen möchte, um eine konkrete Antort zu erhalten?
Was willst Du denn überhaupt erreichen? Eine konkrete Antwort kannst Du ja immer bekommen egal wie Du die IF...THEN aufbaust, blos wie soll diese Antwort aussehen, etwa z.B. "Halt Stop, da fehlt was" (allgemein gehalten), oder sehr präzise "Es wurde kein Name eingetragen, bitte korrigieren", oder "Es wurde kein Rechnungsdatum eingetragen, bitte korrigieren"?
Eine allgemein gehaltene Info hast Du ja schon hinbekommen. Jetzt gehts ja nur eventuell darum eine präzise Info auszugeben. Doch dazu werde ich jetzt keine weitere Hilfestellung geben, da ich den gesamten Zusammenhang der Datei nicht kenne. Denn mir ist nicht klar, und es ist aus deinem Beispielcode nicht ersichtlich, wie Du die Datenerfassung machst. Geht es denn überhaupt darum das bei der Datenerfassung eine Überprüfung stattfinden soll, oder willst Du eine nachträgliche Überprüfung der vorhandenen Daten durchführen?
Und je nachdem ob bei Datenerfassung, oder nachträglich Daten überprüft werden sollen, gibt es verschiedene Methoden dies durchzuführen die auch dementsprechend mehr oder weniger komplex sein können. Und deshalb brauchen wir eine Beispieldatei und mehr Informationen dazu.
Gruß
balu
Re: Fallunterscheidung
Verfasst: Fr, 20.02.2015 15:37
von Jörg
Hallo balu,
vielen Dank für die ausführliche Beschreibung.
Der Vergleich mit WENN-> Dann;Sonst war sehr anschaulich.
Ich denke das oben von mir zitierte Makro krieg ich selbst umgebaut. Ist auch nicht ganz so wichtig. Hab ja noch die bedingte Formatierung drin.
msgbox
Das Makro dient mir zur Überprüfung der Vollständigkeit der Eingaben bevor ich diese per Makro aus der Eingabemaske in die Tabelle schicke.
Beim anderen Thema von mir (Doppelte Einträge) ist mir noch nichts eingefallen.
Gruß Jörg