Inhalt eines berechneten Feldes in die Zwischenablage kopieren

  • Hallo Zusammen,


    ich möchte gerne den Inhalt eines berechneten Feldes in die Zwischenablage kopieren. Mit der Formel "@Command([EditCopy])" und der Methode "Copy" in "NotesUIDocument" habe ich es bereits versucht, brachte aber keinen Erfolg.
    Kann ich diese Funktion über die Windows API erreichen oder hat jemand eine andere Idee?


    Gruß und bereits vielen Dank für Eure Antworten.


    Marcel


    P.S.: Frohe Weihnachten

  • Um diese Formeln bzw. Funktionen zu verwenden, muss der entsprechende Text schon markiert sein.


    Was genau willst du denn da machen ?


    Eine Möglichkeit wäre natürlich das ganze was kopiert werden soll in ein sichtbares Feld hineinzukopieren, dort dann zu markieren und mit der Copy Funktion in die Zwischenablage zu kopieren.
    Etwas umständlich aber möglich.

  • Hallo,


    erst einmal Danke für Deine Antwort.


    Das kopierte Feld (enthält Adress-Informationen) soll in Word eingefügt werden.
    Die Lösung mit dem zusätzlichen Feld habe ich bereits getestet. Sobald dieses aber (unbeabsichtigt!?) geändert wird, stimmen die Informationen mit dem berechneten Feld nicht mehr überein.
    Das Feld jedes mal zu "Refreshen" ist mir zu kompliziert.


    Gruß


    Marcel

  • Eine weitere Möglichkeit wäre, aus dem Dokument heraus eine Dialogbox aufpoppen zu lassen, in der das Feld bearbeitbar ist (also eine spez. Maske mit genau diesem Feld im Bearbeitenmodus). Dort kannst Du es dann kopieren.
    Wenn Du alles in das Postopen packst, kannst Du die Dialogbox gleich wieder automatisch schließen, so daß der Nutzer maximal ein kurzes Flackern sieht.

    Für jedes Problem gibt es eine einfache Lösung, die es noch schlimmer macht.

  • Das Refreshen würde ich halt in einem Schritt mit dem Übertragen in die Zwischenablage machen.
    Aber mal eine andere Frage dazu:


    Ist das immer das gleiche Word-Dokument in das die Daten eingefügt werden sollen ?
    Wenn ja wäre es doch eine gute Möglichkeit die Daten über COM in das Word-Dokument einzufügen und es dann für den Benutzer zum Weiterbearbeiten zu Öffnen.
    Dann hast du auch keine Probleme mit berechneten feldern und so

  • Du hinterlegst das Word-Dokument in einer Maske und extrahierst es auf die Platte wenn die Adressdaten übertragen werden sollen.
    Dann baust du über COM eine Verbindung zu diesem Dokument auf:


    Set appWord = CreateObject("Word.Application")
    appWrd.Visible = True
    Call appWord.Documents.Open(Hier kommt der Dateiname rein)


    Danach kann über die VBA Methoden und Eigenschaften auf das Word-Dokument und die Felder zugegriffen werden.


    Um den Wert in das Word-Dokument zu bringen, muss im Word-Dokument ein oder mehrere Felder vorhanden sein, in die die Werte übertragen werden können

  • Erstelle ne Action - und dann das:



    Dim workspace As New NotesUIWorkspace
    Dim uidoc As NotesUIDocument

    Set uidoc = workspace.CurrentDocument

    Call uidoc.gotofield("Anschrift")
    Call uidoc.SelectAll
    Call uidoc.Copy
    Call. uidoc.close

  • Hi,


    bastle Dir einen Button


    Unter Declarations das hier rein:
    [color=0000FF]'Deklaration
    Const GMEM_MOVEABLE = &H40
    Const GMEM_ZEROINIT = &H2
    Const CF_TEXT = &H01
    Const SRCCOPY = &HCC0020


    Declare Function OpenClipboard Lib "user32" Alias "OpenClipboard" (Byval hwnd As Long) As Long
    Declare Function CloseClipboard Lib "user32" Alias "CloseClipboard" () As Long
    Declare Function EmptyClipboard Lib "user32" Alias "EmptyClipboard" () As Long
    Declare Function SetClipboardData Lib "user32" Alias "SetClipboardData" (Byval wFormat As Long, Byval hMem As Long) As Long
    Declare Function GlobalAlloc Lib "kernel32" Alias "GlobalAlloc" (Byval wFlags As Long, Byval dwBytes As Long) As Long
    Declare Function GlobalLock Lib "kernel32" Alias "GlobalLock" (Byval hMem As Long) As Long
    Declare Function GlobalUnlock Lib "kernel32" Alias "GlobalUnlock" (Byval hMem As Long) As Long
    Declare Function lstrcpy Lib "kernel32" Alias "lstrcpyA" (Byval lpString1 As Long, Byval lpString2 As String) As Long
    Declare Function NEMGetCurrentSubprogramWindow Lib "nnotesws.dll" () As Long
    [/color]


    Unter "Click" das hier - Feldnamen noch anpassen:
    [color=0000FF]Sub Click(Source As Button)
    Dim s As New NotesSession
    Dim ws As New NotesUIWorkspace
    Dim db As NotesDatabase
    Dim uiDoc As NotesUIDocument
    Dim plainText As String
    Set db = s.CurrentDatabase
    Set uiDoc = ws.CurrentDocument
    plainText = uiDoc.FieldGetText("DEIN FELD")
    setclipboardtext(plainText)
    Print "Copied to clipboard......"
    End Sub


    [/color]



    Dann noch diese Function hinzufügen.
    Dazu einfach unter "Click" irgendwo den Cursor in einer leeren Zeile Platzieren und dann Einfügen
    [color=0000FF]
    Sub SetClipboardText(text As String)
    Dim hwnd As Long
    Dim hGlobalMemory As Long
    Dim lpGlobalMemory As Long
    Dim ret As Variant
    On Error Goto error_handler
    hwnd = NEMGetCurrentSubProgramWindow()
    If hwnd Then
    hGlobalMemory = GlobalAlloc(Clng(GMEM_MOVEABLE Or GMEM_ZEROINIT), Clng(Len(text)+1))
    If hGlobalMemory Then
    lpGlobalMemory = GlobalLock(hGlobalMemory)
    If lpGlobalMemory Then
    ret = lstrcpy(lpGlobalMemory, text)
    Call GlobalUnlock(hGlobalMemory)
    If OpenClipboard(hwnd) Then
    ret = EmptyClipboard()
    ret = SetClipboardData(CF_TEXT, hGlobalMemory)
    ret = CloseClipboard()
    End If
    Else
    Msgbox "Can't allocated global memory pointer.", 32, "Error"
    End If
    Else
    Msgbox "Can't allocated global memory handle.", 32, "Error"
    End If
    Else
    Msgbox "Can't get window handle.", 32, "Error"
    End If
    Exit Sub
    error_handler:
    Print "Error: " + Error$(Err)
    Resume Next
    End Sub
    [/color]


    Planet