existierende Datei in Zwischenablage kopieren (VBA-Access)

Diskutiere existierende Datei in Zwischenablage kopieren (VBA-Access) im Programmierung Forum im Bereich Software Forum; Hi zusammen, habe per Google nichts vernünftiges gefunden - immer nur anders herum... Also: ich will per Knopfdruck einen Dateipfad übergeben...
G

gueengel

Threadstarter
Mitglied seit
26.06.2006
Beiträge
31
Hi zusammen,

habe per Google nichts vernünftiges gefunden - immer nur anders herum...

Also: ich will per Knopfdruck einen Dateipfad übergeben und die zugehörige Datei (in meinem Fall bereits existierende PDF-Dateien) in die Zwischenablage legen, damit ich sie per paste an beliebige Orte kopieren kann. Nicht Inhalte, sondern die komplette Datei.

Hintergrund: in meiner DB (Access 2003) archiviere ich Infos über Broschüren, die ich als PDF in einem bestimmten Pfad liegen habe. Ich kann z.B. aus dem Formular die Datei mit Adobe Reader öffnen und ansehen. Zum Verschicken per E-Mail muss ich aber immer per Hand die Datei im Explorer suchen und mit Copy/Paste in die E-Mail kopieren. Das würde ich mir gerne vereinfachen.

Ideen? Danke im Voraus!
Grüße
Günther
 
A

AlienJoker

Gast
Wie fit bist du in VBA und im Office Objekt Modell?
 
G

gueengel

Threadstarter
Mitglied seit
26.06.2006
Beiträge
31
hm, na das klingt so, als ob es keine "einfache" Lösung gibt...
VBA hab ich schon ein paar Sachen ausprogrammiert, im 2. Punkt würde ich mich nicht als Profi bezeichnen, aber (mit ein bischen Hilfestellung) könnte es schon klappen. Naja, wenn ich nach Deinem nächsten Posting nur Bahnhof verstehen sollte, sag ich Bescheid...
 
Peter Schirmer

Peter Schirmer

Dienstleister / Moderator
Mitglied seit
14.04.2006
Beiträge
7.060
Alter
39
Standort
7th Avenue, Ecke XP und Vista, 8ter Stock, Wohnung
Hallo,

ich habe mir mal erlaubt, folgendes in Excel zu erstellen. Sollte in Access aber auch so funktionieren.

Code:
'Quelle: http://www.software-chuchi.ch/praxis/visual_basic_dateien_und_verzeichnisse_dateiliste_eines_verzeichnisses.htm
Function DateiListe( _
    strPfad As String, _
    Optional strKuerzel As String) _
 As String
 
    'Deklaration
    Dim strDatei As String
    Dim strDateien As String
 
    'Suchmuster bereitstellen
    If IsMissing(strKuerzel) Then
        strDatei = Dir(strPfad)
    Else
        strDatei = Dir(strPfad & strKuerzel)
    End If
 
   'Dateien durchlaufen
    Do While Len(strDatei) <> 0
        strDateien = strDateien & strDatei & vbCrLf
        strDatei = Dir
    Loop
 
    'Rückgabe
    If Len(strDateien) = 0 Then
        DateiListe = ""
    Else
        DateiListe = strDateien
    End If
    
End Function

Sub Kopieren()
  
    'Deklaration
    Dim strListe As String
    Dim PDF As String
    Dim Quelle As String
    Dim Ziel As String
    
    [COLOR="Red"][B]'Diese Angaben bitte pflegen
    Quelle = "c:\dokumente und einstellungen\p_schi06\desktop\"         'Ordner mit Quelldateien
    Ziel = "c:\dokumente und einstellungen\p_schi06\desktop\test\"      'Zielordner
    PDF = "Winboard.pdf"                                                'Test-Datei[/B][/COLOR]
 
    'Liste erstellen
    strListe = DateiListe(Quelle, PDF)
    'strListe = DateiListe("c:\windows\", "control.ini")
 
    'Ausgabe
    If Len(strListe) = 0 Then
        MsgBox "Keine Datei(en) gefunden!"
    Else
    
        'MsgBox strListe
       FileCopy Quelle & PDF, Ziel & PDF
        
               
    End If
 
 End Sub
Füge den Code in ein Modul ein. Trage dann den jeweiligen Pfad in dem roten Bereich passend für dich ein. Dann kannst du von dem Button aus "Kopieren" aufrufen.

Du solltest natürlich die roten Stellen variabel halten. Wenn du nicht wissen solltest, wie das geht, helfen wir hier gerne weiter. :satisfied
 
G

gueengel

Threadstarter
Mitglied seit
26.06.2006
Beiträge
31
Hallo Peter,

vielen Dank für die Antwort. Verstehe ich das richtig, dass die Datei von A nach B kopiert wird?
Ich möchte gerne von A nach Clipboard kopieren.
Beim googlen hab ich folgende Funktion gefunden (aus der user32.dll): setclipboarddata; allerdings bin ich noch etwas ratlos, wie das auf eine PDF-Datei anzuwenden ist. Clipboard auslesen oder (Text)-Variableninhalte reinschreiben scheint damit aber rel. leicht zu funktionieren.
 
G

gueengel

Threadstarter
Mitglied seit
26.06.2006
Beiträge
31
ja, ganze Datei einfügen, z.B. als E-Mail-Anhang. Gibt es denn eine "Pfadangabe" für eine zum Bearbeiten geöffnete E-Mail, wo ich eine Datei hinkopieren kann? Wenn ja (glaub ich eher nicht?), könnte man nat. von A nach B kopieren. Ich dachte aber, das geht nur über den Umweg der Zwischenablage.?!
 
Peter Schirmer

Peter Schirmer

Dienstleister / Moderator
Mitglied seit
14.04.2006
Beiträge
7.060
Alter
39
Standort
7th Avenue, Ecke XP und Vista, 8ter Stock, Wohnung
Vielleicht so mit Outlook?

Code:
'Quelle: http://www.software-chuchi.ch/praxis/visual_basic_dateien_und_verzeichnisse_dateiliste_eines_verzeichnisses.htm
Function DateiListe( _
    strPfad As String, _
    Optional strKuerzel As String) _
 As String
 
    'Deklaration
    Dim strDatei As String
    Dim strDateien As String
 
    'Suchmuster bereitstellen
    If IsMissing(strKuerzel) Then
        strDatei = Dir(strPfad)
    Else
        strDatei = Dir(strPfad & strKuerzel)
    End If
 
   'Dateien durchlaufen
    Do While Len(strDatei) <> 0
        strDateien = strDateien & strDatei & vbCrLf
        strDatei = Dir
    Loop
 
    'Rückgabe
    If Len(strDateien) = 0 Then
        DateiListe = ""
    Else
        DateiListe = strDateien
    End If
    
End Function

Sub Kopieren()
  
    'Deklaration
    Dim strListe As String
    Dim PDF As String
    Dim Quelle As String
    Dim Ziel As String
    Dim AW As String
    
    'Diese Angaben bitte pflegen
    Quelle = "c:\dokumente und einstellungen\p_schi06\desktop\"         'Ordner mit Quelldateien
    Ziel = "c:\dokumente und einstellungen\p_schi06\desktop\test\"      'Zielordner
    PDF = "Winboard.pdf"                                                'Test-Datei
 
    'Liste erstellen
    strListe = DateiListe(Quelle, PDF)
    'strListe = DateiListe("c:\windows\", "control.ini")
 
    'Ausgabe
    If Len(strListe) = 0 Then
        MsgBox "Keine Datei(en) gefunden!"
    Else
    
        'MsgBox strListe
       'FileCopy Quelle & PDF, Ziel & PDF
    [COLOR="Red"]  [B] AW = MitOutlookSenden("Empfänger@test.org", "Test", "Dies ist ein Winbaord.org-Test", Quelle & PDF)[/B][/COLOR]
        
               
    End If
 
 End Sub
 
Public Function MitOutlookSenden(Empfänger As String, Betreff As String, Text As String, Anhang As String)
 
'Quelle: http://www.office-loesung.de/ftopic241774_0_0_asc.php
Dim OutApp As Object, Mail As Object
'Variablen müssen bei jeder Schleife neu initalisiert werden
Set OutApp = CreateObject("Outlook.Application")
Set Nachricht = OutApp.CreateItem(0)
With Nachricht
.To = Empfänger
.Subject = Betreff 'Betreffzeile
.Body = Text 'Sendetext
.Attachments.Add Anhang
.Display
End With
'Variablen zurücksetzen sonst geht es nicht
Set OutApp = Nothing 'CreateObject("Outlook.Application")
Set Nachricht = Nothing 'OutApp.CreateItem(0)

End Function
Rot natürlich wieder anpassen!
 
G

gueengel

Threadstarter
Mitglied seit
26.06.2006
Beiträge
31
super, das funktioniert schon mal...

Siehst Du auch eine Möglichkeit in eine bereits offene Mail was reinzukopieren (bzw. in die beim ersten Aufruf geöffnete Mail erneut kopieren)? Dann könnte ich problemlos mehrere PDFs in eine Mail packen.
 
G

gueengel

Threadstarter
Mitglied seit
26.06.2006
Beiträge
31
ja, Schleife öffnet immer wieder eine neue Mail...

