Autor Thema: Object Variable not set  (Gelesen 1980 mal)

Offline Joe Kinley

  • Frischling
  • *
  • Beiträge: 6
  • Ich liebe dieses Forum!
Object Variable not set
« am: 27.01.04 - 16:49:40 »
Wie ich diese Fehlermeldung hasse. Beim Scripten mit Lotus und Probieren vieler Scripte, und Scriptteile ist mir noch nie so oft ein bestimmter Fehler zuvorgekommen, wie der "Object Variable not set". Und ich weiß echt nicht weiter. Egal was ich versuche, alles führt doch auf diesen Fehler zurück. Mein Script ist nahezu fertiggestellt, sollte dieser Fehler behoben werden.... dazu brauch ich eure Hilfe:

Sub Initialize
Dim t(87) As String
'Variablen
t(1)="90/1-10-03-0001" ...

'[TEIL 1 - DATABASEAUSWAHL]
daba = Inputbox$("Bitte den Dateinamen ihrer Lokalen Datenbank [Im Allgemeinen C: \Lotus\Notes\Data] eingeben","Hinweis")
Dim da As New NotesDatabase("",daba)
Dim daba as New NotesDatabase("","0001-Testbank.nsf")
'[TEIL 2 - KATEGORISIERUNG]
Dim x As Integer
Dim x2 As Integer
Dim y As Integer
Dim selection As String
Dim collection As NotesDocumentCollection
Dim dati As New NotesDateTime("")
Dim doc As NotesDocument
Dim tit As String
x=1
x2=1
Do
tit = Right$(t(x),4)
Call db.CreateCopy("",tit)
Dim dx As New NotesDatabase ("",tit)
dx.Title = t(x)
selection = "@Contains(Subject;"""+tit+""")"
Set collection = da.Search(selection,dati,0)
y=collection.count
'Kategorisierung
Do
Set doc = collection.GetNthDocument(x2)
Call doc.CopyToDatabase(dx)
x2=x2+1
Loop Until x2=y+1
x=x+1
Loop Until x=3
'[TEIL 3 - FERTIG]
Messagebox "Fertig",MB_OK,"Erfolg"
End Sub


Was bitte ist an meinem Script falsch ? Ich hab herausgefunden, dass der Fehler sich in der Inneren Do-Schleife befindet, denn wenn ich diese deaktiviere, funktioniert alles andere. Aber auf diese Schleife kommts doch an.... hoffentlich könnt ihr da helfen...

Glombi

  • Gast
Re:Object Variable not set
« Antwort #1 am: 27.01.04 - 17:03:30 »
Abgesehen davon, dass der Code äußerst verwirrend ist, solltest Du das mal durch den Debugger laufen lassen.
Generell: Wenn Du ein Document aus einer Collection anspricht, immer vorher abfragen, ob das Document auch da ist - sprich nicht Nothing ist.

Ansonsten kapier ich nicht, was der Code machen soll, sorry.

Andreas

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:Object Variable not set
« Antwort #2 am: 27.01.04 - 17:35:05 »
Zitat
Wie ich diese Fehlermeldung hasse.

Hm, die Fehlermeldung solltest Du aber nicht hassen, sondern sie loben. Sie sagt Dir wenigstens noch, dass DU Mist gemacht hast. Andere (nativere) Programmiersprachen lassen den Code da schon mal weiterlaufen, und ohne irgend einen netten Hinweis himmelt es bestenfalls das Programm oder das OS, eventuell zerlegt es Dir aber auch noch mehr.

Wie Andreas schon geschrieben hat: Der Debugger sagt, wo im Code es scheppert. Und prinzipiell gilt: Wo nur die kleinste Chance besteht, dass ein Objekt (unter welchen Umständen auch immer) nicht instantiiert werden kann, muss der Programmierer dafür sorgen, dass solche Fälle abgefangen werden.

Dim ws as New NotesUIWorkspace
Dim uidoc as NotesUIDocument
Dim doc as NotesDocument
Dim item as NotesItem

Set uidoc = ws.CurrentDocument
Set doc = uidoc.Document
Set item = doc.GetFirstItem ("Leser")
If Not (item is Nothing) then
   item.IsReaders = True
End If

Gibt es also aus irgendeinem Grunde in diesem Dokument das Item gar nicht, muss das vom Programmierer (!) abgefangen werden.

Was ganz prinzipielles zum Abschluss: Programmieren ist eine sehr ernsthafte Angelegenheit ...

HTH,
Bernhard

Offline Joe Kinley

  • Frischling
  • *
  • Beiträge: 6
  • Ich liebe dieses Forum!
Re:Object Variable not set
« Antwort #3 am: 27.01.04 - 20:12:05 »
Sorry Leute.... habt Recht, ich sollte den Code Kommentieren.

Also Prinzipiell soll das Script eine bestimmte Datenbank nehmen, alle Dokumente dort anschauen, und nach einem speziellen Suchbegriff sortieren. (Hier "0001"). Diese Collection kopiert es dann in eine speziell angefertigte Datenbank.
Das Problem ist, beim ersten Suchdurchlauf klappt alles wunderbar. Der Code ermittelt meine Collection, liest sie aus, und kopiert diese Dokumente in eine eigens erstellte Database. Doch wenn der Loop zum 2. Durchgang kommt, kommt entsprechende Fehlermeldung. Das versteh ich nicht ganz, da doch der erste Lauf perfekt geklappt hat, aber der zweite bricht ab.... das kapier ich net ganz....

Und das Coden eine ernste Sache ist, das müsst ihr mir net sagen... dieses Script ist für meine Arbeit, und sehr wichtig

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:Object Variable not set
« Antwort #4 am: 27.01.04 - 20:29:37 »
Es bleiben unsere Fragen:
- Was sagt der Debugger ?
- Wenn dieser zu unhandlich sein sollte (wegen vieler Dokumente oder das das Stop-Statement nicht greift): Was sagt einer ErrorHandler, den Du noch einbauen müsstest ?
- Hast Du Dir alle Objekte, die Du instantiierst, schon mal durchgeschaut ? Der Code ist ja sehr kurz.
Und: Hast Du den Rat von Andreas und mir bereits berücksichtigt, die Objects nach dem Instantiierungsversuch auf Erfolg zu kontrollieren ?

Bernhard

Offline Joe Kinley

  • Frischling
  • *
  • Beiträge: 6
  • Ich liebe dieses Forum!
Re:Object Variable not set
« Antwort #5 am: 27.01.04 - 20:45:16 »
Leider kann ich erst morgen auf Arbeit die Dinge austesten, vorher kann ich immer nur sagen was ich weiß.

Also:
Die Schleife enthält ja als Durchlaufszahl die Anzahl der Dokumente in der Collection. Desshalb ist dort doch schon genommen, dass ein Dokument dort nicht gegeben ist, oder irre ich mich da?

Ausserdem müsste der doch dann schon beim ersten Versuch abbrechen, oder nicht? Der erste Durchlauf geht ja tadellos, aber beim zweiten durchlauf der Schleife bricht er ab.... das ist mein Problem, und das macht es mir völlig unverständlich...

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:Object Variable not set
« Antwort #6 am: 27.01.04 - 21:24:34 »
Debugger ... oder ErrorHandler.
Ich mag jetzt nicht im Nebel stochern.

Glombi

  • Gast
Re:Object Variable not set
« Antwort #7 am: 28.01.04 - 08:28:51 »
Ich fang mal an zu meckern:
1.)
Bei Collections solltest Du immer kopfgesteuerte Schleifen nehmen.

Bei Dir:
Set collection = da.Search(selection,dati,0)
y=collection.count
'Kategorisierung
Do
Set doc = collection.GetNthDocument(x2)
Call doc.CopyToDatabase(dx)               'hier kracht es dann


Wenn Collection.Count = 0 ist, kracht er Dir mit der genannten Meldung um die Ohren!


2.)
x2 wird nach der innersten Schleife nicht wieder auf 1 gesetzt, d.h. beim nächsten Durchlauf beginnt das Teil mindestens mit dem Wert 2. Wenn dann die Collection.Count wieder = 1 ist, kracht's erneut.

Andreas
« Letzte Änderung: 28.01.04 - 08:34:12 von Glombi »

Offline Joe Kinley

  • Frischling
  • *
  • Beiträge: 6
  • Ich liebe dieses Forum!
Re:Object Variable not set
« Antwort #8 am: 28.01.04 - 19:50:15 »
Ich danke euch Leute...
Da ich mir alles selbst beigebracht hab, hab ich nicht gewusst, dass es einen Debugger gibt.
Der hat mir dann auch den Fehler angezeigt, den mir auch Glombi nun gezeigt hat =)

Sorry für eure Umstände, ich lerne noch.
Ich bessere mich =)

Und danke nochmals an alle

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
Re:Object Variable not set
« Antwort #9 am: 28.01.04 - 19:55:36 »
bis demnächst dann; bleibst dem Forum hoffentlich treu ...
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:Object Variable not set
« Antwort #10 am: 28.01.04 - 20:00:41 »
Jo, sag' einfach weiter an. Wir alle haben mal klein angefangen ;-)

Bernhard

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz