Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Dateiname aus Zwischenablage

Begonnen von Johannes72, April 04, 2013, 17:16:48

⏪ vorheriges - nächstes ⏩

Johannes72

Hallo zusammen

Ich bin schon seit geraumer Zeit auf der Suche nach einer Lösung für mein Problem und möchte mich nun an euch wenden und um Hilfe ersuchen.

Wenn ich eine Datei (.slx, .msg, .doc....) mit Strg-C bzw. V in ein Verzeichnis kopiere möchte ich danach auf einen Button clicken und den Namen dieser Datei in ein Textfeld einfügen. Leider habe ich niergens eine passende Lösung dafür gefunden oder ich hab sie nicht erkannt, kann auch sein.

Hat da jemand eine Lösung für mich,

Stapi

Hallo Johannes72

Ich versuche es für mich nochmals zu Verstehen was dein Vorhaben ist, du kopierst eine Datei in ein Verzeichnis und nach dem das geschehen ist möchstest du den Namen der Datei per Button in ein Textfeld kopieren.

Schau mal in der VBA Hilfe (F1):  Objekt.GetFileName(Pfadspez)

Bei der Funktion muss aber der Pfad bekannt sein

Grüße aus dem schönen NRW
Stefan

daolix

Hallo

ich glaub dein Vorhaben ist nicht ganz ohne.

Wenn du CtrlC/CtrlV nur über den windowsexplorer machst dann könnte es ggf über das Clipboardformat "CF_HDROP" versuchen. Bei anderen Proggis ( z.b. Outlook ) werden andere Formate in die Zwischenablage geschubst. diese muss man dann aber auch kennen. daher wird ich dir raten dein vorhaben nochmals hinsichtlich der Arbeitsweise (erfassung der Daten) zu überdenken. 

Stapi

Hallo Johannes72

@daloix hat da schon Recht in der Aussage:
ZitatWenn du CtrlC/CtrlV nur über den windowsexplorer machst dann könnte es ggf über das Clipboardformat "CF_HDROP" versuchen. Bei anderen Proggis ( z.b. Outlook ) werden andere Formate in die Zwischenablage geschubst. diese muss man dann aber auch kennen. daher wird ich dir raten dein vorhaben nochmals hinsichtlich der Arbeitsweise (erfassung der Daten) zu überdenken. 

Habe mal ein wennig gesucht und das per API Aufruf gefunden:
Option Compare Database
Option Explicit

Private Declare Function OpenClipboard Lib "user32" _
  (ByVal hwnd As Long) As Long
Private Declare Function EmptyClipboard _
  Lib "user32" () As Long
Private Declare Function CloseClipboard _
  Lib "user32" () As Long

Sub ZwischenablageLeeren()
  If OpenClipboard(0&) <> 0 Then
    Call EmptyClipboard              << hier wird die Zwischenablage gelöscht
    Call CloseClipboard
  End If
End Sub


Hier wird die Zwischenablage gelöscht, mit der Funktion "GetClipboardData" kann man Daten aus der Zwischenablage zurück geben lassen
Grüße aus dem schönen NRW
Stefan

Johannes72

Hallo Leute

Die ganze Sache ich nicht ganz so einfach und sieht so aus.

Ich bekomme Aufträge z.B. per Mail, dann nehme ich dieses Mail und klicke auf kopieren. Dann gehe ich in meine Datenbank und dort habe ich ein Formular in dem unter anderem ein Webbrowser-Steuerelement sich befindet Dieses Steuerelement ist je nach Auftrag auf ein anderes Verzeichnis auf der HD eingerichtet. Dort klicke ich auf einen Button und mir wird diese Datei, eben eine msg oder auch eine xls, pdf..... in dieses Steuerelement eingefügt. So weit so gut und funktioniert auch einwandfrei. Nur für eine komplette Verknüfung fehlt mir noch der Dateiname inkl. Endung weil der Pfad ja ohnehin vorgegeben ist.

Daher die etwas ungewöhnliche Anforderung einen Dateinamen aus einer Datei in der Zwischenablage einzufügen.

@ Stapi:

ich bin zwar eine völlige Niete was programmieren angeht: aber dein Code löscht mir nur den Innhalt des Zwischenspeichers. Ich bin jetzt ein wenig  übervordert damit, weil ich nicht weiß wie mir das helfen soll???


Stapi

Hallo Johannes72

Du must schon auch was machen, ich schrieb dir:
ZitatHier wird die Zwischenablage gelöscht, mit der Funktion "GetClipboardData" kann man Daten aus der Zwischenablage zurück geben lassen

Es muss also die Funktion "GetClipboardData" in den von mir zur Verfügung gestellten Code eingefügt werden. Und das vor die zeile <<< Zwischenablage löschen. Da ich deine Funktion "Button" nicht kenne must du schon selbst ein wenig Hand anlegen.
Grüße aus dem schönen NRW
Stefan

daolix

Nun wenn der Path jetzt bekannt ist dann könntest du z.b. dieses Verzeichnis mittels des Formulartimers und der Funktion Dir versuchen zu überwachen. Aber evtl gibt ja auch das Webbrowser Dingens Events aus, die du ggf auswerten kannst. Alternativ, wenn du Outlook verwendest mußst dich halt mit den Clipboardformaten von Outlook auseinandersetzen und dich einlesen. Auch könntest du versuchen stattdessen Outlook fernzusteuern, damit umgehst du das Wirwardingens mit der Zwischenablage.

Johannes72

Guten Morgen

Das ich hier Code einfügen muss ist mir schon klar und ist gleichzeitig mein Problem. Ich hab bisher alles was ich brauchte irgendwie hin bekommen, Teilweise über umwege, wie die Sache mit den Dateien kopieren, teilweise habe ich mir Code irgendwo zusammengesucht und versucht ihn zu verwenden oder sonst irgendwie zu improvisieren. Aber hier stehe ich einfach an. Ich versuche schon seit Tagen dieses Problem zu lösen oder zu umgehen, schaffe es aber nicht. Die Funktion "GetClipboardData" war mir völlig unbekannt. Hab jetzt im www gesucht und einiges darüber gelesen. Aber ich hab nur, so hab ich das verstaden, Funktionen gefunden in denen ich div. Datein aus dem Clipboard einfügen kann und nichts über die Dateinamen.


bahasu

Hi Johannes,

um die Pfad + Dateinamen aus dem Zwischenspeicher im Listenfeld des Formulars (siehe Anhang) anzuzeigen, sind die folgenden Schritte notwendig:
1. Im Explorer eine oder mehrere Dateien markieren
2. mit strg-C in den Zwischenspeicher bringen
3. zur access-Anwendung wechseln
4. Button anklicken

Entspricht das Deinen Vorstellungen?

Harald

PS
Im VBA-Teil des Formulars habe ich Links aufgeführt, die mir geholfen hatten, den Zwischenspeicher auszuwerten.
Ich hatte ein Listenfeld und kein Textfeld gewählt, um auch mehr als eine markierte Datei aunzuzeigen. Bitte ggf. anpassen



[Anhang gelöscht durch Administrator]
Servus

Johannes72

Hallo

Ja, genau so hätte ich mir das vorgestellt.

Aber Anhang sehe ich keinen.......

Johannes72

Ups, sorry, wer lesen kann ist im Vorteil.

Stapi

Hallo Johannes

Wenn es das ist so wie du es gewünscht hast dann bitte im ersten Beitrag auf "gelöst" setzen.
Grüße aus dem schönen NRW
Stefan

Johannes72

He, super

Funktioniert auf anhieb, genau das was ich gesucht habe, jetzt brauch ich nur noch dran zu drehen daß er mir nur eine Datei einfügt.

Super

Vielen vielen Dank

Johannes72

Hallo noch einmal

Ich habe nun fast den gesamten Nachmittach damit verbracht diese Funktion einzubauen und habe es nicht geschaft. Leider habe ich da "2 Haare in der Suppe" gefuden die ich nicht raus bringe. Leider, da hab ich mich zu früh gefreut heute Morgen.

Das erste Haar: der Pfad den er mir in das Listenfeld einfügt ist der ursprüngliche Pfad = Quellpfad und nicht der Pad wo die Datei hinkopiert wurde. Würde sich wohl am leichtesten beheben lassen wenn nicht der gesamte Pfad in das Listenfeld geschriebe wird sondern nur der Filename. Ich bin aber nicht drauf gekommen was ich da ändern muss.

Das zweite Haar werde ich wohl noch hin bekommen, da geht es darum das der Pfad nicht in meiner Tabelle gespeichert wird, warum weiss ich noch nicht muss ich mir erst genauer anschauen, könnte aber mit dem Listenfeld zusammenhängen, kann das sein???

daolix

#14
Zitatder Pfad den er mir in das Listenfeld einfügt ist der ursprüngliche Pfad = Quellpfad und nicht der Pad wo die Datei hinkopiert wurde.
Warum sollte es auch so sein? Zum Zeitpunkt des Drückens von ctrl/c eird die zwischenablage befüllt, der Zielpath ist hier ja dann noch nicht bekannt. auch wird mit dem drücken von ctrl/v die zwischenablage nicht geändert. Aber du hattes ja geschrieben das das webformular den path kennt, du brauchst nur den dateinamen in der funktion abschneiden und mit dem zielpath verknüpfen.
hier mal eine Möglichkeit wie du den Dateinamen aus einem Filepathstring extrahierst
Function FileFromFilePath(ByVal sfilepath As String) As String
   Dim v As Variant
   If Len(sfilepath) > 0 Then
       v = Split(sfilepath, "\")
       FileFromFilePath = v(UBound(v))
   End If
End Function


Da du jetzt ja weist wie das Clipboard ausgelesen wird, kannst du ja mittels VBA (dragnDrop oder Buttonlösung) Access das Kopieren der Dateien überlassen da der Zielpath wie du schon erwähntest bekannt ist.

ZitatDas zweite Haar werde ich wohl noch hin bekommen, da geht es darum das der Pfad nicht in meiner Tabelle gespeichert wird, warum weiss ich noch nicht muss ich mir erst genauer anschauen, könnte aber mit dem Listenfeld zusammenhängen, kann das sein???
Da wir deinen Code nicht kenne kann dazu jetzt auch nix gesagt werden,  das schlichte befüllen eines Listenfeldes befüllt noch lange nicht deine Tabellen.