Autor Thema: VBA das aktuelle Dokument auslesen  (Gelesen 4226 mal)

Offline Tiger955

  • Frischling
  • *
  • Beiträge: 30
VBA das aktuelle Dokument auslesen
« am: 22.09.14 - 20:16:21 »
Hallo!

Ich bin neu im Forum und wende mich mit einer Frage an Euch, an der ich mir seit Längerem die Zähne ausbeisse.

Ich brauche einen VBA-Code für folgende Problemstellung:
Der User soll von einer Access-Datenbank aus einen Button klicken können, und aus dem gerade in Lotus Notes GEÖFFNETEN Mail (CurrentDocument) sollen die Attachments auf der HD gespeichert werden.

Ich schaffe das zwar, wenn ein ganzer Ordner durchlaufen werden soll, aber ich möchte nur die gerade in Notes geöffnete Mail untersuchen.

Ich brauche das in der Weise, weil aus dem VBA-Code in Access der Namen der Attachments generiert wird, welcher wiederum von der Datensatz-ID zusammenhängt und in bestimmte Tabellen Einträge gemacht werden.

Konkret kann ich auch den Code auch nicht mit Objects, also ohne einen Verweis auf Notes-Bibliotheken aufbauen, weil ich die Session nicht richtig ansprechen kann. Leider kann ich den Code, den ich verwende nicht posten, weil ich derzeit von daheim schreibe und ich am Privat-Notebook den Code nicht habe.
Ich bekomme auch einen Fehler bei der Initalisierung (?) der Session und mein Notes-PW wird verlangt. Alles extremkomplex, wenn man das für viele User gestalten soll. Es muß daher "allgemein gültig" sein.

Hoffe Ihr könnt mir helfen. Besten Dank!

Offline WildVirus

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 658
  • Geschlecht: Männlich
Re: VBA das aktuelle Dokument auslesen
« Antwort #1 am: 22.09.14 - 21:40:37 »
Hallo Tiger,

und warum nicht sauber in Notes mit Script realisieren und die Werte, wenn sie denn unbedingt in Access landen müssen, per COM oder anderen Windoof-Mechanismen rüberschieben ?

Nur so'ne Frage.

CU,
Axel

P.S. Hat der Tiger auch einen richtigen Namen ?

Offline Tiger955

  • Frischling
  • *
  • Beiträge: 30
Re: VBA das aktuelle Dokument auslesen
« Antwort #2 am: 23.09.14 - 09:52:08 »
Hallo Axel!

Warum nicht in Notes mit Script....

- weil ich Notes nicht kann
- weil ich aus Access (VBA) heraus sämtliche Aktionen starte (Namensgebung der Attachments, Aufrufen des Kunden, etc.)
- weil ich vermutlich nur an einer Kleiniglkeit scheitere

Übrigens hier ist der Code, den ich verwende und  der mir die Attachments so extrahieren SOLLTE, wie ich mir das vorstelle.


Function ReadCurrentMail()
Dim workspace As Object
Dim Form As Object 'notesUiDocument
Dim subject As String
Dim doc As Object
Dim docID As String
Dim mailFile As Object
Dim body As Object
'Embedded objects are of the datatype Variant.
Dim vaItem As Variant
Dim vaAttachment As Variant
Dim strPathToSave As String

Const EMBED_ATTACHMENT As Long = 1454
Const RICHTEXT As Long = 1

strPathToSave = "D:\Test\Attachments\"

Set workspace = CreateObject("Notes.NotesUiWorkspace")

Set Form = workspace.currentDocument

subject = Form.fieldGetText("Subject")
Debug.Print subject
'Form.EditMode = True 'property side-effect forces edit mode
'Form.gotoField "Body"
'Form.selectAll
'Form.copy

Set body = Form.GETITEM("Body")
 
 If body.HasEmbedded Then
     
        If vaItem.Type = RICHTEXT Then
            For Each vaAttachment In vaItem.EmbeddedObjects
                If vaAttachment.Type = EMBED_ATTACHMENT Then
   
                        'Save the attached file into the new folder and remove it from the e-mail.
                        With vaAttachment
                            If Right(vaAttachment.Name, 8) = ".pdf" Then                                 
Debug.Print vaAttachment.Name
                                 '.ExtractFile strPathToSave & vaAttachment.Name
                                 'da alle Mails von der VA so bennant sind: 2013042932.pdf.pdf  muß das PDF auf 2013042932.pdf gespeichert werden
                                 'Name strPathToSave & vaAttachment.Name As strPathToSave & Mid(vaAttachment.Name, 1, Len(vaAttachment.Name) - 4)
                                '.Remove
                            End If
                        End With
           
                    'Save the e-mail in order to reflect the deleting of the attached file.
                   
                    'noDocument.Save True, False
                End If
            Next vaAttachment
        End If
    End If


End Function


Ich bekomme einen Fehlere bei

Set body = Form.GETITEM("Body")

Fehler 438: Objekt unterstützt diese Eigenschaft oder Methode nicht.
Wie weise ich daher dem Object den Bereich "Body" zu, oder wie untersuche ich sonst das Mail auf Attachments, um sie dann zu extrahieren.

Das wäre mein Problemchen.

Danke
Michael (Tiger955)

Offline ghostmw

  • Aktives Mitglied
  • ***
  • Beiträge: 201
  • Geschlecht: Männlich
    • BELOS - Raum+Ressourcenmanagement unter Lotus Notes
Re: VBA das aktuelle Dokument auslesen
« Antwort #3 am: 23.09.14 - 10:05:46 »
Moin,

also wenn ich das richtig sehe, gibt es keine Methode GETITEM ... oder ?

GETFIRSTITEM würde ich empfehlen.
Grüße
Marco Weller
Lotus Domino / Lotus Notes seit 1996 (ab 4.5x)

Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.697
  • Geschlecht: Männlich
Re: VBA das aktuelle Dokument auslesen
« Antwort #4 am: 23.09.14 - 10:05:59 »
Hallo,

Weil dies im FrontEnd (NotesUIDocument) nicht funktioniert.

Probier mal - nicht getestet -

Code
Set Body = Form.Document.getFirstItem("Body")


Andreas

Offline Tiger955

  • Frischling
  • *
  • Beiträge: 30
Re: VBA das aktuelle Dokument auslesen
« Antwort #5 am: 23.09.14 - 10:09:25 »
@ghostmw

Moin,

also wenn ich das richtig sehe, gibt es keine Methode GETITEM ... oder ?

GETFIRSTITEM würde ich empfehlen.

Das hatte ich auch schon probiert, funktioniert auch nicht.
Trotzdem Danke für die Antwort.

Offline Tiger955

  • Frischling
  • *
  • Beiträge: 30
Re: VBA das aktuelle Dokument auslesen
« Antwort #6 am: 23.09.14 - 10:12:03 »
@Andreas

Hallo,

Weil dies im FrontEnd (NotesUIDocument) nicht funktioniert.

Probier mal - nicht getestet -

Code
Set Body = Form.Document.getFirstItem("Body")


Andreas

Diese Zeile wurde ohne Fehler genommen, sie dürfte daher funktionieren, dafür bekomme ich in der nächsten Zeile einen Fehler

Code
 If body.HasEmbedded Then

Wie prüft man, ob der Body ein Attachment hat??


Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.697
  • Geschlecht: Männlich
Re: VBA das aktuelle Dokument auslesen
« Antwort #7 am: 23.09.14 - 10:16:08 »
Hallo,

Das kannst Du nicht auf dem Body machen. das geht nur auf dem Dokument selber.

Du kannst aber mit einer - hier kommt wieder Lotus Script - ForAll-Schleife arbeiten.

Code
ForAll o In Body.EmbeddedObjects

    If o.Type = EMBED_ATTACHMENT Then
        
        Call o.Extract(...)

    End If

Next

Alles Beispiele aus der Designer-Hilfe in Notes.


Andreas

Offline Tiger955

  • Frischling
  • *
  • Beiträge: 30
Re: VBA das aktuelle Dokument auslesen
« Antwort #8 am: 23.09.14 - 10:22:44 »
Hallo,

Den Code aus LS kannt ich, aber WIE soll ich LS in mein VBA Porjekt einbauen?

"Forall" gibt es in VBA nicht, mit "For Each o In Body...." geht es auch nicht, denn ich brauche den Body.

Wenn ich durch einen ganzen Folder loope geht es ja auch
Code
Do Until noDocument Is Nothing
   
    Set noNextDocument = noView.GetNextDocument(noDocument)
    On Error Resume Next
    'Check if the document has an attachment or not.
    If noDocument.HasEmbedded Then
      Set vaItem = noDocument.GetFirstItem("Body")
        If vaItem.Type = RICHTEXT Then
            For Each vaAttachment In vaItem.EmbeddedObjects
                If vaAttachment.Type = EMBED_ATTACHMENT Then
.....


Ich brauche daher nur das analoge Vorgehen für das im Workspace geöffnete (oder markierte) Mail.

Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.697
  • Geschlecht: Männlich
Re: VBA das aktuelle Dokument auslesen
« Antwort #9 am: 23.09.14 - 11:12:21 »
hallo,

Den Body solltest du doch jetzt haben. Oder habe ich hier etwas verpasst.

Set Body = Form.Document.getFirstItem()


Andreas

Offline Tiger955

  • Frischling
  • *
  • Beiträge: 30
Re: VBA das aktuelle Dokument auslesen
« Antwort #10 am: 23.09.14 - 12:52:09 »
Hallo Andreas,

ja, den Body habe ich.

Aber wie ich schrieb, hier bekomme ich einen Fehler

Code
If body.HasEmbedded Then

d.h. diese Zeile geht zwar fehlerlos

Set Body = Form.Document.getFirstItem("Body"), allerdings bin ich nicht so sicher, dass dem Body auch etwas zugewiesen wird.
Aber Deine führt zu einem Fehler 13: Typen unverträglich (Set Body = Form.Document.getFirstItem() )

aber die nächste Zeile
If body.HasEmbedded Then
führt wieder zu einem Fehler 438: Objekt unterstützt diese Eigenschaft oder Methode nicht.

Also irgendwie scheint es nicht zu gehen, dass man den Body eines geöffneten Mails auf Attachments untersucht.

Michael

Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.697
  • Geschlecht: Männlich
Re: VBA das aktuelle Dokument auslesen
« Antwort #11 am: 23.09.14 - 13:22:26 »
Hallo,

Und wie ich es auch schon geschrieben habe, Body kenn kein HasEmbedded.

Nur das Dokument, also Form.Document in deinem Fall, kenn die Methode "HasEmbedded"

Und prinzipiell sollte die von mir genannte Schleife auch in VBA funktionieren.

Code
For Each o in Body

Next
Daher auch meine Anmerkung, dass du den Body ja hast.


Andreas

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz