VBA drag-and-drop-Datei Benutzer Formular aus, um den Dateinamen und den Pfad
Ich würde gerne einen neuen trick lernen, aber ich bin mir nicht 100% sicher, dass es möglich ist, in VBA, aber ich dachte, ich würde prüfen, mit den gurus hier.
Was ich tun möchte ist, meiden die gute alte getopenfilename oder browser-Fenster (es war wirklich schwer zu bekommen die Start-Verzeichnis setzen auf unser Netzwerk-Laufwerk) und ich würde gerne eine VBA-Benutzerformular, wo ein Benutzer können per drag & drop eine Datei vom desktop oder aus einem browser-Fenster auf das Formular und VBA-laden wird der Dateiname und Pfad. Nochmal, ich bin mir nicht sicher, ob das möglich ist, aber wenn es ist, oder wenn es jemand schon gemacht hat würde ich mich über Hinweise. Ich weiß, wie das einrichten einer user-form, aber ich habe keine echten code außerhalb des. Wenn ich etwas bieten kann, lass es mich wissen.
Vielen Dank für Ihre Zeit und überlegung!
- Eine Antwort gefunden und meine Frage selbst beantwortet Herr Downboats, wer Sie sind.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich herausgefunden, einen Weg, dies zu erreichen. Soweit ich sagen kann, es nur getan werden kann mithilfe eines treeview-Steuerelements. Sie müssen möglicherweise Rechtsklick auf die toolbox zu finden und fügen Sie es hinzu. Es wird dort unter "zusätzliche Steuerelemente" oder so ähnlich. Sie müssen zwei Dinge neben der Kontrolle.
In der
UserForm_Initialize
sub benötigen Sie die folgende Zeile von code zu ermöglichen, drag und drop:TreeView1.OLEDropMode = ccOLEDropManual
:Dann brauchen Sie die
Private Sub TreeView1_OLEDragDrop
Veranstaltung. Habe ich es unterlassen alle Parameter, um Platz zu sparen. Sie sollte einfach genug zu finden. In diesem sub deklarieren Sie einfach eine Zeichenfolge, vielleichtstrPath
oder so etwas, halten Sie den Dateinamen und Pfad, und legenstrPath = Data.Files(1)
- und das wird der Datei-name und Pfad einer Datei, die der Benutzer zieht, um das TreeView-Steuerelement. Dies setzt Voraus, dass der Benutzer nur zieht eine Datei auf einmal, aber soweit ich sagen kann, dies sollte etwas, das getan werden kann, ziehen Sie mehrere Dateien, wenn Sie Experimentieren.Edit: müssen Sie auch fügen Sie einen Verweis auf
Microsoft Windows Common Controls 6.0
Außerdem habe ich Beispiel-code.
Data.Files(1)
um den Namen der Datei. Ich habe noch nicht getestet, also kann ich noch nichts Versprechen, aber ich würde annehmen, dass Sie könnte eine Iteration über die Daten.Dateien(1-n) - array, um mehrere Datei-Pfade. Versuchen Sie so etwas wieFor intCounter = 1 to UBound(Data.Files)
wointCounter
ist eine ganze Zahl und abrufen alle Ihre Datei Pfade mitstrPath = Data.Files(intCOunter)
. Sollte funktionieren.For Each dataFile In Data.Files
Ich weiß, dies ist ein Alter thread. Zukünftigen Lesern, Wenn Sie nach ein paar Coole UI, könnt Ihr zur Kasse gehen mein Github für die Beispieldatenbank verwenden .NET-wrapper-dll. Die können Sie einfach eine Funktion aufzurufen und zu öffnen, filedialog mit Datei-drag-and-drop - Funktion. Ergebnis zurückgegeben wird, als ein JSONArray string.
code einfach
hier wie es aussieht;
Ich habe es zu arbeiten, indem Sie die Anwendung Ereignis WorkbookOpen. Wenn eine Datei bekommt, gezogen auf ein geöffnetes Excel-Sheet wird es versuchen, öffnen der Datei in Excel als separate Arbeitsmappe, die auslösen würde, die den oben genannten Ereignis. Es ist ein bisschen wie ein Schmerz, aber ich habe diesen link https://bettersolutions.com/vba/events/excel-application-level-events.htm als Referenz.
Einzige Problem ist, dass wenn die Datei nicht in eine Excel-Datei, dann wird es ein popup und Sie können nicht führen Sie eine VBScript-um es loswerden, da das Ereignis nicht ausgeführt, bis Sie die Adresse der popup. Ein Teil von meinem code unten:
Bearbeiten:
Vergessen, dass Sie brauchen, um die Anwendung zu initialisieren Veranstaltungen durch Buchung den folgenden code in einem beliebigen Modul
Und fügen Sie diesen code in DieseArbeitsmappe Workbook_Open()