Kontrolle Zellinhalte

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

Moderator: Moderatoren

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

Kontrolle Zellinhalte

Beitrag von Jörg »

Hallo Fachleute,
habe ein Problem mit nachfolgendem Code-Abschnitt.
Vor der Datenübergabe in eine Tabelle soll nacheinander geprüft werden, ob die Bedingungen zutreffen.
Das klappt auch soweit, bis auf die letzte Bedingung "Regelfall".
Vielleicht ginge dieser Abschnitt auch eleganter ?
Würde mich über Hinweise freuen.

Gruß Jörg

Code: Alles auswählen

odoc = ThisComponent
        osheet = odoc.sheets(2)
 Dim Datum as String
 Dim Kasse as String
 Dim Indikationsschluessel as String
 Dim Code as String 
 Dim Zuzahlung as String
 Dim Regelfall as String
    Datum = oSheet.getCellRangeByName("C14").STRING
    Kasse = oSheet.getCellRangeByName("E12").STRING
    Indikationsschluessel =  oSheet.getCellRangeByName("D12").STRING
    Code =  oSheet.getCellRangeByName("C12").STRING   
    Zuzahlung = oSheet.getCellRangeByName("A12").STRING
    Regelfall = oSheet.getCellRangeByName("E17").STRING
    
if Datum = "" then
msgbox("Behandlungsdaten fehlen!",48,"Gesamtliste")
exit sub

elseif  Kasse = "privat" then
msgbox ("Nur Kassenpatienten",48, "Gesamtliste")
exit sub

elseif Indikationsschluessel = "" then
msgbox ("Indikationsschlüssel fehlt",48, "Gesamtliste")
exit sub

elseif Code = "" then
msgbox ("ICD_Code fehlt",48, "Gesamtliste")
exit sub

if Zuzahlung = "O" then
antwort = msgbox ("Patient von der Zuzahlung befreit?",36,"Gesamtliste")
if antwort = 7 then
exit sub

elseif Regelfall = "X" then
antwort = msgbox ("Verordnung außerhalb des Regelfalls?",36,"Gesamtliste")
if antwort = 7 then
exit sub
end if
end if
end if
end if
Gruß Jörg

Win 10 Pro AOO 4.1.15
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Kontrolle Zellinhalte

Beitrag von balu »

Moin moin, Jörg!
habe ein Problem mit nachfolgendem Code-Abschnitt.
Was für ein Problem?

Das klappt auch soweit, bis auf die letzte Bedingung "Regelfall".
Vielleicht ein Groß- Kleinschreibungsproblem? X ist nicht gleich x, und x ist nicht gleich X :wink:.
Und in diesem Falle würde ich dann das so machen.

Code: Alles auswählen

if UCASE(Regelfall) = "X" then
Dadurch wird ein in der Tabelle klein geschriebenes x in der Abfrage auf groß geschrieben umgewandelt. Und wenn in der Tabelle ein groß geschriebenes X steht, dann bleibt es auch groß, in der Abfrage.

Vielleicht ginge dieser Abschnitt auch eleganter ?
Der Abschnitt "Regelfall", oder der gesamte Code-Abschnitt?
Aber was heißt schon "eleganter"?
Wenn man nicht das gesamte Konzept deiner Datei kennt, also vor Augen hat, dann kann man wahrlich schlecht sagen was eleganter ist.

Ich sehe in deinem Code 3 mal fehlt/fehlen. Das könnte man unter Umständen irgendwie komprimieren, vereinfachen. Aber so viel würde das auch nicht bringen, da ja noch die anderen Hinweise fehlen.

Du weißt schon, dass auch die Texte in einer Msgbox

Code: Alles auswählen

msgbox ("Nur Kassenpatienten",48, "Gesamtliste")
auch durch Zelladressen, oder durch Inhalte eines Makro-Array ersetzt werden können. Dadurch bräuchte man dann nur noch eine msgbox, und die jeweiligen Texte holt man sich dann z.B. aus einem Array. Mal ein Beispiel ganz ganz grob dargestellt (ohne Anspruch auf funktionalität).

Code: Alles auswählen

[...]
HinweisText(1) = "Behandlungsdaten fehlen!"
HinweisText(2) = "Nur Kassenpatienten"
HinweisText(3) = "Indikationsschlüssel fehlt"
[...]
msgbox (HinweisText(i),48, "Gesamtliste")
[...]
Aber genau so gut könnte man einen Dialog anzeigen, und dort dann die dementsprechenden Infos ausgeben lassen was wo noch fehlt. Und nein, ich erstelle jetzt keinen Beispieldialog, da ich ja nicht weiß ob das für dich passend wäre oder nicht. Denn wenn in der gesamten Datei kein Dialog vorhanden ist, könnte so etwas aufeinmal störend oder irretierend sein.

Also noch mal zurück zu meiner Frage von vorhin: Aber was heißt schon "eleganter"?



Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Kontrolle Zellinhalte

Beitrag von balu »

So könnte, so rein theoretisch, mein Vorschlag mit den Array und der msgbox aussehen. Bin blos nicht sicher ob das bei dir richtig funktioniert. Ist also mehr als ein Denkanstoß zu betrachten.

Code: Alles auswählen

Sub Main
	Dim Datum as String, Kasse as String, Indikationsschluessel as String
	Dim Code as String, Zuzahlung as String, Regelfall as String
	Dim sHinweisText(1 to 6) as String, sCheck(1 to 6) as String
	Dim aVergleichsWert As Variant

	osheet = ThisComponent.sheets(2)

	sHinweisText(1) = "Behandlungsdaten fehlen!"
	sHinweisText(2) = "Nur Kassenpatienten"
	sHinweisText(3) = "Indikationsschlüssel fehlt"
	sHinweisText(4) = "ICD_Code fehlt"
	sHinweisText(5) = "Patient von der Zuzahlung befreit?"
	sHinweisText(6) = "Verordnung außerhalb des Regelfalls?"

	aVergleichsFaktor = Array("","privat","", "", "0", "X")

	sCheck(1) = oSheet.getCellRangeByName("C14").STRING
	sCheck(2) = oSheet.getCellRangeByName("E12").STRING
	sCheck(3) = oSheet.getCellRangeByName("D12").STRING
	sCheck(4) = oSheet.getCellRangeByName("C12").STRING
	sCheck(5) = oSheet.getCellRangeByName("A12").STRING   
	sCheck(6) = oSheet.getCellRangeByName("E17").STRING

		for i = 1 to 6
			if i <5 then 
				ii = 48
			else
				ii = 36
			endif
			
			if sCheck(i) = aVergleichsWert(i-1) then
				antwort = msgbox (sHinweisText(i), ii, "Gesamtliste")
				if ii = 36 and antwort = 7 OR ii = 48 and antwort = 0 then
					goto ende
				end if
			endif
		next i
ende:
exit sub
End Sub

Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
Jörg
*****
Beiträge: 401
Registriert: Mo, 21.10.2013 12:05

Re: Kontrolle Zellinhalte

Beitrag von Jörg »

Hallo,
@balu
vielen Dank für Deine Mühe.
Aber leider hakt es immer noch an der gleichen Stelle.
E17 "X" ist ein Referenzwert "an" aus einem Markierfeld. Groß-oder Kleinschreibung habe ich beachtet.
A12 "O" ist ebenfalls ein Referenzwert (hier aber O für "aus") da funktioniert es.
Beide Zellen sind als Zahl standard formatiert.
Hier nochmal der komplette Code. Deinen Code hab ich erst mal gespeichert. Wie gesagt, er funktioniert auch bis auf "E17'".
Hab nich wirklich ne Idee, warum es in A12 funktioniert und in E17 nicht.
Hm komisch. hab nochmal was probiert.
Wenn in A12 "O" steht, ich die antwort ja (msgbox Ja/nein)klicke, läuft das makro weiter und fragt dann richtigerweise nach E17 wenn dort "X" steht.
Steht jedoch in A12 "X" läuft das Makro durch ohne E17 anzusprechen :? :?

Gruß Jörg

Code: Alles auswählen

sub Alle_Daten
odoc = ThisComponent
        osheet = odoc.sheets(2)
 Dim Datum as String
 Dim Kasse as String
 Dim Indikationsschluessel as String
 Dim Code as String 
 Dim Zuzahlung as String
 Dim Regelfall as String
    Datum = oSheet.getCellRangeByName("C14").STRING
    Kasse = oSheet.getCellRangeByName("E12").STRING
    Indikationsschluessel =  oSheet.getCellRangeByName("D12").STRING
    Code =  oSheet.getCellRangeByName("C12").STRING   
    Zuzahlung = oSheet.getCellRangeByName("A12").STRING
    Regelfall = oSheet.getCellRangeByName("E17").STRING
    
if Datum = "" then
msgbox("Behandlungsdaten fehlen!",48,"Gesamtliste")
exit sub

elseif  Kasse = "privat" then
msgbox ("Nur Kassenpatienten",48, "Gesamtliste")
exit sub

elseif Indikationsschluessel = "" then
msgbox ("Indikationsschlüssel fehlt",48, "Gesamtliste")
exit sub

elseif Code = "" then
msgbox ("ICD_Code fehlt",48, "Gesamtliste")
exit sub

elseif Zuzahlung = "O" then
antwort = msgbox ("Patient von der Zuzahlung befreit?",36,"Gesamtliste")
if antwort = 7 then
exit sub

elseif Regelfall = "X" then
antwort = msgbox ("Verordnung außerhalb des Regelfalls?",36,"Gesamtliste")
if antwort = 7 then
exit sub
end if
end if
end if


        orange = osheet.getCellRangeByName("H39:AC39")
        orangeAddress = orange.getrangeaddress
        odata()= orange.getdataarray
                for i=lbound(odata(0)) to ubound(odata(0))
           if odata(0)(i)=0 then odata(0)(i)=""
        next
        oZielSheet = oDoc.sheets(13)
        c = oZielSheet.getCellRangeByName("A1:A5000").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("C14:C21")           
     ocellRange.clearContents(com.sun.star.sheet.CellFlags.DATETIME)        

end sub         
Gruß Jörg

Win 10 Pro AOO 4.1.15
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Kontrolle Zellinhalte

Beitrag von balu »

Hallo Jörg,

habe jetzt keine Zeit mehr, wollte nur sagen das ich den falschen Code von mir gepostet hatte.
Diese Zeile

Code: Alles auswählen

   aVergleichsFaktor = Array("","privat","", "", "0", "X")
muss richtig lauten

Code: Alles auswählen

   aVergleichsWert = Array("","privat","", "", "0", "X")

Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
Jörg
*****
Beiträge: 401
Registriert: Mo, 21.10.2013 12:05

Re: Kontrolle Zellinhalte

Beitrag von Jörg »

Hallo balu,
war mir ehrlich gesagt auch schon aufgefallen. Dim -Zeile so, im Verlauf so.
aber ich als Laie.
Werd ich auf jeden Fall probieren.
Danke.
Gruß Jörg
Gruß Jörg

Win 10 Pro AOO 4.1.15
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Kontrolle Zellinhalte

Beitrag von balu »

Hallo Jörg,

konnte doch noch etwas Zeit erübrigen.
war mir ehrlich gesagt auch schon aufgefallen. Dim -Zeile so, im Verlauf so.
Ja dann is gut :-)

Aber weißt Du was?
Ich bin heute mal wieder in die berühmte Oval-Kreis-Falle getappst :oops: . Kennst Du den Unterschied zwischen O und 0? Das erstere ist der Buchstabe O, und das zweitere ist die Zahl 0.
Zu sehen in der zu ändernden Zeile aVergleichsWert.... Ist jetzt aber geändert.

So, aber nun folgender Vorschlag an Code Änderung.

Code: Alles auswählen

Sub Main
   Dim sHinweisText(1 to 6) as String, sCheck(1 to 6) as String
   Dim aVergleichsWert As Variant

   osheet = ThisComponent.sheets(2)

   sHinweisText(1) = "Behandlungsdaten fehlen!"
   sHinweisText(2) = "Nur Kassenpatienten"
   sHinweisText(3) = "Indikationsschlüssel fehlt"
   sHinweisText(4) = "ICD_Code fehlt"
   sHinweisText(5) = "Patient von der Zuzahlung befreit?"
   sHinweisText(6) = "Verordnung außerhalb des Regelfalls?"

   aVergleichsWert = Array("","privat","", "", "O", "X")

   sCheck(1) = oSheet.getCellRangeByName("C14").STRING
   sCheck(2) = oSheet.getCellRangeByName("E12").STRING
   sCheck(3) = oSheet.getCellRangeByName("D12").STRING
   sCheck(4) = oSheet.getCellRangeByName("C12").STRING
   sCheck(5) = oSheet.getCellRangeByName("A12").STRING
   sCheck(6) = oSheet.getCellRangeByName("E17").STRING

      for i = 1 to 6
         if i <5 then
            ii = 48
         else
            ii = 36
         endif
         
         if sCheck(i) = aVergleichsWert(i-1) then

            antwort = msgbox (sHinweisText(i), ii, "Gesamtliste")
            if ii = 36 and antwort = 7 OR ii = 48 and antwort = 1 then
               goto ende
            else
            	if ii = 36 and antwort = 6 then
            		goto weiter
            	end if            	
            end if
         endif
         weiter:
      next i
ende:
exit sub
End Sub
Und damit müsste das hier
Wenn in A12 "O" steht, ich die antwort ja (msgbox Ja/nein)klicke, läuft das makro weiter und fragt dann richtigerweise nach E17 wenn dort "X" steht.
Steht jedoch in A12 "X" läuft das Makro durch ohne E17 anzusprechen
sich eigentlich erledigt haben, hoffe ich zumindest.

Falls Du verständigungsprobleme mit dem Code hast, musst Du es nur sagen.

Wünsche dir viel Glück und Spaß damit. :)



Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
Jörg
*****
Beiträge: 401
Registriert: Mo, 21.10.2013 12:05

Re: Kontrolle Zellinhalte

Beitrag von Jörg »

Hallo balu,
danke nochmals für Deine Hilfe.
Das mit der Ovalfalle hätte mir aber auch auffallen können. Der Teufel liegt eben im Detail.
Aber jetzt funktioniert es.
Wünsche Dir ein schönes Wochenende.
Gruß Jörg
Gruß Jörg

Win 10 Pro AOO 4.1.15
Jörg
*****
Beiträge: 401
Registriert: Mo, 21.10.2013 12:05

Re: Kontrolle Zellinhalte

Beitrag von Jörg »

Hallo, habe jetzt doch noch eine Frage.
Nachstehendes Makro wollte ich nach der Prüfung (z.Bsp. auch nach der Antwort ja = 6) laufen lassen.

Code: Alles auswählen

 sub Alle_Daten
      odoc = ThisComponent
      osheet = odoc.sheets(2)
      orange = osheet.getCellRangeByName("H39:AC39")
        orangeAddress = orange.getrangeaddress
        odata()= orange.getdataarray
                for i=lbound(odata(0)) to ubound(odata(0))
           if odata(0)(i)=0 then odata(0)(i)=""
        next
        oZielSheet = oDoc.sheets(13)
        c = oZielSheet.getCellRangeByName("A1:A5000").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())
        end sub
Bisher hatte ich das in dem Fall, wenn mehrere Makros nacheinander laufen sollen, einfach die Namen der Makros drangehangen.
Im vorliegendem Fall so.

Code: Alles auswählen

Sub Main
oCalc = thisComponent
     oSheet = oCalc.sheets(2)   
   Dim Datum as String, Kasse as String, Indikationsschluessel as String
   Dim Code as String, Zuzahlung as String, Regelfall as String
   Dim sHinweisText(1 to 6) as String, sCheck(1 to 6) as String
   Dim aVergleichsWert As Variant
 
   sHinweisText(1) = "Behandlungsdaten fehlen!"
   sHinweisText(2) = "Nur Kassenpatienten"
   sHinweisText(3) = "Indikationsschlüssel fehlt"
   sHinweisText(4) = "ICD_Code fehlt"
   sHinweisText(5) = "Patient von der Zuzahlung befreit?"
   sHinweisText(6) = "Verordnung außerhalb des Regelfalls?"

     aVergleichsWert = Array("","privat","", "", "O", "X")

   sCheck(1) = oSheet.getCellRangeByName("C14").STRING
   sCheck(2) = oSheet.getCellRangeByName("E12").STRING
   sCheck(3) = oSheet.getCellRangeByName("D12").STRING
   sCheck(4) = oSheet.getCellRangeByName("C12").STRING
   sCheck(5) = oSheet.getCellRangeByName("A12").STRING   
   sCheck(6) = oSheet.getCellRangeByName("E17").STRING

      for i = 1 to 6
         if i <5 then
            ii = 48
         else
            ii = 36
         endif
         
         if sCheck(i) = aVergleichsWert(i-1) then
            antwort = msgbox (sHinweisText(i), ii, "Gesamtliste")
            if ii = 36 and antwort = 7 OR ii = 48 and antwort = 0 then
               goto ende
            end if
         endif
      next i