Hab inzwischen aber eine Lösung implementiert. Dazu benutze ich globale Variablen für die jeweiligen Dateipfade und einen counter (ist zwar etwas unelegant, aber funktioniert wenigstens - Spaghetticode aus den guten alten TurboPascal-Zeiten lässt grüßen ;-)).
Bei jedem Auswählen einer PDF schreibe ich den Dateipfad in die nächste globale String Variable (bei mir pdf1, pdf2 usw.). Wenn ich dann die Mail erzeuge, kann ich in der Funktion "MitOutlookSenden" einfach ein Attachment nach dem anderen einfügen (übergebenen Parameter "Anhang" einfach ignorieren:

With nachricht
.To = Empfänger
.Subject = Betreff 'Betreffzeile
.Body = Text 'Sendetext
If pdf1 <> "" Then
.Attachments.Add pdf1
End If
If pdf2 <> "" Then
.Attachments.Add pdf2
End If
usw...

Einziges mir bisher aufgefallenes Manko ist folgendes:
die Attachments in der E-Mail lassen sich nicht per Drag+drop (bzw. Kopieren/Einfügen) von dort entnehmen. D.h. wenn ich sie zusätzlich händisch aus der E-Mail an einen anderen Ort kopieren möchte geht das nicht. Gibt es bei dem Outlook-Objekt irgendwelche Schalter, mit denen man sowas einstellen kann? (Set OutApp = CreateObject("Outlook.Application") Set nachricht = OutApp.CreateItem(0))

Wenn ich das noch zum Laufen bekommen würde, wäre ich mit der Lösung zufrieden. Ideen?
 
G

gueengel

Threadstarter
Mitglied seit
26.06.2006
Beiträge
31
kann es sein, dass man die Anlagen aus nicht versendeten Mails generell nicht entnehmen kann (per copy/paste), sondern nur aus empfangenen?
 
Peter Schirmer

Peter Schirmer

Dienstleister / Moderator
Mitglied seit
14.04.2006
Beiträge
7.060
Alter
39
Standort
7th Avenue, Ecke XP und Vista, 8ter Stock, Wohnung
Ich habe mich ein wenig mit Outlook.NET beschäftigt (also Outlook in Verbindung mit dem .NET-Framework) und habe eine simple .exe-Datei gebaut, die eine Mail aufrufen kann. Die Einstellungen für Dateien, Betreff, etc. ist über Kommandozeilenschalter steuerbar.

Wenn du interessiert bist, kann ich die hier uploaden. :satisfied

Bild.png

Der Aufruf sieht so aus:

"C:\Temp\ConsoleApplication1.exe" /files="C:\Temp\bin\Release" /to="Empfaenger@adresse.de" /subject="Die Dateien" /body="Wie versprochen, finden Sie im Anhang die Dateien."
Es geht ein kleines Fenster auf und dann kommt die Mail. :satisfied

Voraussetzung:

.NET 3.5
Office ab 2003
 
Zuletzt bearbeitet:
Thema:

existierende Datei in Zwischenablage kopieren (VBA-Access)

Sucheingaben

vba zeile lesen und zwischenspeicher

existierende Datei in Zwischenablage kopieren (VBA-Access) - Ähnliche Themen

  • "indows 10 v1903; Nicht existierende Laufwerke im Netzwerk angezeigt

    "indows 10 v1903; Nicht existierende Laufwerke im Netzwerk angezeigt: Hallo, ich kämpfe derzeit mit diesem Problemchen: PCs im WLAN zeigen mir auf einem anderen PC (auch) Laufwerke an, die dort nicht mehr...
  • Wie bringe ich existierende Updates auf meinen PC ?

    Wie bringe ich existierende Updates auf meinen PC ?: Wie bringe ich existierende Updates auf meinen PC ?
  • existierende Live Mail Adresse (vormals alias) wieder aktivieren und mit outlook verknüpfen

    existierende Live Mail Adresse (vormals alias) wieder aktivieren und mit outlook verknüpfen: Hallo an alle die mir geholfen haben den Alias aus meine EMail zu bekommen. Nun hat meine Frau das Problem, dass sie zwar liveMail installiert...
  • existierende Live Mail Adresse (vormals alias) wieder aktivieren und mit outlook verknüpfen

    existierende Live Mail Adresse (vormals alias) wieder aktivieren und mit outlook verknüpfen: Hallo an alle die mir geholfen haben den Alias aus meine EMail zu bekommen. Nun hat meine Frau das Problem, dass sie zwar liveMail installiert...
  • Openwith.exe (Öffne mit) startet nicht existierende Datei

    Openwith.exe (Öffne mit) startet nicht existierende Datei: Ich habe das Problem, dass ein paar Minuten nach starten des Betriebsystems auf dem uralten Notebook, ich gefragt werde, ob ich die Datei öffnen...
  • Ähnliche Themen

    Oben