Autor Thema: Schleife mit variabler Zelle  (Gelesen 6969 mal)

Offline LukasSChl

  • Junior Mitglied
  • **
  • Beiträge: 68
  • Geschlecht: Männlich
Schleife mit variabler Zelle
« am: 20.04.10 - 15:36:16 »
Hi Leute,

bin erneut auf ein Problem gestoßen.

Das Ergebnis sollte so aussehen:
Code
While oDoc.Pause_1  != ""  'ungleich geht <> oder?
     If oDoc.Pause_X = "" Then
          oDoc.Pause_X = Pause_Std & ":" & pause
     End If
X = X +1
Wend

X steht hier für ne Variable Zahl.
Habe die Felder von Pause_1 bis Pause_9

Wie kann ich den Feldnamen so variabel setzten, das sich mit jedem Durchlauf der Schleife das Feld ändert ? ??? :-: ???
Für jeden Fall das einzeln zu stricken ist auch possible, aber ich habe sowieso schon voll den langen Code und wollte ma schaun ob das nicht auch kürzer geht.

mfg Lukas
Informatikkaufmann-Azubi (3tes Lehrjahr)
Lotus Notes Server: 8 * 8.0.2
Lotus Notes Clients: ca. 1800 * 8.0.2
Dienstags außer Haus

Offline koehlerbv

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Schleife mit variabler Zelle
« Antwort #1 am: 20.04.10 - 15:40:44 »
Du möchtest Dir NotesDocument.DocItemValue anschauen.

Bernhard

Offline LukasSChl

  • Junior Mitglied
  • **
  • Beiträge: 68
  • Geschlecht: Männlich
Re: Schleife mit variabler Zelle
« Antwort #2 am: 20.04.10 - 16:02:52 »
thx für die schnelle Antwort Bernhard

leider find ich nichts (hilfe & inet) zu .DocItemValue, nur .GetItemValue, aber das hilft irgendwie überhaupt nicht weiter.

Es gibt was zu Doc.items aber hilft mir auch nicht weiter.

mfg Lukas
Informatikkaufmann-Azubi (3tes Lehrjahr)
Lotus Notes Server: 8 * 8.0.2
Lotus Notes Clients: ca. 1800 * 8.0.2
Dienstags außer Haus

Offline koehlerbv

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Schleife mit variabler Zelle
« Antwort #3 am: 20.04.10 - 16:05:32 »
Sorry, habe mich auf die Schnelle verschrieben - ich meine natürlich NotesDocument.GetItemValue. Und genau das hilft Dir weiter! Der Itemname lässt sich im von Dir benannten Fall perfekt in einer Schleife bilden.

Denken musst Du jetzt aber selber  ;)