ende:
exit sub
Alle_Daten
End Sub
Aber leider tut sich nix. :(
Gruß Jörg
Gruß Jörg

Win 10 Pro AOO 4.1.15
TrueColor
******
Beiträge: 547
Registriert: Do, 11.03.2010 11:23

Re: Kontrolle Zellinhalte

Beitrag von TrueColor »

Jörg hat geschrieben:

Code: Alles auswählen

[...]
  exit sub
  Alle_Daten
End Sub
Aber leider tut sich nix. :(
Du meinst, "Alle_Daten" wird nicht ausgeführt? Kann nicht, weil du das Sub vorher beendest.

Code: Alles auswählen

[...]
goto Marke: ' <-- Sprungverweis
[...]
Marke ' <-- Sprungziel
Exit Sub
ist IMHO Unsinn. Wenn auf das Sprungziel eine Exitanweisung folgt, kannst du die Exitanweisung auch direkt an Stelle des Sprungverweises setzen.
System:
LibO 6 + LibO 7
Jörg
*****
Beiträge: 401
Registriert: Mo, 21.10.2013 12:05

Re: Kontrolle Zellinhalte

Beitrag von Jörg »

Hallo,
danke für die Antwort.
Aber wenn ich den Code richtig verstanden habe, gilt die exit - Anweisung für den Fall

Code: Alles auswählen

if sCheck(i) = aVergleichsWert(i-1) then
            antwort = msgbox (sHinweisText(i), ii, "Gesamtliste")
            if ii = 36 and antwort = 7 OR ii = 48 and antwort = 0 then
               goto ende
               ................
                    next i
ende:
exit sub
Wenn jedoch die antwort = 6, dann müßte es doch eigentlich durchlaufen.
Hab jetzt die exit-Anweisung direkt hinter then gestellt.

Code: Alles auswählen

Sub Main
oCalc = thisComponent
     oSheet = oCalc.sheets(2)   
   Dim Datum as String, Kasse as String, Indikationsschluessel as String
   Dim Code as String, Zuzahlung as String, Regelfall as String
   Dim sHinweisText(1 to 6) as String, sCheck(1 to 6) as String
   Dim aVergleichsWert As Variant
 
   sHinweisText(1) = "Behandlungsdaten fehlen!"
   sHinweisText(2) = "Nur Kassenpatienten"
   sHinweisText(3) = "Indikationsschlüssel fehlt"
   sHinweisText(4) = "ICD_Code fehlt"
   sHinweisText(5) = "Patient von der Zuzahlung befreit?"
   sHinweisText(6) = "Verordnung außerhalb des Regelfalls?"

     aVergleichsWert = Array("","privat","", "", "O", "X")

   sCheck(1) = oSheet.getCellRangeByName("C14").STRING
   sCheck(2) = oSheet.getCellRangeByName("E12").STRING
   sCheck(3) = oSheet.getCellRangeByName("D12").STRING
   sCheck(4) = oSheet.getCellRangeByName("C12").STRING
   sCheck(5) = oSheet.getCellRangeByName("A12").STRING   
   sCheck(6) = oSheet.getCellRangeByName("E17").STRING

      for i = 1 to 6
         if i <5 then
            ii = 48
         else
            ii = 36
         endif
         
         if sCheck(i) = aVergleichsWert(i-1) then
            antwort = msgbox (sHinweisText(i), ii, "Gesamtliste")
            if ii = 36 and antwort = 7 OR ii = 48 and antwort = 0 then
               exit sub
            end if
         endif
      next i
Alle_Daten
End Sub
Jetzt läuft das Makro durch, aber

Code: Alles auswählen

sHinweisText(6) = "Verordnung außerhalb des Regelfalls?"
wird trotz Bestätigung mit Ja zweimal abgefragt.
Woran könnte das liegen?
Gruß Jörg
Gruß Jörg

Win 10 Pro AOO 4.1.15
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Kontrolle Zellinhalte

Beitrag von balu »

Hallo Jörg,

warum hast Du meine Schleife reduziert?

Code: Alles auswählen

      for i = 1 to 6
         if i <5 then
            ii = 48
         else
            ii = 36
         endif
         
         if sCheck(i) = aVergleichsWert(i-1) then
            antwort = msgbox (sHinweisText(i), ii, "Gesamtliste")
            if ii = 36 and antwort = 7 OR ii = 48 and antwort = 0 then
               exit sub
            end if
         endif
      next i
So hatte ich sie nicht gepostet.
Sondern genau so.

Code: Alles auswählen

      for i = 1 to 6
         if i <5 then
            ii = 48
         else
            ii = 36
         endif
         
         if sCheck(i) = aVergleichsWert(i-1) then

            antwort = msgbox (sHinweisText(i), ii, "Gesamtliste")
            if ii = 36 and antwort = 7 OR ii = 48 and antwort = 1 then
               goto ende
            else
               if ii = 36 and antwort = 6 then
                  goto weiter
               end if               
            end if
         endif
         weiter:
      next i
Nicht genug das Du sie reduziert hast, sondern Du hast auch noch einen Fehler nachträglich eingebaut.

Du hast zwei verschiedene Messageboxen, einmal nur mit dem OK Button, und dann mit Ja/Nein Button.
Die Msgbox mit nur OK hat den "Wert" 48, inklusive 0 für die Art der Abfrage (oder wie auch immer man das nennen soll). Und das bedeutet, das der Rückgabewert des OK Buttons 1 beträgt. Wenn er also geklickt wurde, dann wird die 1 zurück gegeben. Um ihn also ordnungsgemäß abzufragen hatte ich in der If-Then

Code: Alles auswählen

OR ii = 48 and antwort = 1 then
geschrieben.
Du hattest aber die 1 gegen 0 getauscht, wodurch ein undefinierter Zustand zu tragen kommt, da durch klick auf den OK Button der Rückgabewert 1 niemals-nie-nie-nicht ausgewertet werden kann. Mit anderen Worten; da 0 kein Rückgabewert ist, kann die Schleife nicht ordnungsgemäß funktionieren.

Nachzulesen hier:

Versuchs jetzt mal so.

Code: Alles auswählen

[...]

      for i = 1 to 6
         if i <5 then
            ii = 48
         else
            ii = 36
         endif
         
         if sCheck(i) = aVergleichsWert(i-1) then

            antwort = msgbox (sHinweisText(i), ii, "Gesamtliste")
            if ii = 36 and antwort = 7 OR ii = 48 and antwort = 1 then
               exit sub
            else
               if ii = 36 and antwort = 6 then
                  goto weiter
               end if               
            end if
         endif
         weiter:
      next i

Alle_Daten

End Sub
Sollte das noch immer nicht funktionieren, dann bitte ich darum eine Beispieldatei zu erstellen und hier anzuhängen, da ich keinen Bock mehr darauf habe anhand deines Code mir hier etwas nachzubauen.

Viel Glück :)



Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
Jörg
*****
Beiträge: 401
Registriert: Mo, 21.10.2013 12:05

Re: Kontrolle Zellinhalte

Beitrag von Jörg »

Hallo balu,
sorry, aber ich hatte deine Änderung nur in Bezug auf die Oval-Falle angeschaut. Die anderen Änderungen hab ich nicht wahrgenommen.
Wie z.Bsp. Rückgabewert 0 oder die else-Anweisung.
Jetzt guck ich mir das in Ruhe an.
Danke.
Gruß Jörg

Win 10 Pro AOO 4.1.15
Jörg
*****
Beiträge: 401
Registriert: Mo, 21.10.2013 12:05

Re: Kontrolle Zellinhalte

Beitrag von Jörg »

@balu
Alles chic.
Vielen für die Mühe.
Läuft alles bestens.
Gruß Jörg
Gruß Jörg

Win 10 Pro AOO 4.1.15
Jörg
*****
Beiträge: 401
Registriert: Mo, 21.10.2013 12:05

Re: Kontrolle Zellinhalte

Beitrag von Jörg »

Hallo , nachdem doch noch einige Probleme aufgetreten waren, hab ich den Code wie folgt geändert.

Code: Alles auswählen

 
 [....]
 sCheck(1) = oSheet.getCellRangeByName("C14").STRING
   sCheck(2) = oSheet.getCellRangeByName("E12").STRING
   sCheck(3) = oSheet.getCellRangeByName("C12").STRING
   sCheck(4) = oSheet.getCellRangeByName("D12").STRING
   sCheck(5) = oSheet.getCellRangeByName("A12").STRING'Zuzahlung
   sCheck(6) = oSheet.getCellRangeByName("E17").STRING
   sCheck(7) = oSheet.getCellRangeByName("E14").STRING

     

      for i = 1 to 7
         if i < 5 then
            ii = 48
         else
            ii = 36
         endif
         
         if sCheck(i) = aVergleichsWert(i-1) then

            antwort = msgbox (sHinweisText(i), ii, "Gesamtliste")
            if ii = 36 and antwort = 7 then
            exit sub
            elseif ii = 48 and antwort = 1 then
            exit sub
               if ii = 36 and antwort = 6 then
                  goto weiter
               end if               
            end if
         endif
         weiter:
      next i
      [....]
Die Änderungen betreffen diesen Codeabschnitt.
Alt so:

Code: Alles auswählen

[.....]
if ii = 36 and antwort = 7 OR ii = 48 and antwort = 1 then
               exit sub
            else
               if ii = 36 and antwort = 6 then
                  goto weiter
               end if               
            end if
         endif
         weiter:
      next i
      [....]
Neu so:

Code: Alles auswählen

[....] 
if ii = 36 and antwort = 7 then
            exit sub
            elseif ii = 48 and antwort = 1 then
            exit sub
               if ii = 36 and antwort = 6 then
                  goto weiter
               end if               
            end if
         endif
         weiter:
      next i
      [....]
Ohne OR :?: :?:
So funktioniert es jetzt wie gewünscht.(Ich hoffe jedenfalls, dass ich alle Varianten durchgetestet habe :)
Nochmals vielen Dank für Eure Hilfe dabei.
Gruß Jörg
Gruß Jörg

Win 10 Pro AOO 4.1.15
Antworten