Seite 1 von 1

[Gelöst] [Makro] Fehler bei Statusabfrage

Verfasst: Mo, 07.11.2011 17:31
von opiWahn
Hallo,

mein vor Tagen an dieser Stelle viewtopic.php?f=18&t=50804 beschriebenes Problem habe ich nun damit zu lösen versucht, daß ich die Makromodule die an derweweilen Subform hingen in die mainform als eigenständige Module implementiert habe, da sie offensichtlich dort auch erwartet werden. Um "Verwechslungen" zu vermeiden tragen die beiden Prüfmodule (je Subform eins) einen eindeutigen Name und die Options bzw. Warnfelder habe ich ebenfalls eindeutig angepasst.
Nun werden die Routinen wohl gefunden, doch es harkt beim anklicken eines Optionfeldes, das mit der Fehlermeldung
2011-11-07 17 26 09.png
2011-11-07 17 26 09.png (12.35 KiB) 959 mal betrachtet
quittiert wird! Angemeckert wird je nach Klick/Gruppe dann: vGrpFail = oForm.getbyName("tt_grp1_fail")

der Code der Subform sieht so aus:

Code: Alles auswählen

' FormObjects
Dim oForm As Object
Dim aField(25), aText(25)
Dim aOpt1(), aOpt2(), aOpt3()
Dim s1_1$, s1_2$, s2_1$, s2_2$, s3_1$, s3_2$

' clearForm
Dim n
Dim aFail(2), aGrpFail(2)

' ErrorProof
Dim vGrpFail
Dim errormsg1$
Dim iError As Integer

'---------------------------------------------------------------------------------------------
Sub clearForm

aFail() = Array ("tt_grp1_fail","tt_grp2_fail","tt_grp3_fail")

	With ThisComponent.DrawPage.Forms.GetByName("subForm_TT")
		For n = 0 to .Count - 1
			On Error Resume Next
			If Right(.GetByIndex(n).ServiceName, 11) = "RadioButton" Then
				.GetByIndex(n).State = 0
			End If
		Next n
	End With
		
	oForm = thisComponent.drawpage.forms.getbyindex(0)		
		For i = 0 to 2
			aGrpFail(i) = oForm.getByName(aFail(i))
			aGrpFail(i).Text=""
		Next i
		
End Sub


'--------------------------------------------------------------------------------------------- funktioniert
Sub proofOptGrp1
	iError = 0
	oForm = thisComponent.drawpage.forms.getbyindex(0)
	oForm.getGroupByName("tt_opt_grp1", aOpt1)
	vGrpFail = oForm.getbyName("tt_grp1_fail")
	errormsg1 = "In der markierten Optionsgruppe liegt ein Fehler vor" & CHR$(10) & "BITTE PRÜFEN!"
	bSelected = False
	
   	For i = LBound(aOpt1) to UBound(aOpt1)
      thisElement = aOpt1(i)
      If thisElement.ServiceName = "stardiv.one.form.component.RadioButton" Then
         If thisElement.State Then
            bSelected = True
            s1_1 = thisElement.Name 
            s1_2 = thisElement.Label
            Exit For
         End If
      End If
   	Next i
   	
   	If bSelected Then
   	  vGrpFail.text = ""
   	Else
   	  vGrpFail.text = "!"
   	  MsgBox errormsg1, 0+48, "Achtung"
   	  iError = 1
   	End If
   	
end sub


