Autor Thema: COM Fehler  (Gelesen 14306 mal)

Offline Aladdin Sane

  • Aktives Mitglied
  • ***
  • Beiträge: 181
  • Geschlecht: Männlich
  • Sowieso...
COM Fehler
« am: 29.07.04 - 17:01:45 »
Hallo,

ich versuche über Visual Basic in Excel die COM-Schnittstelle zu Notes auszuprobieren.
Ich habe den erforderlichen Verweis (Lotus DOmino Objects) drin, aber ich bekomme
trotzdem die Fehlermeldung "Unzulässige Benutzung des Schlüsselwortes New" bei der ersten Zeile Code:

Dim s as New NotesSession.


Driri

  • Gast
Re:COM Fehler
« Antwort #1 am: 29.07.04 - 17:03:33 »
Ich bin mir nicht sicher, aber ich glaube unter VB gibt es das "New" nicht. Also einfach

Dim s as NotesSession

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:COM Fehler
« Antwort #2 am: 29.07.04 - 17:04:43 »
Schick mal den kompletten Code. Wie hast Du von VBA aus das Objekt "Notes" erstellt ?

Bernhard

Offline Aladdin Sane

  • Aktives Mitglied
  • ***
  • Beiträge: 181
  • Geschlecht: Männlich
  • Sowieso...
Re:COM Fehler
« Antwort #3 am: 29.07.04 - 17:24:04 »
Die Hilfe des Designers gibt zweiMöglichkeiten an:

1. Dim session as New NotesSession
gibt bei mir den o.g. Fehler

2.  Dim s As NOTESSESSION
    Set s = CreateObject("Lotus.NotesSession")

Hier bekomme ich für Zeile 2 die Fehlermeldung "Das angegebene Modul wurde nicht gefunden".



Hier der ganze code:
   
Sub Warhol()
    Dim s As NOTESSESSION
    Set s = CreateObject("Lotus.NotesSession")
   
    Call s.Initialize
    MsgBox s.CommonUserName, , "Common user name"
End Sub


@koehlerbv:
meinst du mit Objekt "Notes" die NotesSession?

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:COM Fehler
« Antwort #4 am: 29.07.04 - 18:37:03 »
Da gibt es jetzt eine Menge Möglichkeiten, was bei Dir schief läuft ...
Ist Notes korrekt in der Registry registriert ?
Hast Du den Code mit dem VBA-Editor auch kompiliert (sonst kriegst Du die von Dir beschriebene Meldung)
Dein NotesObject muss vom Typ Variant sein - NotesSession kennt VBA (logischerweise) als Datentyp nicht.
Dieses Beispiel funktioniert unter den oben genannten Bedingungen auf jeden Fall:
Code
Sub Test()
 Dim s As Variant
 Set s = CreateObject("Lotus.NotesSession")
  
 Call s.Initialize
 MsgBox s.CommonUserName, , "Common user name"

End Sub

HTH,
Bernhard

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:COM Fehler
« Antwort #5 am: 29.07.04 - 18:38:38 »
Nachtrag:
Folge mal dem letzten Posting von unserem Anton in folgenden Thread:
http://www.atnotes.de/index.php?board=7;action=display;threadid=9773;start=0

Hilfreich !

Bernhard

Glombi

  • Gast
Re:COM Fehler
« Antwort #6 am: 29.07.04 - 19:21:31 »
Mit VB geht es so:

Dim session As NotesSession
Set session = CreateObject("Lotus.NotesSession")
Call session.Initialize

Voraussetzung ist natürlich, das die Lotus Domino Klassen in VB eingebunden werden. Ggf. muss der Pfad für die NOTES.INI im PATH stehen.

Andreas

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:COM Fehler
« Antwort #7 am: 29.07.04 - 19:32:32 »
Wie
Code
Dim session As NotesSession
aber in VBA funktionieren sollte, ist mir schleierhaft, Andreas. VBA kennt doch kein Objekt oder keine Variable dieses Typs ...

Bernhard

Glombi

  • Gast
