Autor Thema: FM "Illegal reference to array or List"  (Gelesen 3787 mal)

Offline ManuMF

  • Frischling
  • *
  • Beiträge: 12
FM "Illegal reference to array or List"
« am: 04.05.07 - 21:22:03 »
Hallo  liebe Notes-Gurus.

ich habe mal wieder eine Script-Frage mit o.a. FM:

ich habe innerhalb eines Agenten 2 Listen, die ich vergleichen möchte.. wenn ein wert von Liste 1 nicht in Liste 2 vorhanden ist, soll er diesen Wert in eine neue Liste eintragen.


Code
Dim DiffListold() As  Variant
Dim DiffListnew() As Variant
Redim DiffListold(0)
Redim DiffListnew(0)
Dim i As Integer
i=0
Forall m In FullnameListold
	indexresult = Arraygetindex( FullnameListnew , m)
	If Isnull(indexresult) Then
		difflistold= AddToList(m,Difflistold)
		i=i+1			
		Redim Preserve DiffListold(i)
	End If
	i=i+1
End Forall

AddToList ist eine Funktion, die so aussieht.
Code
Function AddToList (Value As Variant, ValueList As Variant)
	Dim tmpValueList As Variant
' Load the array element by element so that the datatype is preserved
	Redim tmpValueList(Ubound(ValueList))
	For i = 0 To Ubound(ValueList)
		tmpValueList(i) = ValueList(i)
	Next
' Determine if we are dealing with a new list, if absolutely no
'values in the first entry, then add new value to 0
	If Ubound(tmpValueList) = 0 And Cstr(tmpValueList(0)) = "" Then
		x = 0
	Else
		x = Ubound(tmpValueList) + 1
	End If
	Redim Preserve tmpValueList(x)
	tmpValueList(x) = Value
	AddToList = tmpValueList
	Valuelist=AddToList
End Function

 bei dem Aufruf von "difflistold= AddToList(m,Difflistold)" bekomm ich die FM.

Wenn ich nur ein "Call AddToList(m,Difflistold)" aufrufe wird die Funktion zwar ausgeführt, aber meine Liste "DiffListold" natürlich nicht gefüllt.

Ich stell mich da grad recht dumm an.
Wie wäre denn der korrekte Aufruf.

Kann jemand helfen?

Danke & viele Grüße
Manu

Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Re: FM "Illegal reference to array or List"
« Antwort #1 am: 04.05.07 - 21:46:41 »
1) "Option Declare" ist nicht nur eine gute Idee, sondern sollte auch verwendet werden.

2) Der Aufruf ist OK, der Funktionsdefinition fehlt der Rückgabewert. Siehe Designer-Hilfe, Thema "Defining functions".
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Offline ManuMF

  • Frischling
  • *
  • Beiträge: 12
Re: FM "Illegal reference to array or List"
« Antwort #2 am: 04.05.07 - 21:55:04 »
Hallo m3,

Pkt1, ist erledigt - denk ich nicht immer dran ;)

Pkt2: kannst du das in meinem Fall etwas konkretisieren?
Falls du meinst: "Function AddToList (Value As Variant, ValueList As Variant) as Variant", dann bekomm ich immer noch die gleiche FM bei der Zuweisung:
"difflistold= AddToList(m,Difflistold)"

Hilf mir bitte etwas  ???
« Letzte Änderung: 04.05.07 - 22:05:56 von ManuMF »

Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Re: FM "Illegal reference to array or List"
« Antwort #3 am: 04.05.07 - 22:06:19 »
Bekommst Du wirklich die Fehlermeldung in der Zeile? Debug mal mit "Step Into". Ich würd mal sagen, dass er irgendwo in der Funktion fliegt.

Ausprobieren, ... geht leider nicht, dafür fehlen dem Code entscheidende Elemente (z.B. die definition von "Difflistold").
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Offline ManuMF

  • Frischling
  • *
  • Beiträge: 12
Re: FM "Illegal reference to array or List"
« Antwort #4 am: 04.05.07 - 22:11:11 »
Debug geht ja nicht, ich bekomm die FM ja schon beim Speichern :(

Definition DiffListold -> "Dim DiffListold() As  Variant" steht im Code.

Ich möchte zwei Listen vergleichen, und gehe über die Forall-Schleife über alle Elemente in der Liste "FullnameListold" und suche ob das momentane Element in Liste "Fullnamesnew" drin steht, wenn nicht, dann soll er über die Funktion "AddToList" dieses Element in die Liste "DiffListOld" eintragen.

Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Re: FM "Illegal reference to array or List"
« Antwort #5 am: 04.05.07 - 23:03:36 »
Debug geht ja nicht, ich bekomm die FM ja schon beim Speichern :(
Hä? Wie bitte? Du kannst (fast) alles debuggen. Diese Aussage ist ein Blödsinn. Aktivier LotusScript Debugging, bevor Du das Dokument öffnest/erstellst und Du kanst jeden Event, auch das Speichern, debuggen.

Darf ich Dir eine Notes-Entwickler-Schulung empfehlen?
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Offline Axel

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: FM "Illegal reference to array or List"
« Antwort #6 am: 05.05.07 - 18:34:59 »
Debug geht ja nicht, ich bekomm die FM ja schon beim Speichern :(
Hä? Wie bitte? Du kannst (fast) alles debuggen. Diese Aussage ist ein Blödsinn. ...

Nicht ganz, Martin. Wenn die Fehlermeldung schon beim Speichern des Agenten erscheint, dann ist ein syntaktischer Fehler im Code.

Ich vermute mal, dass der Hund hier begaben liegt:

Function AddToList (Value As Variant, ValueList As Variant)
   Dim tmpValueList As Variant
' Load the array element by element so that the datatype is preserved
   Redim tmpValueList(Ubound(ValueList))

...

Deklariert wird eine "einfache" Variantvariable und dann wird ein Redim versucht. Redim geht nur mit Arrays.

So sollte es richtig sein:

Function AddToList (Value As Variant, ValueList As Variant)
   Dim tmpValueList() As Variant
' Load the array element by element so that the datatype is preserved
   Redim tmpValueList(Ubound(ValueList))
...


Axel
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline thomson666

  • Senior Mitglied
  • ****
  • Beiträge: 285
  • Geschlecht: Männlich
  • niemand hats leicht, aber leicht hats oan...
Re: FM "Illegal reference to array or List"
« Antwort #7 am: 08.05.07 - 07:45:23 »
kleiner tipp am rande...

zuerst wird oben von listen geredet dann von arrays!? was willst du nun wirklich vergleichen... ich würde hier mit listen arbeiten und nicht mit arrays, ist performanter zum vergleichen als mit einer forall wieder zu schauen ob etwas enthalten ist.

weiters...
im designer kannst im programmierfenster einstellen das option declare immer automatisch aktiviert bzw. eingetragen ist, dann gibts keine ausrede mehr mit ab und zu vergess ichs...  ;) ;D

Offline ManuMF

  • Frischling
  • *
  • Beiträge: 12
Re: FM "Illegal reference to array or List"
« Antwort #8 am: 14.05.07 - 17:14:00 »
@thomson666: wo stell ich das im Programmierfenster ein?


Offline Axel

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: FM "Illegal reference to array or List"
« Antwort #9 am: 14.05.07 - 19:05:15 »
Du musst eine beliebige Script-Bibliothek im Designer öffnen. Dann klickst du im Bereich des Code-Fensters mit der rechten Maustaste und wählst aus dem Popup-Menü den Punkt Eigenschaften Programmierfenster. Auf dem zweiten Reiter findest du die Option im unteren Teil.


Axel
Ohne Computer wären wir noch lange nicht hinterm Mond!

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz