Discussion:
[VBA] Datei in Zwischenablage -> wie speichern
(zu alt für eine Antwort)
Michael Mueller
2008-06-27 09:03:51 UTC
Permalink
Hi.

Habe eine Datei als Objekt in Excel eingebunden.
Mit Tabelle.Shapes("Datei").Copy kann ich sie in die Zwischenablage bringen,
und dann im Explorer mit Einfügen als Datei auf c:\ ablegen.

Wie aber kann ich dieses Einfügen in VBA machen lassen, also Benutzer
unabhängig?

Danke
Michi
Stefan Anderl
2008-06-27 11:03:00 UTC
Permalink
Post by Michael Mueller
Hi.
Habe eine Datei als Objekt in Excel eingebunden.
Mit Tabelle.Shapes("Datei").Copy kann ich sie in die Zwischenablage bringen,
und dann im Explorer mit Einfügen als Datei auf c:\ ablegen.
Hallo, ich würde es etwa so versuchen:

activeworkbook.Sheets("...").Shapes("Object ...").Select
Selection.Verb Verb:=xlPrimary

und dann mit einem Befehl des Host-Programms (das das geöffnete Objekt
handelt) speichern.

Stefan Anderl
stefan onken
2008-06-27 14:43:46 UTC
Permalink
Post by Michael Mueller
Hi.
Habe eine Datei als Objekt in Excel eingebunden.
Mit Tabelle.Shapes("Datei").Copy kann ich sie in die Zwischenablage bringen,
und dann im Explorer mit Einfügen als Datei auf c:\ ablegen.
Wie aber kann ich dieses Einfügen in VBA machen lassen, also Benutzer
unabhängig?
Danke
Michi
hallo Michi,
habe nicht probiert, ob es unter diesen Bedingungen funktioniert, aber
hier ist ein Codebsp, um ein Bild aus der Zwischenablage als Datei zu
speichern: http://michael-schwimmer.de/vba074.htm

Gruß
stefan
Michael Mueller
2008-06-30 07:32:32 UTC
Permalink
Hi Stefan.
Post by Michael Mueller
Mit Tabelle.Shapes("Datei").Copy kann ich sie in die Zwischenablage
bringen, und dann im Explorer mit Einfügen als Datei auf c:\ ablegen.
Wie aber kann ich dieses Einfügen in VBA machen lassen, also Benutzer
unabhängig?
habe nicht probiert, ob es unter diesen Bedingungen funktioniert ...
Leider nicht :-/

Sonst jemand 'nen Tipp?

Michi
stefan onken
2008-06-30 11:42:19 UTC
Permalink
Post by Michael Mueller
Hi Stefan.
Post by Michael Mueller
Mit Tabelle.Shapes("Datei").Copy kann ich sie in die Zwischenablage
bringen, und dann im Explorer mit Einfügen als Datei auf c:\ ablegen.
Wie aber kann ich dieses Einfügen in VBA machen lassen, also Benutzer
unabhängig?
habe nicht probiert, ob es unter diesen Bedingungen funktioniert ...
Leider nicht :-/
Sonst jemand 'nen Tipp?
Michi
hallo Michi,
schade, ich habe auch ein wenig damit gespielt, aber keine Lösung
gefunden. In der VB-NG hast du ja auch schon angefragt, das hätte ich
dann auch geraten.
Bleibt noch SendKeys, so in der Art:

ActiveSheet.Shapes("Object 1").Copy
Shell("explorer.exe d:\test\test", 1)
Application.Wait (Now + TimeValue("0:00:01"))
SendKeys "^v"
SendKeys "%{F4}"

natürlich blitzt der Explorer dann kurz auf, aber so bist du
unabhängig von einer Bildbearbeitungssoftware. Bei mir war eine kurze
Wartezeit (Application.Wait) nötig, damit sich das Explorer-Fenster
aufbaut, weil SendKeys sonst auf Excel selbst angewendet wird.

Gruß
stefan
Michael Mueller
2008-06-30 13:02:14 UTC
Permalink
Schlecht, da der Explorer nicht immer nach einer Sekunde tut :-/
Hab mir jetzt mal was anderes gebastelt:

Sub Test()
Dim Filenr As Integer
Dim ByteArray() As Byte

Filename = "C:\Michi.ocx"
Filenr = FreeFile
Open Filename For Binary As #Filenr
ReDim ByteArray(0 To LOF(Filenr) - 1)
Get #Filenr, , ByteArray()
Close #Filenr
cells(1,1) = Lbound(ByteArray)
cells(1,2) = Ubound(ByteArray)
x = 2
y = 1
For a = LBound(ByteArray) To UBound(ByteArray)
Cells(x, y) = ByteArray(a)
y = y + 1
If y = 256 Then
y = 1
x = x + 1
End If
Next a

DoEvents

ReDim ByteArray(Cells(1, 1) to Cells(1, 2))
x = 2
y = 1
For a = LBound(ByteArray) To UBound(ByteArray)
If Cells(x, y) = "" Then Exit For
ByteArray(a) = Cells(x, y)
y = y + 1
If y = 256 Then
y = 1
x = x + 1
End If
Next a

Filename = "C:\Michi2.ocx"
Filenr = FreeFile
Open Filename For Binary As #Filenr
Put #Filenr, , ByteArray()
Close #Filenr

End Sub

Das Schreiben in Excel dauert halt recht lange, das Speichern zurück als
Datei dann aber "nur" noch 7 Sekunden für knapp 300kB.

Schade das es unter Excel2k3-VBA kein Resourcen-Objekt gibt, wie es z.B. In
VB der Fall ist.

Falls jemand noch eine andere Möglichkeit kennt Dateien in Excel zu
speichern, nur her damit ;-)

Ziel soll sein eine Datei von 1,2MB Größe direkt in Excel unterzubringen und
diese dann so schnell wie nur möglich auch wieder als Datei speichern zu
können.

Michi
Michael Mueller
2008-06-30 13:12:25 UTC
Permalink
Post by Michael Mueller
Ziel soll sein eine Datei von 1,2MB Größe direkt in Excel unterzubringen
und diese dann so schnell wie nur möglich auch wieder als Datei speichern
zu können.
Momentan schaffe ich das in 25 Sekunden mit dem vom mir beposteten Code.

mfg
Michi

Loading...