Bernhard

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Schleife mit variabler Zelle
« Antwort #4 am: 20.04.10 - 16:13:53 »
Zum schreiben in das Feld nimmst Du NotesDocument.ReplaceItemValue (...

Offline koehlerbv

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Schleife mit variabler Zelle
« Antwort #5 am: 20.04.10 - 16:22:56 »
Danke für die Ergänzung, Peter.

Tak og hilsener til Norge,
Bernhard

Offline LukasSChl

  • Junior Mitglied
  • **
  • Beiträge: 68
  • Geschlecht: Männlich
Re: Schleife mit variabler Zelle
« Antwort #6 am: 20.04.10 - 16:30:11 »
ok dann wirds aber ne stück für stück operation

die Syntax ist ja: valueArray = notesDocument.GetItemValue( itemName$ )
die Beispiele sind in der Hilfe für mich zumindest immer wenig hilfreich^^

daraus folgere ich das hier:
Code

While oDoc.Pause_1  <> "" 
      If "oDoc.Pause_" & X = "" Then
          
            test = doc.GetItemValue( "Pause_1" )
            
            Forall Pause In test                '-> Pause kommt ja in jedem Namen vor
                  total = total + m      ' ka wozu diese Zeile gut sein soll
                 oDoc.ReplaceItemValue(test, neuer_Wert) = Pause_Std & ":" & pause
            End Forall

      End If
Wend


EDIT: hab die letzten 2 Post noch gelesen und das angepasst.

is da zumindest etwas schonma richtig?^^

mfg Lukas
« Letzte Änderung: 20.04.10 - 16:36:11 von LukasSChl »
Informatikkaufmann-Azubi (3tes Lehrjahr)
Lotus Notes Server: 8 * 8.0.2
Lotus Notes Clients: ca. 1800 * 8.0.2
Dienstags außer Haus

Offline koehlerbv

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Schleife mit variabler Zelle
« Antwort #7 am: 20.04.10 - 16:35:40 »
Nein, das ist völlig falsch - Deinen Itemnamen musst Du Dir schon korrekt zusammenbauen ("Pause_" & Cstr (x))

Und die Hilfe ist gut - da musst Du an *Dir* noch arbeiten und nicht die Hilfe verfluchen.

Bernhard

Offline LukasSChl

  • Junior Mitglied
  • **
  • Beiträge: 68
  • Geschlecht: Männlich
Re: Schleife mit variabler Zelle
« Antwort #8 am: 20.04.10 - 16:38:17 »
thx Bernhard

hab die Hilfe ja nicht verflucht, finde einfach die Beispiele teilweise schlecht für jmd der da kaum Ahnung von hat.

Gut dann guck ich morgen früh ma ob ichs hinbekomme.

Frohes Schaffen
Informatikkaufmann-Azubi (3tes Lehrjahr)
Lotus Notes Server: 8 * 8.0.2
Lotus Notes Clients: ca. 1800 * 8.0.2
Dienstags außer Haus

Offline LukasSChl

  • Junior Mitglied
  • **
  • Beiträge: 68
  • Geschlecht: Männlich
Re: Schleife mit variabler Zelle
« Antwort #9 am: 21.04.10 - 09:08:55 »
moin moin

habs etwas weiterbekommen, aber noch nicht soweit, dass es läuft.

Code
	If oDoc.Pause_1 = "" Then 'hier kommt schon ein "type missmatch" Fehler, warum?
		oDoc.Pause_1 =  Pause_Std & ":" & pause
		oDoc.Pause_1_Anzeige = "Stunde(n)"
	Else
		While oDoc.Pause_1  >< ""  
			If "oDoc.Pause_" & X = "" Then
				Array = doc.GetItemValue("Pause_" & X)
				Forall P In Array
					counter = counter + m ' ka wozu diese Zeile gut sein soll
					Set item = oDoc.ReplaceItemValue( "Array", (Pause_Std & ":" & pause))
				End Forall
			End If
			X= X + 1
		Wend
	End If

jedoch versteh ich nicht, warum die Prüfung ob das Feld leer ist schon fehlschlägt.
Außerdem ist mir die Bedeutung der Zeile:
"counter = counter + m" nicht klar (aus dem Beispiel in der Hilfe übernommen)

Wie sieht der Code denn sonst aus, aufm richtigen Weg??

mfg Lukas
Informatikkaufmann-Azubi (3tes Lehrjahr)
Lotus Notes Server: 8 * 8.0.2
Lotus Notes Clients: ca. 1800 * 8.0.2
Dienstags außer Haus

Offline Thomas Schulte

  • @Notes Preisträger
  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 4.388
  • Geschlecht: Männlich
  • Ich glaub mich tritt ein Pferd
Re: Schleife mit variabler Zelle
« Antwort #10 am: 21.04.10 - 09:24:02 »
jedoch versteh ich nicht, warum die Prüfung ob das Feld leer ist schon fehlschlägt.
Außerdem ist mir die Bedeutung der Zeile:
"counter = counter + m" nicht klar (aus dem Beispiel in der Hilfe übernommen)

Wie sieht der Code denn sonst aus, aufm richtigen Weg??
Deine Prüfung schlägt deswegen fehl,weil du in der verkürzten Notation schreibst. Und da hat Bernhard dir schon gesagt ,das du dann IMMER mit einem ARRAY rechnen musst.
oDoc.pause_1 = "" geht gar nicht. Wenn schon, dann oDoc.pause_1(0). Noch sinnvoller wäre es aber wenn du mit dem NotesItem Object arbeiten würdest.
Davon abgesehen ist die ganze Konstruktion falsch. Du mixt verkürzte und lange Notation mit einer While Schleife bei der du wieder die verkürzte Notation verwendest.

Les dir doch bitte bevor du jetzt weiterbastelst erst einmal alles was in der Hilfe zu NotesItem steht durch.
Thomas Schulte

Collaborative Project Portfolio and Project Management Software

"Aber wo wir jetzt einmal soweit gekommen sind, möchte ich noch nicht aufgeben. Versteh mich recht, aufgeben liegt mir irgendwie nicht."

J.R.R.Tolkien Herr der Ringe, Der Schicksalsberg

OpenNTF Project: !!HELP!! !!SYSTEM!!  !!DRIVER!!

Skype: thomasschulte-kulmbach

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Schleife mit variabler Zelle
« Antwort #11 am: 21.04.10 - 09:25:07 »
If oDoc.Pause_1 = "" Then ist nicht ganz korrekt, richtig ist:

If oDoc.Pause_1 (0) = "" Then

Felder in Notes sind grundsätzlich Arrays, selbst wenn es keine Mehrfachwerte sind

While oDoc.Pause_1  >< ""  

ungleich ist <>, aus dieser Schleife kommst Du niemals wieder raus, weil oDoc.Pause_1 (besser gesagt oDoc.Pause_1 (0), per obiger Bedingung schon ungleich leer ist.

Was soll das Script eigentlich genau machen?

Das mit dem Zuweisen von Werten in Felder klären wir dann danach, das geht so nicht, wie Du es geschrieben hast.

Offline LukasSChl

  • Junior Mitglied
  • **
  • Beiträge: 68
  • Geschlecht: Männlich
Re: Schleife mit variabler Zelle
« Antwort #12 am: 21.04.10 - 10:04:58 »
Danke für die Hilfe

@Thomas Schulte
gemacht, leider bleibt davon kaum was hängen, da ich die ScriptSpache nie gelernt habe, bin einfach eingestiegen und hab mir was die Script-Sprache angeht, alles entweder abgeguckt oder selbst "erbastelt".

@Peter Klett
Es soll gucken ob das erste Feld leer ist,
wenn ja -> reinschreiben
wenn nein -> gucken ob nächstes Feld leer ist, solange bis alle Felder abgearbeitet wurden.

Hab jetzt noch etwas dran geschraubt:
Code
For X = 1 To 6
     If oDoc.GetItemValue("Pause_" & X)(0) = "" Then			
          Array = oDoc.GetItemValue("Pause_" & X)
          Forall P In Array
               counter = counter + m ' ka wozu diese Zeile gut sein soll
               Set item = oDoc.ReplaceItemValue( "Array", (Pause_Std & ":" & pause))
          End Forall
     End If
Next

Die Prüfungen laufen alle ohne Probleme.
Was jetzt noch fehlt ist, dass hier:
"Set item = oDoc.ReplaceItemValue( "Array", (Pause_Std & ":" & pause))"
in das jeweilige Feld reingeschrieben wird.

So wie es jetzt ist, wird in Array aber nur der Wert den jeweiligen Feldes gespeichert, anstatt der Verweis auf das Feld selber.

Also im Endeffekt muss ja nurnoch an folgenden Zeile was verändert werden:
"Array = oDoc.GetItemValue("Pause_" & X)"
und
"Set item = oDoc.ReplaceItemValue( "Array", (Pause_Std & ":" & pause))"

Die einfachste Lösung:
"Array = oDoc.GetItemName("Pause_" & X)"
geht leider nicht xD

Edit:

Folgendes klappt auch leider nicht, obwohl man so ja laut Hilfe den Namen des Items herrausbekommt.
Code
For X = 1 To 6
     If oDoc.GetItemValue("Pause_" & X)(0) = "" Then
			
          Set item = doc.GetFirstItem( "Pause_" & X ) ' "Variant does not contain an Object"
          itemName = item.Name

          Forall P In Array
               counter = counter + m ' ka wozu diese Zeile gut sein soll
               Set item = oDoc.ReplaceItemValue( "itemName", (Pause_Std & ":" & pause))
          End Forall
     End If
Next

mfg Lukas
« Letzte Änderung: 21.04.10 - 10:26:55 von LukasSChl »
Informatikkaufmann-Azubi (3tes Lehrjahr)
Lotus Notes Server: 8 * 8.0.2
Lotus Notes Clients: ca. 1800 * 8.0.2
Dienstags außer Haus

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Schleife mit variabler Zelle
« Antwort #13 am: 21.04.10 - 10:28:53 »
das sieht jetzt schon viel besser aus.

Das Schreiben in das Feld ist einfacher, als Du gedacht hast. So sollte es das tun, was Du willst:

For X = 1 To 6
     If oDoc.GetItemValue("Pause_" & X)(0) = "" Then         
          Call oDoc.ReplaceItemValue("Pause_" & X, (Pause_Std & ":" & pause))
     End If
Next

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Schleife mit variabler Zelle
« Antwort #14 am: 21.04.10 - 10:31:59 »
Nachtrag: den Counter habe ich weggelassen, wenn Du den für irgendetwas benötigst, muss der natürlich noch da mit rein.

Offline LukasSChl

  • Junior Mitglied
  • **
  • Beiträge: 68
  • Geschlecht: Männlich
Re: Schleife mit variabler Zelle
« Antwort #15 am: 21.04.10 - 10:40:15 »
vielen Dank

Code
For X = 1 To 6
     If oDoc.GetItemValue("Pause_" & X)(0) = "" Then			
          Call oDoc.ReplaceItemValue("Pause_" & X, (Pause_Std & ":" & pause))
          Exit Sub
     End If
Next

Nachdem das Feld mit einem Wert gefüllt worden ist, wird die Schleife verlassen.

Nachtrag: den Counter habe ich weggelassen, wenn Du den für irgendetwas benötigst, muss der natürlich noch da mit rein.

Der war im Beispiel der Hilfe mit aufgelistet und da hab ichs nur übernommen^^

mfg Lukas
Informatikkaufmann-Azubi (3tes Lehrjahr)
Lotus Notes Server: 8 * 8.0.2
Lotus Notes Clients: ca. 1800 * 8.0.2
Dienstags außer Haus

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Schleife mit variabler Zelle
« Antwort #16 am: 21.04.10 - 10:44:59 »
Mit Exit Sub verlässt Du die Routine, falls Du nur die For-Schleife verlassen willst, nimm Exit For

Offline LukasSChl

  • Junior Mitglied
  • **
  • Beiträge: 68
  • Geschlecht: Männlich
Re: Schleife mit variabler Zelle
« Antwort #17 am: 21.04.10 - 10:48:36 »
ähh meinte ich^^ aus gewohnheit schreib ich immer exit sub, ka warum (VB-vorbelastet).

mfg Lukas
Informatikkaufmann-Azubi (3tes Lehrjahr)
Lotus Notes Server: 8 * 8.0.2
Lotus Notes Clients: ca. 1800 * 8.0.2
Dienstags außer Haus

Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.697
  • Geschlecht: Männlich
Re: Schleife mit variabler Zelle
« Antwort #18 am: 21.04.10 - 11:17:19 »
Hallo,

War in VB aber nicht anders.

Raus aus der For-Schleife = Exit For
Raus aus der Routine = Exit Sub bzw. Exit Funktion

 ;)

Andreas

Offline DerAndre

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.655
  • Geschlecht: Männlich
  • Keep cool!
Re: Schleife mit variabler Zelle
« Antwort #19 am: 21.04.10 - 11:21:16 »
Ääääh in Antwort 12 schreibst Du, das alle Felder abgearbeitet werden sollen.

Jetzt machst Du ein ExitFor?

Kann es sein, das Du nur das erste Freie Feld suchst?
Und ob man ein ExitFor macht ist Geschmackssache, ich persönlich finde es unschön.
André

Elterninitiative diabetischer Kinder und Jugendlicher e.V.
-----------------------------------------------------------------------------
Fliegen ist die Kunst auf den Boden zu Fallen, aber daneben.
-----------------------------------------------------------------------------
Etwas mehr Hardware dazu zu kaufen ist viel billiger als
Software besser zu machen. ( Niklaus Wirth )

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz