Access-o-Mania

Access-Forum (Deutsch/German) => Access-Hilfe => Thema gestartet von: thomut am Juni 18, 2010, 20:27:55

Titel: Suche worddokument mit access
Beitrag von: thomut am Juni 18, 2010, 20:27:55
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ß.
Titel: Re: Suche worddokument mit access
Beitrag von: database am Juni 18, 2010, 20:37:52
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
Titel: Re: Suche worddokument mit access
Beitrag von: thomut am Juni 18, 2010, 20:49:39
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
Titel: Re: Suche worddokument mit access
Beitrag von: accessundich am Juni 18, 2010, 21:10:35
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
Titel: Re: Suche worddokument mit access
Beitrag von: thomut am Juni 18, 2010, 21:41:54
Danke Andy , lauft aber irgendwie nicht wirklich.Kann man hier womöglich eim RekursiveDateisuche Anwenden??
Hab echt keinen Plan an der Stelle.
Titel: Re: Suche worddokument mit access
Beitrag von: accessundich am Juni 18, 2010, 22:07:38
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
Titel: Re: Suche worddokument mit access
Beitrag von: database am Juni 18, 2010, 22:12:35
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.
Titel: Re: Suche worddokument mit access
Beitrag von: thomut am Juni 18, 2010, 23:12:59
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
Titel: Re: Suche worddokument mit access
Beitrag von: database am Juni 19, 2010, 09:00:51
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
Titel: Re: Suche worddokument mit access
Beitrag von: thomut am Juni 19, 2010, 10:21:10
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
Titel: Re: Suche worddokument mit access
Beitrag von: DF6GL am Juni 19, 2010, 11:14:01
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
Titel: Re: Suche worddokument mit access
Beitrag von: database am Juni 19, 2010, 14:09:25
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
Titel: Re: Suche worddokument mit access
Beitrag von: thomut am Juni 19, 2010, 15:17:18
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
Titel: Re: Suche worddokument mit access
Beitrag von: database am Juni 19, 2010, 15:45:52
Hallo,

Na dann, ...   ::) ::) ::)

Setze bitte noch den Thread in DEINEM ersten Beitrag auf 'gelöst' - DANKE

Weiter viel Erfolg!

Peter