Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Listenfeld (ausgewählte Inhalte) in die Zwischenablage kopieren

Begonnen von mad, Januar 16, 2023, 16:00:58

⏪ vorheriges - nächstes ⏩

mad

Hallo Zusammen,
meine Kollegen würden gerne diverse eMail-Adresse aus den Personalstammdaten in die Zwischenablage kopiert haben um sie so in das Adressfeld (AN; CC; BCC) von Outlook kopieren zu können.

Dazu habe ich ein Formular mit einen entsprechenden Listenfeld erstellt. In diesem Listenfeld werden entweder durch Vorauswahl bereits alle gelisteten eMail-Adressen markiert. Man kann auch diverse Mail-Adresse durch anklicken abwählen oder umgekehrt.

Hier der Code dazu, der auch soweit funktioniert, ausgenommen dem nachfolgendem Thema:

Private Sub btneMailkopie_Click()

 Dim i As Control
 Dim t As Control
 Dim strItems As String
 Dim intCurrentRow As Integer
 
 Set i = lstKontakte
 Set t = txtZWA
 
 For intCurrentRow = 0 To i.ListCount - 1
 If i.Selected(intCurrentRow) Then
 strItems = strItems & i.Column(2, intCurrentRow) & ";"
 End If
 Next intCurrentRow
 'übergabe an das Textfeld "txtZWA"
    t = strItems
    t.SetFocus
DoCmd.RunCommand acCmdCopy

 Debug.Print strItems

End Sub
Mein Problem ist nun, obwohl die eMail-Adressen im Listenfeld des Formulars richtig angezeigt werden, so wie man es sich vorstellt:  z.B. name@web.de
Wird es im Direktfester (Debug.Print strItems) und auch im Feld ,,txtZWA" wie folgt angezeigt:
Name1@web.de#mailto:name1@web.de#;name2@web.de#mailto (name1@web.de#;name2@web.de#mailto): name2@web.de#;name3@web.de#mailto:name3@web.de (name3@web.de)#;

Wie kann ich die eMail-Adressen ohne ...#mailto:....# darstellen.
Kann man dazu im Code was "einstellen" oder muß man den Text von # bis nächstes ; einkürzen?

Hätte jemand eine Idee? Bitte wenn möglich auch zum Kürzen.

Gruss
mad
  •  

mad

Hallo Zusammen,

aktuell verfolge ich zwei Lösungsansätze:

1. mit suchen und ersetzen den Teil mit ...#mailto:...#... aus dem Ergebnis von "strItems" mit "" zu ersetzen.
Code sieht wie folgt aus:
...
Next intCurrentRow
 
 'übergabe an das Textfeld "txtZWA"
 strItems = Replace(strItems, "#*#", "")

    t = strItems
    t.SetFocus
DoCmd.RunCommand acCmdCopy
...

Da aber das #-Zeichen für einen Platzhalter für ein einzelnes Zeichen steht, funktioniert das so scheinbar nicht.
Hätte jemand einen Idee wie das mit den #-Zeichen zu schreiben ist?

2. die Mail-Adresse mit dem "Anhängsl" #mailto:.. zu kürzen:

...
Next intCurrentRow
 
 'übergabe an das Textfeld "txtZWA"
 strItems = Left([strItems], InStr(1, [strItems], "#") - 1)

    t = strItems
    t.SetFocus
DoCmd.RunCommand acCmdCopy
...

Wenn ich das an der selben Stelle wie oben mit "suchen und ersetzen" anwende, wird das ganze Ergebnis (aus mehreren Mail-Adresse) auf nur eine gekürzt.
Irgendwie müßte das Thema "= Left([strItems], InStr(1, [strItems], "#") - 1)" oben in die Schleife eingebaut werden.
Leider weis ich nicht wo und wie.

Hätte dazu auch jemand einen Vorschlag?

Danke
mad
  •  

Beaker s.a.

Hallo mad,
Du kannst die Angabe des Protokolls mit der Methode "HyperlinkPart" abschneiden
(funktioniert i.Ü. auch mit Internetadressen).
?HyperlinkPart ("Name1@web.de#mailto:name1@web.de#")
Name1@web.de

gruss ekkehard
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.
  •  

mad

Hallo Klaus,

vielen Dank für den Hinweis.

Code-Abschnitt sieht jetzt wie folgt aus:

...
strItems = HyperlinkPart(strItems & i.Column(2, intCurrentRow)) & ";"
...
Funktioniert wie gewünscht.


Danke
mad
  •  

Beaker s.a.

--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.
  •  

mad

Hallo Zusammen,

müsste das Thema nochmals aufgreifen.

Wie gesagt, daß kopieren der markierten Mail-Adressen im Listenfeld funktioniert soweit.
Allerdings hat sich nun in der Live-/Original-DB herausgestellt, daß nur 1024 Zeichen kopiert werden und der Rest bleibt unberücksichtigt.

Gibt es eine Möglichkeit die zu kopierende Zeichenanzahl auf unbegrenzt zu setzen?


Gruss
mad
  •  

mad

Hallo Zusammen,

möchte mich nochmals an euchen wenden, da ich mit dem Thema noch nicht weitergekommen bin.

Hier nochmals mein Code zum kopieren der Mail-Adressen:
Private Sub btneMailkopie_Click()

 Dim i As Control
 Dim t As Control
 Dim strItems As String
 Dim intCurrentRow As Integer
 
 Set i = lstKontakte
 Set t = txtZWA
 
 For intCurrentRow = 0 To i.ListCount - 1
     If i.Selected(intCurrentRow) Then
    strItems = HyperlinkPart(strItems & i.Column(2, intCurrentRow)) & ";"
 End If

 Next intCurrentRow
 
 'übergabe an das Textfeld "txtZWA"
    t = strItems
    t.SetFocus
DoCmd.RunCommand acCmdCopy

End Sub

Jetzt habe ich nachfolgenden Beitrag gefunden. Weis aber nicht ob das meine Lösung wäre bzw. wie ich das anwenden müsste.

http://www.donkarl.com/forum/forums/thread-view.asp?tid=1768&mid=5493#M5493

Über unterstützung würde ich mich sehr freuen.
mad
  •  

markusxy

Ich nehme mal an, du hast bereits überprüft, ob der String korrekt zusammgesetzt wird.
Liegt das Problem also rein nur um Kopieren in die Zwischenablage?
Der Umweg über das Textfeld ist ja nicht erforderlich.  Da gibt es auch andere Lösungen.


  •  

mad

Hallo markusxy,

ja ich habe die Ausgabe über das Direktfenster mit "Debug.Print strItems" überprüft. Der String ist richtig zusammengesetzt.
Ich habe auch mal die ein oder andere Markierung im Listenfeld "lstKontakte" entfernt, dann nimmt er weitere Mail-Adressen mit aber wieder nur bis 1024 Zeichen. Rest nicht.

Denn Umweg über das Textfeld habe ich erstmal dringelassen, dann kann man das gleich sehen was kopiert wird.

Hättest Du eventuell einen Lösungsansatz?


Gruss
mad
  •  

markusxy

Hier ein simples Beispiel für die Nutzung der Zwischenablage mittels DataObjekt.

Sub Zwischenablage(TextZwischenablage as String)
    'Verweis Microsoft Forms 2.0 Object Library
    Dim oData As MSForms.DataObject

    Set oData = New DataObject
    oData.SetText TextZwischenablage
    oData.PutInClipboard
    Set oData = Nothing
       
End Sub

Persönlich nutze ich einen direkten Zugriff via API.
Das ist dann aber doch etwas komplexer.
  •  

mad

Hallo markusxy,

bei mir gibt es unter Verweise nur 'Microsoft Feeds 2.0 Object Library, ist dass das selbe?

Muss dein Code, geändert "TextZwischenablage" in "txtZWA" in ein eigenes Modul? Oder in meinen aktuellen Code integriert werden?


Gruss
mad
  •  

Beaker s.a.

@mad,
Zum Verweis kann ich nichts sagen.
Den Code würde ich in ein allgem. Modul schreiben, dann kannst
du von überall darauf zugreifen.

gruss ekkehard
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.
  •  

mad

Hallo,

den Code habe ich mal in ein eigenes Modul "mdlZWA" gepackt.
Bin mir aber nicht klar wie ich diesen anwenden kann.

Ich möchte aber vielleicht nochmals einen Schritt zurückspringen, den wenn ich mein Ergebnis per "Debug.Print strItems" aus meinem Code im Direktfenster anzeigen lasse, werden dort schon nur die 1024 Zeichen angezeigt unabhängig ob ich diese Daten ins Feld "txtZWA" übertrage.
Ich vermute bis dahin ist schon das Problem.

Private Sub btneMailkopie_Click()

 Dim i As Control
 Dim t As Control
 Dim strItems As String
 Dim intCurrentRow As Integer
 
 Set i = lstKontakte
 Set t = txtZWA
 
 For intCurrentRow = 0 To i.ListCount - 1
     If i.Selected(intCurrentRow) Then
    strItems = HyperlinkPart(strItems & i.Column(2, intCurrentRow)) & ";"
 End If

 Next intCurrentRow
 Debut.Print strItems

 'übergabe an das Textfeld "txtZWA"
    t = strItems
    t.SetFocus
DoCmd.RunCommand acCmdCopy

End Sub


Gruss
mad
  •  

Beaker s.a.

'übergabe in die Zwischenablage
    Zwischenablage(strItems)
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.
  •  

mad

Danke Beaker,

nun meckert Access natürlich weil der entsprechende Verweis "Microsoft Forms 2.0 Object Library" nicht gefunden wird, siehe Bild. Ich kann den Verweis aber bei den Verweisen nicht finden.

Aber wie gesagt, ich denke mein Problem liegt weiter vorne im Code.


mad
  •