Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Files in Zwischenablage

317 views
Skip to first unread message

Kurt Strasser

unread,
Jan 26, 2001, 4:40:57 PM1/26/01
to
Ich möchte über Excel eine Datei in die Zwischenablage kopieren

einfaches Beispiel -> die Datei c:\autoexec.bat in die Zwischenablage
kopieren
so das ich sie zb im Explorer in ein verzeichnis mittels einfügen kopieren
kann.


Vielen Dank im vorraus.............


Hans Werner Hofmann

unread,
Jan 27, 2001, 5:56:47 AM1/27/01
to
On Fri, 26 Jan 2001 22:40:57 +0100, "Kurt Strasser"
<kurt.s...@gmx.de> wrote:

>Ich möchte über Excel eine Datei in die Zwischenablage kopieren
>
>einfaches Beispiel -> die Datei c:\autoexec.bat in die Zwischenablage
>kopieren
>so das ich sie zb im Explorer in ein verzeichnis mittels einfügen kopieren
>kann.
>

So wird das nix,
Es gibt aber in VBA die Anweisung
FileCopy source, destination

Gruß HW
--
Hans Werner Hofmann

Kurt Strasser

unread,
Jan 27, 2001, 11:09:32 AM1/27/01
to
Die Filecopy methode ist mir schon bekannt.

Aber meine Idee ist die ,das ich eine Dateinamen(+Pfad) in einer
Excel-Tabelle selektiere , und diese mittels einer VBA-Routine in die
Zwischenablage kopiert wird, und ich dann zb. in meinen E-Mail-Programm nur
mehr "einfügen"
ausführen muss, und schon habe ich die Datei am Ziel.


"Hans Werner Hofmann" <h...@lemitec.de> schrieb im Newsbeitrag
news:d9a57tss2d55mvvl8...@4ax.com...

Ullrich Schwarz

unread,
Jan 27, 2001, 11:59:32 AM1/27/01
to
Hallo Kurt,

folgendes Makro fügt den Dateipfad als Text in die Zwischenablage, was für
Deine Zwecke ausreichen sollte.

Sub a()
Dim Adressfeld As Object, Pfad$
Set Adressfeld = New DataObject
Pfad = "c:\autoexec.bat"
Adressfeld.SetText Pfad, 1
Adressfeld.PutInClipboard
End Sub

Ein ganz anderer Weg, aus Excel E-Mails zu versenden siehe zB:
http://x75.deja.com/getdoc.xp?AN=595342888&CONTEXT=980613472.2036203562&hitn
um=2

MfG Ullrich


"Kurt Strasser" <kurt.s...@gmx.de> schrieb im Newsbeitrag
news:3a72f340$0$22...@SSP1NO25.highway.telekom.at...

Kurt Strasser

unread,
Jan 28, 2001, 7:52:11 AM1/28/01
to
Vielleicht habe ich mich auch schlecht ausgedrückt, aber ich möchte nicht
den Pfad übergeben , sonder die Datei selber als Objekt.

wenn ich zb. im Explorer eine Datei markiere und mit kopieren in die
zwischenablage kopiere, genau das möchte ich über Excel machen , wenn es
sein muss auch mit DLL aufrufen, aber wie.............


"Ullrich Schwarz" <Ullrich...@gmx.de> schrieb im Newsbeitrag
news:94uuq7$5bi6f$1...@ID-7341.news.dfncis.de...

Ullrich Schwarz

unread,
Jan 28, 2001, 9:42:37 AM1/28/01
to
Hallo Kurt,
für das email-Programm müßte der Pfad als Text ausreichen. VBA unterstützt
meines Wisses zumindest in Excel97 nicht das clipboard-Objekt. Die Datei
selbst in die Zwischenablage zu kopieren, dürfe IMHO mit Excel-Bordmitteln
daher nicht funktionieren.
MfG Ullrich

"Kurt Strasser" <kurt.s...@gmx.de> schrieb im Newsbeitrag

news:3a7421e6$0$21...@SSP1NO25.highway.telekom.at...

Michael Schwimmer

unread,
Jan 29, 2001, 4:54:00 PM1/29/01
to
Kurt Strasser <kurt.s...@gmx.de> schrieb in im Newsbeitrag:
3a7421e6$0$21...@SSP1NO25.highway.telekom.at...

> Vielleicht habe ich mich auch schlecht ausgedrückt, aber ich möchte nicht
> den Pfad übergeben , sonder die Datei selber als Objekt.

Hallo Kurt,
was für ein Objekt soll deiner Ansicht nach in die Zwischenablage?

Beim Kopieren im Explorer wird nicht die Datei in die Zwischenablage
kopiert, vielmehr wird ein String mit Pfadnamen erzeugt, wobei die
einzelnen Dateien durch Chr(0) getrennt sind. Ans Ende kommt eine
'Doppelnull' und vor den String eine DROPFILES-Struktur. Das Ganze
wird etwas aufbearbeitet, ein paarmal hin- und herkopiert und an
die API-Funktion SetClipboardData übergeben. Es wird also auch
nur ein Pfad übergeben.

Die Applikation, in die du etwas einfügen willst, muss sich
dann selbst um den Rest kümmern. Falls Sie etwas mit der Art der
Daten in der Zwischenablage anfangen kann, muss sie in diesem
Fall die Liste auslesen und die Dateien selbst kopieren, verschieben,
drucken oder sonstwie bearbeiten. Die Zwischenablage übernimmt
dabei keinen aktiven Part.

> wenn ich zb. im Explorer eine Datei markiere und mit kopieren in die
> zwischenablage kopiere, genau das möchte ich über Excel machen , wenn es
> sein muss auch mit DLL aufrufen, aber wie.............

Ob du mit dieser Methode Erfolg hast, hängt somit ausschließlich
an deinem Mailprogramm. Hast du schon mal probiert, eine Datei
aus dem Explorer zu 'kopieren' und dann in dein Mailprogramm
einzufügen?
Wenn das funktioniert, poste nochmal in die NG. Den Code, um so
eine Liste in die Zwischenablage zu befördern oder auszulesen,
kann ich dir zur Verfügung stellen.


MfG
Michael

Kurt Strasser

unread,
Jan 30, 2001, 1:03:20 PM1/30/01
to
Danke für deine Informationen..... schön langsam geht mir ein Licht auf....

Kennst du vielleicht ein paar Sourcecodes bezüglich Clipboard ?

"Michael Schwimmer" <schw...@t-online.de> schrieb im Newsbeitrag
news:954ose$bq$01$1...@news.t-online.com...

Michael Schwimmer

unread,
Jan 30, 2001, 4:04:26 PM1/30/01
to
Kurt Strasser <kurt.s...@gmx.de> schrieb in im Newsbeitrag:
3a77026d$0$25...@SSP1NO25.highway.telekom.at...

> Kennst du vielleicht ein paar Sourcecodes bezüglich Clipboard ?
>
Private Declare Sub CopyMemory Lib "kernel32" _
Alias "RtlMoveMemory" (Destination As Any, _
Source As Any, ByVal Length As Long)
Private Declare Function CloseClipboard Lib _
"user32" () As Long
Private Declare Function OpenClipboard Lib _
"user32" (ByVal hWnd As Long) As Long
Private Declare Function EmptyClipboard Lib _
"user32" () As Long
Private Declare Function SetClipboardData Lib _
"user32" (ByVal wFormat As Long, ByVal hMem _
As Long) As Long
Private Declare Function GlobalAlloc Lib "kernel32" _
(ByVal wFlags As Long, ByVal dwBytes As Long) As Long
Private Declare Function GlobalLock Lib "kernel32" _
(ByVal hMem As Long) As Long
Private Declare Function GlobalUnlock Lib "kernel32" _
(ByVal hMem As Long) As Long
Private Const CF_HDROP = 15
Private Const GMEM_ZEROINIT = &H40


'Zum Holen der Dateiliste
Private Declare Function GetClipboardData Lib _
"user32" (ByVal wFormat As Long) As Long
Private Declare Function IsClipboardFormatAvailable _
Lib "user32" (ByVal wFormat As Long) As Long
Private Declare Function DragQueryFile Lib "shell32.dll" _
Alias "DragQueryFileA" (ByVal hDrop As Long, _
ByVal UINT As Long, ByVal lpStr As String, _
ByVal ch As Long) As Long

'Diese Sub stellt eine Dateiliste in die Zwischenablage
'Anschließend kann man diese Dateien mit einem
'Rechtsklick im Explorer und anschließendem Einfügen
'in das Verzeichnis schieben. Vorsicht:
'Bei NT wird eine Kopie erstellt, bei 98 wird verschoben,
'wenn das gleiche Laufwerk genommen wird.

Private Sub DateiInClipboard()
Dim Quelldatei As String, b() As Byte 'Buffer
Dim lngZeiger As Long
'Einzelne Einträge durch Chr(0) getrennt
Quelldatei = "C:\Spitze1.xls" & Chr(0)
'Am Ende zweimal Chr(0) (String(2, 0))
Quelldatei = Quelldatei & "C:\Spitze.xls" & String(2, 0)
'An Struktur DROPFILES anhängen und in Array umwandeln
b = StrConv(String(20, 0) & Quelldatei, vbFromUnicode)
b(0) = 20 'Länge Strukt. DROPFILES
'Speicher über Prozessgrenzen hinweg verfügbar machen
lngZeiger = GlobalAlloc(GMEM_ZEROINIT, UBound(b) + 1)
GlobalLock lngZeiger
'Infos dort ablegen
CopyMemory ByVal lngZeiger, b(0), UBound(b) + 1
GlobalUnlock lngZeiger
'Übergabe an Clipboard
OpenClipboard 0&: EmptyClipboard
SetClipboardData CF_HDROP, lngZeiger: CloseClipboard
End Sub

'Hiermit wird die Liste aus der Zwischenablage gelesen.
Private Function DateilisteAusClipboard() As String
Dim Quelldatei As String, b As String 'Buffer
Dim lngZeiger As Long, lngAnzahl As Long
Dim zähler As Long, Ret As Long
'Wenn Clipboard-Format Fileliste ist, dann ...
If IsClipboardFormatAvailable(CF_HDROP) Then
OpenClipboard 0&
'Zeiger holen
lngZeiger = GetClipboardData(CF_HDROP)
'Anzahl Dateien in der Liste ermitteln
lngAnzahl = DragQueryFile(lngZeiger, -1&, "", 0)
For zähler = 0 To lngAnzahl - 1
'Buffer erzeugen
b = String(256, 0)
'Eine Datei aus Liste mit dem Index zähler holen
'die Anzahl Zeichen werden zurückgegeben
Ret = DragQueryFile(lngZeiger, zähler, b, 255)
'String wird erzeugt
DateilisteAusClipboard = DateilisteAusClipboard _
& Left$(b, Ret) & vbCrLf
Next
CloseClipboard
'MsgBox DateilisteAusClipboard
End If
End Function

MfG
Michael

Kurt Strasser

unread,
Jan 31, 2001, 1:59:02 AM1/31/01
to
Michael ich danke dir ......... genau richtig......

"Michael Schwimmer" <schw...@t-online.de> schrieb im Newsbeitrag

news:957acn$gqo$04$1...@news.t-online.com...

0 new messages