Hallo, ich hab mal eine Frage, gibt es eine Möglichkeit mit access 2007 eine Worddatei zu suchen. Die Worddatei hat als Namen (ID,Nachname,Vorname). Ich möchte gern aus einem Formular herraus in dem ein Name,Vorname und die ID steht, diese dazugehörige Worddatei die in einem bestimmten Laufwerk mit einem Hauptordner\und mehreren Unterordner steht suchen und zum bearbeiten öffnen. Das Laufwerk ist nicht größer als ca. 5-600 Mb groß.
Hallo,
es ist möglich mit Hilfe von VBA eine bestimmte Datei in einer Verzeichnisstruktur oder einem Laufwerk zu suchen.
Siehe dazu bitte mal hier nach ... http://www.kulpa-online.com/tutorial-vba-2-104.html (http://www.kulpa-online.com/tutorial-vba-2-104.html)
Weitere Möglichkeiten der Dateisuche findest du z.B hier ...http://www.vb-fun.de/cgi-bin/loadframe.pl?ID=vb/tipps/tip0328.shtml (http://www.vb-fun.de/cgi-bin/loadframe.pl?ID=vb/tipps/tip0328.shtml)
oder auch hier http://www.activevb.de/tipps/vb6tipps/tipp0128.html (http://www.activevb.de/tipps/vb6tipps/tipp0128.html)
Die beiden letztgenannten Beispiele beziehen sich allerdings auf VB6 und könnten u.U. erst nach Anpassung funktionsfähig sein :-\
Grüße
Peter
Danke für die schnelle Antwort, VBA ist nicht so mein steckenpferd kann mir zwar einiges zusammenreimen, aber ich glaub nicht das ich das hinbekomme. Trotzdem danke
Mal für den Anfang:
Option Compare Database
Private Declare Function SearchTreeForFile _
Lib "imagehlp" (ByVal RootPath As String, _
ByVal InputPathName As String, _
ByVal OutputPathBuffer As String) As Long
Private Sub SuchButton_Click()
Dim str As String
Dim lng As Long
str = String(Verzeichnisse, 0)
lng = SearchTreeForFile("C:\", "eula.1028.txt", str)
If lng <> 0 Then
MsgBox "Datei wurde gefunden: " & vbLf & _
str, vbInformation
Else
MsgBox "Datei konnte nicht gefunden werden!", vbCritical
End If
End Sub
Du kannst natürlich an den für Dich wichtigen Stellen mit Variablen arbeiten. Beispielsweise für den zu suchenden Filename oder das Verzeichnis.
Viele Grüße
Andi
Danke Andy , lauft aber irgendwie nicht wirklich.Kann man hier womöglich eim RekursiveDateisuche Anwenden??
Hab echt keinen Plan an der Stelle.
Hi,
probiere es mal mit dem FileDialog-Object und schau Dir mal weitere Beispiele an:
Private Sub btnDateiSuche_Click()
Dim fd As FileDialog
Dim auswahl As Variant
Set fd = _
Application.FileDialog(msoFileDialogFilePicker) 'Ab hier weiß Access, dass Durchsuchen angezeigt werden soll
With fd
.Filters.Clear
.Filters.Add "*Dateiname*", "*.accdb; .weitereEndungen,", 1
If .Show = -1 Then
For Each auswahl In .SelectedItems
MsgBox "Pfadname: & auswahl"
Next auswahl
End If
End With
Set fd = Nothing
End Sub
Im Dropdown-Listenfeld findest Du dann die gesuchten Dateien.
Bis denne
Andi
Hallo,
versuche vielleicht folgendes:
in einem Formular einen Button einbauen und folgenden Code hinterlegen
Private Sub SuchButton_Click()
Dim datei As String
'Dateinamen abfragen
datei = InputBox("Dateinamen eingeben")
'Suche aufrufen
Call FileFind(datei, "E:\") 'Den Laufwerksbuchstaben ggf. ändern!
End Sub
und folgendes in ein Standardmodul verpacken:
Option Compare Database
Option Explicit
Private Declare Function SearchTreeForFile Lib "imagehlp.dll" ( _
ByVal RootPath As String, ByVal InputPathName As String, _
ByVal OutputPathBuffer As String) As Long
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" ( _
ByVal hWnd As Long, ByVal lpOperation As String, ByVal lpFile As String, _
ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Private Declare Function GetDesktopWindow Lib "user32" () As Long
Const MAX_PATH = 160
Public Sub FileFind(ByRef hFileName As String, _
Optional ByVal hPart As String = "E:\") 'hier ggf. den Laufwerksbuchstaben ändern!
Dim rApi As Long
Dim hPfad As String
Dim suchDatei As String
On Error GoTo Fehler
Err.Clear
' wenn kein dateiname übergeben wird
If Len(Trim$(hFileName)) = 0 Then Err.Raise 75
' ZielPfad vorbereiten
hPfad = String(MAX_PATH, 0)
'Suche durchführen
rApi = SearchTreeForFile(hPart, hFileName, hPfad)
' wurde die Datei entdeckt?
If rApi = 0 Then Err.Raise 76
' Rückgabewert ist der Pfad zur Datei + Dateiname
suchDatei = Left(hPfad, InStr(hPfad, Chr(0)) - 1)
Call ShellExecute(GetDesktopWindow(), "Open", suchDatei, vbNullString, vbNullString, 1)
Exit Sub
Fehler:
If Err.Number = 76 Then
MsgBox "Datei nicht gefunden"
ElseIf Err.Number = 75 Then
MsgBox "Es wurde kein Dateiname übergeben!"
End If
Err.Clear
End Sub
Im Button-Code sowie im Modul-Code musst du deine Laufwerksbuchstaben anpassen!
HTH
Peter
p.s. ACHTUNG das Programm friert scheinbar ein, wenn die Suche länger dauert, ist aber nicht besorgniserregend :), da es im Erfolgsfall sofort wider 'zu leben ' beginnt ;D.
Hallo Peter, die Suche scheint recht schnell zu gehen, bringt aber immer im Ergibniss Datei nicht gefunden, obwohl sie vorhanden ist, hab den Laufwerksbuchstaben geändert.
Thomas
Hallo, guten Morgen,
...kann ich so nicht ganz nachvollziehen, bei mir gibts keine Probleme mit der Suche ... und auch nicht mit dem Finden ;D
Habe jetzt zur Vorsicht nochmal getestet, auch mit veränderten Laufwerken - no Problem ::)
Hast du die Laufwerksbuchstaben an beiden Stellen geändert? An beiden Stellen idente Angaben, keine Unterverzeichnisse und wenn an beiden Stellen!
Angabe des Dateinamens OHNE Pfadangaben - auch auf Leerzeichen vor und nach dem Dateinamen achten, die werden nicht abgefangen.
Wenn auf dem angegebenen Laufwerk irgendwo eine Datei mit dem Namen aus der Inputbox existiert, dann wird sie auch verlässlich gefunden - und geöffnet
Grüße
Peter
Hallo und guten morgen Peter,
am Morgen ist die Welt wieder i.o, funktioniert natürlich perfekt, hab nicht den richtigen Pfad angegeben, also wie gesagt 99% aller Fehler passieren eben vor der Tastatur, danke schön für deine hilfe.
Soweit ist es nun schon das was ich brauche, kann man nun anstatt der InputBox einfach sagen ID,Nachname,Vorname aus dem Formular gleich als ständigen Eingabebefehl hinzuschreiben. Also im Endefeckt so dass 1. Ich wähle im Formular den Namen des Patienten, 2. Patient wird Angezeigt mit ID,Nachname,Vorname, 3. nun soll über ein Buton mit der Sucheigenschaft für das Worddokument das Worddokument gesucht werden (d.h. es muss die Endung .doc noch angehangen werden),4 Jetzt kann das worddokument bearbeitet werden und nach schließen und speichern ist man wieder in der access Datenbank.
Mfg Thomas
Hallo,
nun, wenn der komplette Pfad/Dateiname des Word-Doks aus den akt. angezeigten Daten zusammengesetzt werden kann, dann kann Word einfach über Followhyperlink (oder besser noch mit der ShellExecute-Funktion, die allerdings etwas komplizierter ist) mit dem entspr. Word-Dok geööfnet werden:
Sub btnDokOeffnen_Click()
Dim PfadDateiName as String
PfadDateiName = "C:\Hauptordner\Unterordner\" & Me!ID & Me!Nachname & Me!Vorname & ".doc"
Followhyperlink PfadDateiName
End Sub
Am Besten sorgst Du anfänglich dafür, dass bei der Erfassung der Daten auch der PfadDateiname (mit den vorgeschlagenen DateiDialogen) in ein Tabellenfeld abgelegt wird. Dann erübrigt sich das dauernde Zusammensetzen des Dateinamens:
Sub btnDokOeffnen_Click()
If not isnull (Me!PfadDateiName) then Followhyperlink Me!PfadDateiName
End Sub
Hallo,
freut mich, dass es nun funktioniert!
Die Inputbox war sicher nicht als 'Endlösung' gedacht sondern sie sollte beispielhaft für die Übergabe des Dateinamens dienen :)
@DF6GL
Zitat
besser noch mit der ShellExecute-Funktion
... ist in meinem Beispiel integriert.
Natürlich führen viele Wege nach Rom oder besser zum Erfolg, immer wieder aber auch abhängig vom Fundament.
Wenn nun - was ich annehme bereits viele Dateien abgespeichert wurden und im schlimmsten Fall in Unterverzeichnissen, die über die erfassten Patientendaten nicht ermittelt wrden können, dann bleibt nur noch die Suchfunktion übrig.
Allerdings wäre da dann schon überlegenswert ob man nicht besser wie Franz angedeutet hat, dafür sorgt, dass die Dateien einfacher gefunden werden können, indem z.B. in einem Tabellenfeld die Speicherorte mit aufgenommen werden - in irgend einer Form
Wenn du bei meiner Variante bleiben möchtest kannst du die Inputbox ersetzen in dem du im Code hinter dem Button ....
die Zeile:
datei = InputBox("Dateinamen eingeben")
durch
datei = Me!ID & Me!Nachname & Me!Vorname & ".doc"
ersetzt.
Sehr hilfreich ist es natürlich entsprechende Sicherungen einzubauen um keine Fehler zu produzieren, wenn auf den Button geklickt wird ohne dass ein Patient ausgewählt wurde etc. bzw. solche Fehler durch eine geeignete Fehlerverarbeitung abzufangen.
Einen professionellen Touch erhältst du dann noch, wenn im Falle des Nichtvorhandenseins einer Datei ev. eine Vorlage zum Anlegen einer neuen Datei per MsgBox angeboten wird.
LG
Peter
Hallo Peter,
hab in der Zwischenzeit deine variante zum Ende gebracht und für hervorragend betrachtet, danke dafür funktioniert einfach perfekt und völlig ausreichend. Das ganze soll nur eine Erleichterung für den User werden, ich denke bei uns werden 60% der Mitarbeiter dies gar nicht nutzen. Der rest wird davon hellauf begeistert sein. Da wir demnächst noch zwei Exel Programme durch eine neuprogramierung in access ersetzten wird die Wordsache aber noch mal Interesanter.
MfG Thomas
Hallo,
Na dann, ... ::) ::) ::)
Setze bitte noch den Thread in DEINEM ersten Beitrag auf 'gelöst' - DANKE
Weiter viel Erfolg!
Peter