'--------------------------------------------------------------------------------------------- funktioniert
Sub proofOptGrp2

	oForm = thisComponent.drawpage.forms.getbyindex(0)
	oForm.getGroupByName("tt_opt_grp2", aOpt2)
	vGrpFail = oForm.getbyName("tt_grp2_fail")
	errormsg1 = "In der markierten Optionsgruppe liegt ein Fehler vor" & CHR$(10) & "BITTE PRÜFEN!"
	bSelected = False
	
   	For i = LBound(aOpt2) to UBound(aOpt2)
      thisElement = aOpt2(i)
      If thisElement.ServiceName = "stardiv.one.form.component.RadioButton" Then
         If thisElement.State Then
            bSelected = True
            s2_1 = thisElement.Name 
            s2_2 = thisElement.Label
            Exit For
         End If
      End If
   	Next i
   	
   	If bSelected And s2_2 = ":" Then
   	  vGrpFail.text = ""
   	  MsgBox "Einträge in den nachfolgenden" & CHR$(10) & "Feldern sind zwingend erforderlich", 0+48, "Achtung"
   	 	
   	Elseif bSelected And s2_2 = "." Then
   	  vGrpFail.text = ""
   	  
   	Else
   	  vGrpFail.text = "!"
   	  MsgBox errormsg1, 0+48, "Achtung"
   	  iError = iError + 1
   	End If
   	
end sub


'--------------------------------------------------------------------------------------------- funktioniert
Sub proofOptGrp3

	oForm = thisComponent.drawpage.forms.getbyindex(0)
	oForm.getGroupByName("tt_opt_grp3", aOpt3)
	vGrpFail = oForm.getbyName("tt_grp3_fail")
	errormsg1 = "In der markierten Optionsgruppe liegt ein Fehler vor" & CHR$(10) & "BITTE PRÜFEN!"
	bSelected = False
	
   	For i = LBound(aOpt3) to UBound(aOpt3)
      thisElement = aOpt3(i)
      If thisElement.ServiceName = "stardiv.one.form.component.RadioButton" Then
         If thisElement.State Then
            bSelected = True
            s3_1 = thisElement.Name 
            s3_2 = thisElement.Label
            Exit For
         End If
      End If
   	Next i
   	
   	If bSelected And s3_2 = ":" Then
   	  vGrpFail.text = ""
   	  MsgBox "Einträge in den nachfolgenden" & CHR$(10) & "Feldern sind zwingend erforderlich", 0+48, "Achtung"
   	 	
   	Elseif bSelected And s3_2 = "." Then
   	  vGrpFail.text = ""
   	  
   	Else
   	  vGrpFail.text = "!"
   	  MsgBox errormsg1, 0+48, "Achtung"
   	  iError = iError + 1
   	End If
   	
end sub

'--------------------------------------------------------------------------------------------- funktioniert
Sub proofAllOptGrp
	
	proofOptGrp1
	proofOptGrp2
	proofOptGrp3
	
End Sub

Re: [Makro] Fehler bei Statusabfrage

Verfasst: Mo, 07.11.2011 19:45
von DPunch
Aloha
opiWahn hat geschrieben:beschriebenes Problem habe ich nun damit zu lösen versucht, daß ich die Makromodule die an derweweilen Subform hingen in die mainform als eigenständige Module implementiert habe, da sie offensichtlich dort auch erwartet werden
Ich bin mir ziemlich sicher, dass ich Dir genau das schon vor 7 Monaten recht deutlich gesagt habe ;)
opiWahn hat geschrieben:Angemeckert wird je nach Klick/Gruppe dann: vGrpFail = oForm.getbyName("tt_grp1_fail")
Bist Du Dir sicher, dass tt_grp1_fail in

Code: Alles auswählen

thisComponent.drawpage.forms.getbyindex(0)
also in der Mainform ist?
Nicht eher in einer der Subforms?
Und dass die Gruppe tatsächlich so benannt ist?

Die Fehlermeldung deutet jedenfalls ziemlich eindeutig auf einen dieser beiden Fehler hin.

Re: [Makro] Fehler bei Statusabfrage

Verfasst: Mo, 07.11.2011 20:28
von opiWahn
Hallo DPunch,

freut mich von dir zu hören.
Ich bin mir ziemlich sicher, dass ich Dir genau das schon vor 7 Monaten recht deutlich gesagt habe ;)
Da kann ich nur sagen Asche über mein Haupt!
Zum Schluss wurd's etwas hektisch und die Bugs zeigen sich erst jetzt, da das Tool 6-7 Monate auf Eis lag.
"tt_grp1_fail" liegt auf jeden Fall in den Subforms und sind Textrahmen in denen ein rotes Ausrufzeichen eingeblendet wird wenn keine Option gewählt wurde.

Btw - den Quellcode von dem ganzen hab ich in meinem Thread am Do. angehängt.
Vieleicht liegt das Problem auch wo ganz anders und ich hab mir jetzt ein neues gebastelt.
Ursprünglich gab's eine Fehlermeldung beim Klicken auf ein Optionsfeld wenn die Form bereits angehängt ist.
Demnach wird der auszuführende Code im Modul Auftrag gesucht, obgleich er im Modul Pruefform steht.
Daher kam ich nun auf die Idee Pruefform in den Subforms jeweils anzupassen und als Pruefform_TT und Pruefform_VT der Standardlib. der Main jeweils als eigene Module hinzu zu fügen. So daß ich in der Mainform nun 3 Module habe (Auftrag, Pruefform_TT, Pruefform_VT). Die Events hab ich auch angepasst.

Re: [Makro] Fehler bei Statusabfrage

Verfasst: Di, 08.11.2011 12:26
von opiWahn
Was mir beim Vergleich der beiden Prüfmodule heute früh auffiel ist, daß sie zum einen, weil VT und TT den gleichen Aufbau haben, identisch sind (von tt_ und vt_ mal abgesehen) und zum anderen ich auf die Elemente der Seite 1 (thisComponent.drawpage.forms.getbyindex(0)) verweise, obgleich Sie auf den Seiten (n) zu finden sind. Nun kann ich (n) ja nicht angeben und (1), wie im funktionierenden Code unten, würde mir nur die 2. Seite berücksichtigen.
Bei der folgenden "Funktion clearform" gehe ich den Weg, daß ich nach dem Formular frage, da ich ja nie von vornherein weiß welches Unterformular sich an welcher Stelle gerade befindet.
Könnte das auch für das aktuelle Problem eingesetzt werden?
Also in der Art:

Code: Alles auswählen

Sub clearForm

aFail() = Array ("vt_grp1_fail","vt_grp2_fail","vt_grp3_fail")

	With ThisComponent.DrawPage.Forms.GetByName("subForm_VT")
		For n = 0 to .Count - 1
			On Error Resume Next
			If Right(.GetByIndex(n).ServiceName, 11) = "RadioButton" Then
				.GetByIndex(n).State = 0
			End If
		Next n
	End With
		
	oForm = thisComponent.drawpage.forms.getbyindex(0)		
		For i = 0 to 2
			aGrpFail(i) = oForm.getByName(aFail(i))
			aGrpFail(i).Text=""
		Next i
		
End Sub


'--------------------------------------------------------------------------------------------- funktioniert
Sub proofOptGrp1
	iError = 0
                ' oForm = thisComponent.drawpage.forms.getbyindex(1)
	oForm = thisComponent.DrawPage.Forms.GetByName("subForm_VT")
	oForm.getGroupByName("vt_opt_grp1", aOpt1)
	vGrpFail = oForm.getbyName("vt_grp1_fail")
	errormsg1 = "In der markierten Optionsgruppe liegt ein Fehler vor" & CHR$(10) & "BITTE PRÜFEN!"
	bSelected = False
	
   	For i = LBound(aOpt1) to UBound(aOpt1)
      thisElement = aOpt1(i)
      If thisElement.ServiceName = "stardiv.one.form.component.RadioButton" Then
         If thisElement.State Then
            bSelected = True
            s1_1 = thisElement.Name 
            s1_2 = thisElement.Label
            Exit For
         End If
      End If
   	Next i
   	
   	If bSelected Then
   	  vGrpFail.text = ""
   	Else
   	  vGrpFail.text = "!"
   	  MsgBox errormsg1, 0+48, "Achtung"
   	  iError = 1
   	End If
   	
end sub

Re: [Makro] Fehler bei Statusabfrage

Verfasst: Di, 08.11.2011 14:36
von opiWahn
Könnte das auch für das aktuelle Problem eingesetzt werden?
Ja - kann es :D