Re:COM Fehler
« Antwort #8 am: 29.07.04 - 19:55:44 »
Wie
Code
Dim session As NotesSession
aber in VBA funktionieren sollte, ist mir schleierhaft, Andreas. VBA kennt doch kein Objekt oder keine Variable dieses Typs ...

Bernhard
Daher schrieb ich ja
Voraussetzung ist natürlich, daß die Lotus Domino Klassen in VB eingebunden werden. Ggf. muss der Pfad für die NOTES.INI im PATH stehen.

Ich habe es gerade letzte Woche so progammiert.

Das schöne ist, Du siehst dann im VB Editor alle Methoden und Properties der Notes Objekte.

Andreas
« Letzte Änderung: 29.07.04 - 19:58:18 von Glombi »

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:COM Fehler
« Antwort #9 am: 29.07.04 - 20:05:06 »
Ich glaub', ich hab' jetzt doch einen Filmriss:
Was nützt die NOTES.INI im PATH, wenn VBA mit "NotesSession" erstmal nix anfangen kann ?
Wie teilst Du dem VBA-Code mit, dass es da Notes-Classes gibt, wenn nicht über die Zuweisung der NotesSession an ein VBA-Variant ?

Bernhard

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re:COM Fehler
« Antwort #10 am: 29.07.04 - 20:38:13 »
Wie
Code
Dim session As NotesSession
aber in VBA funktionieren sollte, ist mir schleierhaft, Andreas. VBA kennt doch kein Objekt oder keine Variable dieses Typs ...

Bernhard

Hi,

das funktioniert auch in VBA. Wenn über Extras - Verweise die Lotus Domino Objects eingebunden werden, dann ist auch so eine Dim - Anweisung möglich. Auch brauch der Notes.ini-Pfad nicht im Path zu stehen.

Zitat
Sub Warhol()
    Dim s As NotesSession
   
    Set s = CreateObject("Lotus.NotesSession")
    Call s.Initialize
    MsgBox s.CommonUserName
End Sub

Das habe ich soeben in VBA (als Word-Macro) getestet. Funktioniert einwandfrei. Ich habe in "grauer Vorzeit", noch zu Office 2000 und Notes 4.6 Word-Vorlagen erstellt, in denen es möglich war, von Word aus in einer Notes-Datenbank nach Adressen zu suchen und die entsprechenden Daten zu übernehmen.

@Aladdin Sane
Ich werde das Gefühl nicht los, dass bei dir Notes nicht sauber in der Registry registriert ist. Schau doch mal mit regedit unter HKEY_CLASSES_ROOT nach ob es da die entsprechenden Einträge, Lotus.NotesSession usw. gibt. Es gibt bei mir zusätzlich auch noch Notes.NotesSession. Vielleicht ist der Eintrag bei dir vorhanden. Eines ist sicher, obiger Code funktioniert ohne Probleme.

Axel


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

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:COM Fehler
« Antwort #11 am: 29.07.04 - 21:09:27 »
Zitat
Wenn über Extras - Verweise die Lotus Domino Objects eingebunden werden
Aber warum der Krampf ? Dann müsste doch der Anwender vorher diese Settings selbst vornehmen ...
Aber wie gesagt: Ich mag' ja wirklich momentan auf dem Schlauch stehen oder ein Brett vor'm Kopf haben oder beides ...

Bernhard

Offline animate

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.540
  • Uh, I'm just gonna go find a cash machine.
    • LA2
Re:COM Fehler
« Antwort #12 am: 29.07.04 - 21:26:01 »
Ich finde, das ist kein Krampf. Im Gegenteil, ich denke, der Weg über CreateObject ist Karmpf.
In VB (und auch in den dotnet-IDE)  ist es üblich, Bibliotheken auf diese Weise einzubinden. Auch die Standardbibliotheken, die du z. B. in Word-VBA nutzt, sind so eingebunden. Schaus dir mal an.
(Ach so, der Entwickler muss den Verweis machen, der Anwender nicht.)

Bei dir, Alladin, ist evtl. die Notes-Bibliothek nicht registriert.
Um sie zu registrieren musst du folgendes in der Kommandozeile eingeben:

regsvr32 c:\programme\lotus\notes\nlsxbe.dll

Musst halt mal probieren, obs dann geht.
« Letzte Änderung: 29.07.04 - 21:28:48 von Thomas Völk »
Thomas

Fortunately, I'm adhering to a pretty strict, uh, drug, uh, regimen to keep my mind, you know, uh, limber.

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:COM Fehler
« Antwort #13 am: 29.07.04 - 22:27:13 »
Hilf mir bitte mal auf die Sprünge, Thomas.
Ich schicke irgendeinem anderen Notes-User ein Excel-Sheet, und in diesem soll ein Makro auf Notes zugreifen. Wie teile ich VBA mit, dass es mit der Klasse NotesSession etwas anzufangen weiss ? Welches Statement ist da erforderlich ?
Und wo liegt der Nachteil von
Code
Dim s As Variant
Set s = CreateObject("Lotus.NotesSession")

Wie gesagt - ich stehe heute sicherlich auf dem Schlauch und habe viel zu lange immer nur aus der anderen Richtung gearbeitet ...

Merci,
Bernhard

Offline animate

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.540
  • Uh, I'm just gonna go find a cash machine.
    • LA2
Re:COM Fehler
« Antwort #14 am: 29.07.04 - 22:45:19 »
also du erzeugst ein Makro in einem Excel-Sheet.
Da du wießt, dass du die Notes-Bibliothek verwenden willst, machst du das Excel bekannt, in dem du einen Verweis auf diese Bibliothek erstellst (Extras->Verweise... und da dann die Notes-Bibliothek ankreuzen. Weiß nicht genau, wie die heißt. Dort siehst du dann auch, dass die Bibliothek, die dir die Excel-Klassen zur Verfügung stellt, genauso eingebunden ist.)

Du erstellst das Makro und kannst da drin alle Klassen verwenden, die dir die Bibliothek zur Verfügung stellt.

Du schickst die Datei einem User, bei dem die Bibliothek vorhanden ist. Er muss nix tun. Die Verweise auf Bibliotheken werden mit dem Makro gespeichert.

Vorteil ist z.B. Typsicherheit, Auto-Code-Komplettierung (Strg-Space)
Thomas

Fortunately, I'm adhering to a pretty strict, uh, drug, uh, regimen to keep my mind, you know, uh, limber.

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:COM Fehler
« Antwort #15 am: 29.07.04 - 23:24:55 »
Für mich wird das jetzt doch mehr und mehr zum Krampf. Ich habe hier auf der Test-Kiste absolute Standard-Installationen von Notes und Excel. Mit einem CreateObject habe ich null Probleme - der andere Weg bringt null-komma-nix ("Typen unverträglich" bei session = CreateObject ("Lotus.NotesSession")
Der Verweis auf Notes wurde natürlich vorab eingebunden.

Ansonsten ist ja "mein" Weg über ein Variant nur dadurch unterschiedlich, das die Variable session als Variant und nicht als NotesSession deklariert wurde.

Ich sag's aber nochmal: Ich mag' ja wirklich völlig daneben liegen. Nur: Mein Weg funktioniert, der andere nicht. Was, wenn das dann auch beim Anwender passiert ...

Bernhard (jetzt wirklich sehr gespannt !)

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re:COM Fehler
« Antwort #16 am: 30.07.04 - 08:34:07 »
Hi,

welchen Verweis hast du den eingebunden? Du musst die Lotus Domino Objects einbinden. Dann sollte es funktionieren. Ich hab damit absolut keine Probleme und hatte auch auf allen Rechnern in unserem Unternehmen keine Probleme. Wenn ein Rechner Terror machte war es in der Regel eine nicht oder unsauber registrierte Bibliothek. Nach einer Neuinstallation war die Sache behoben. Die Probleme hast du aber auch, wenn du über CreateObject gehst.

An sonsten kann ich der Argumentation von Thomas voll zustimmen, von wegen Typsicherheit und Codekomplettierung. Das erspart ne Menge Tipparbeit und -fehler.


Axel


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

Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re:COM Fehler
« Antwort #17 am: 30.07.04 - 08:52:36 »
Also, für alle nur Notes-Koehler-Domino-und-so-Entwickler, das ist ja nicht wirklich VBA-Spezifisch.

Man gehe im Designer in irgend ein LotusScript hinein, klicke links, wo die Objekte aufgelistet sind, auf den Reiter "Referenz" und wähle dort die OLE-Klassen aus. Sofern eine COM-Fähige Applikation korrekt installiert ist, taucht sie und die durch sie zur Verfügung gestellten Objekte hier auf. Verantwortlich dafür ist der von der COM-Technologie zur Verfügung gestellte Object-Broker, der mit gängigen Win-Versionen gleich mitkommt.

Der einzige Unterschied zwischen Notes und VBA ist lediglich, dass VBA es darüber hinaus noch erlaubt, diese Objektbibliotheken an- oder wieder abzuwählen, so dass für den Entwickler die Liste nicht soooo ewig lang wird, wie das sonst in den heutigen Installationen normalerweise der Fall ist. Erleichtert die Uebersicht.
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

Glombi

  • Gast
COM Klassen: late-binding - early-binding / PATH
« Antwort #18 am: 30.07.04 - 08:58:21 »
Ein Aspekt bzgl. des PATH ist noch offen. Hier der entsprechende Auszug aus der Hilfe (daher meine Bemerkung "ggf."):

The Domino COM objects must be able to locate a valid NOTES.INI file, looking first in the Domino or Notes program directory and then at the PATH system variable. The KeyFileName setting in the NOTES.INI file specifies the user ID that COM uses.

Bzgl. Verwendung von
dim s as Variant
vs
dim s as NotesSession

Variant ist late-binding, NotesSession is early-binding.

Hier die Designer Hilfe dazu:
COM provides both early-binding (custom) and late-binding (dispatch) interfaces. Early binding makes the Domino classes available as typed variables with compile-time checking. Late binding can be used where the language (for example, VBScript) precludes early binding.

Creating a session object
To access the Domino Objects, create an object based on the registered Lotus.NotesSession class.
Visual Basic
Include the Domino object library in the Visual Basic project:
Choose Project - References.
Check "Lotus Domino Objects."
The location will show the path to DOMOBJ.TLB in the Domino or Notes program directory.
Alternatively, you can select the Browse button and specify DOMOBJ.TLB in the Domino or Notes program directory.
The Domino Objects then become available to the project. You can see them in the Object Browser and they appear as prompts when you start typing an object name.
The classes appear in the left-hand pane of the browser; the properties and methods appear in the right-hand pane for the selected class. Constants appear in the left-hand pane as Enum data structures; the members appear in the right-hand pane. For example, the Enum structure named ACLLEVEL contains the members ACLLEVEL_AUTHOR, ACLLEVEL_DEPOSITOR, and so on. The error constants appear in the right-hand pane when NOTES_ERRORS is selected in the left-hand pane.
To access the Domino Objects, create a NotesSession object with either:
Dim session As New NotesSession
Or:
Dim session As NotesSession
Set session = CreateObject("Lotus.NotesSession")
Hinweis  If you declare the session variable as Variant or Object, COM uses late binding.

Ich denke, jetzt sollte alles klar sein.

Andreas
« Letzte Änderung: 30.07.04 - 09:05:15 von Glombi »

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:COM Fehler
« Antwort #19 am: 30.07.04 - 11:47:36 »
Ich bin ja auch sowas von bescheuert  >:(
Wenn man den Verweis zum falschen Produkt einträgt (Lotus Notes Automation Class statt Lotus Domino Objects), dann kann Excel logischerweise nix machen ...

Jetzt funktionieren jedenfalls beide Varianten "as expected and described".

Merci an alle, die mir das Brett vor'm Kopp abgeschraubt haben,

Bernhard

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz