Hallo zusammen,
ich habe etwas gefunden , was ich gerne nach machen wollte
https://www.youtube.com/watch?v=AeKGiwcctGQ (https://www.youtube.com/watch?v=AeKGiwcctGQ)
Bei Marcotools , genauer gesagt beim Ausdruck = DB_Pfad() ,kommt die Funktion(DB_Pfad()) nicht zur Auswahl. Habe Access 2010 sowie 2013 auf dem Rechner , aber erscheinen tut es nicht. Mein Elemet & Ausdruck würden so aussehen.
Element=[imgBild].[Bild]
Ausdruck= DB_Pfad() & "Bilder\" & [ID_Bauteil] & ".jpg"
Wie würde der Code den aussehen in VBA ? Die ganzen Bilder würde ich immer mit der jeweiligen Bauteil_ID abspeichern und in den Ordner-> Bilder ablegen.
Private Sub Form_Current()
End Sub
Hallo,
soweit ich mich erinnere, habe ich den passenden Code (KEIN Makro!) schon in der Beispiel-DB eingebaut...
Nicht so ganz , was ich gesucht habe.
Aber kannst du mir sagen , wieso die Funktion nicht zur Auswahl steht ?
DB_Pfad() ?!
Hallo,
vermutlich ist das eine user definierte Public-Funktion, die den aktuellen DB-Pfad zurück liefert. Die muss von Hand in einem Standard-Modul erzeugt werden:
Public Function DB_Pfad() As String
DB_Pfad= Currentproject.Path & "\"
End Function
Private Sub Form_Current()
Me!imgBild.Picture = CurrentProject.Path & "\Bilder\" & [ID_Bauteil] & ".jpg"
End Sub
So klappt es schonmal :) Aber bekomme noch eine Fehlermeldung, wenn für das endsprechende Bauteil, Kein Bild vorhanden ist.
Hallo,
Du musst halt vorher mit z. B. Dir() prüfen, ob das Bild existiert:
Private Sub Form_Current()
Dim FName as String
FName=CurrentProject.Path & "\Bilder\" &[color=red] Me![[/color]ID_Bauteil] & ".jpg"
If Dir(FName) "" Then
Me!imgBild.Visible ="" 'manchmal auch : Me!imgBild.Visible ="(keines)"
Me!imgBild.Visible =false
Else
Me!imgBild.Visible =true
Me!imgBild.Picture = FName
End If
End Sub
Private Sub Form_Current()
Dim FName as String
FName=CurrentProject.Path & "\Bilder\" & Me![ID_Bauteil] & ".jpg"
If Dir(FName) [color=red]=[/color] "" Then
Me!imgBild.Visible = CurrentProject.Path & "\Bilder\"leer.jpg"
Me!imgBild.Visible =false
Else
Me!imgBild.Visible =true
Me!imgBild.Picture = FName
End If
End Sub
Glaube du hast oben das = vergessen . Ich farge nur nach, ob es so richtig ist. Kann ich das auch somachen , wenn kein Bild im Ordner enthalten ist, das er dafür ein festgelegtes Bild verwendet ? Hoffe der Pfad ist dann so richtig.
Hallo,
so sollte es richtig sein:
Me!imgBild.Picture = CurrentProject.Path & "\Bilder\leer.jpg"
Erstmal danke DF6GL & MaggieMay, das ihr um diese Uhrzeit mir noch hilft. Aufjedenfall bekomme ich keine Fehlermeldung mehr.
Aber ein neues Problem ist erschienen, wenn ich ein Bauteil aussuche , was kein Bild im Ordner hat. Dann erscheind nicht das Bild leer.jpg. Es liegt aber im Ordner drinnen.
Die Größe des Rechtecks , müsste egal sein oder ?
Private Sub Form_Current()
Dim FName As String
FName = CurrentProject.Path & "\Bilder\" & Me![ID_Bauteil] & ".jpg"
If Dir(FName) = "" Then
Me!imgBild.Visible = False
Me!imgBild.Picture = CurrentProject.Path & "\Bilder\leer.jpg"
Else
Me!imgBild.Visible = True
Me!imgBild.Picture = FName
End If
End Sub
Me!imgBild.Visible = False
Naja, wenn du das Bild nicht anzeigst, kannst du es auch nicht sehen...
;-)
jo , habs gemerkt. :P Vorlauter freunde , vergessen den Post anzupassen ::) Du warst schneller.
Jetzt aber das letzte was mich bei diesem Thema Interessiert. Das entsprechende Bild wird angezeigt, wenn ich jetzt auf das Bild klicke , soll es sich öffnen im Orginal zustand bzw. So als ob man ein Bild auf dem Deskopt öffnet / Explorer ect.
Habe da was gefunden mit
Private Sub imgBild_Click()
On Error GoTo Fehler
If Not Nz(Me!imgBild, "") = "" Then
Application.FollowHyperlink "\Bilder\" & Me![ID_Bauteil] & ".jpg"
Else
MsgBox "kein Bildpfad vorhanden"
End If
Exit Sub
exit_Fehler:
Exit Sub
Fehler:
MsgBox "Fehler...Das Bild ist nicht auffindbar. Haben Sie es umbenannt oder verschoben?."
Resume exit_Fehler
End Sub
Der springt jedesmal zum Fehler. Egal ob ich den Link komplett ausschreibe oder ihn so lasse.
Application.FollowHyperlink "C:\Users\Patrick\Desktop\Lager\arbeit\Bilder\" & Me![ID_Bauteil] & ".jpg"
Hallo,
sorry für das vergessene "=", das eigentlich ein "<>" gewesen ist.
Zitat
"Bilder" & Me![ID_Bauteil] & ".jpg"
ist ja auch kein gültiger Pfad...
Die File-Extension muss zunächst in Windows registriert und mit einem Anzeige/Bearbeitungsprogramm verknüpft sein.
Sodann sollte das Protokoll explizit erwähnt werden:
Application.FollowHyperlink "File://" & "C:\Users\Patrick\Desktop\Lager\arbeit\Bilder\" & Me![ID_Bauteil] & ".jpg"
Application.FollowHyperlink "File://" & CurrentProject.Path & "\Bilder\" & Me![ID_Bauteil] & ".jpg"
Besser wäre vielleicht die Verwendung von Shellexecute:
http://www.dbwiki.net/wiki/VBA_Tipp:_Anwendung_mit_ShellExecute_starten
ok , dann werde ich mir das mal genauer an schauen, das Shellexecute.
Habe ebenfalls diese Seite gefunden http://www.office-loesung.de/ftopic35417_0_0_asc.php (http://www.office-loesung.de/ftopic35417_0_0_asc.php)
Extra Modul erstellt mit dem Namen: mdlShellExecute
Option Compare Database
Option Explicit
Public 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
Public hWnd As Long
Public Const SW_HIDE = 0 ' Versteckt öffnen
Public Const SW_MAXIMIZE = 3 ' Maximiert öffnen
Public Const SW_MINIMIZE = 6 ' Minimiert öffnen
Public Const SW_NORMAL = 1
Public Const SW_RESTORE = 9
Public Const SW_SHOWMAXIMIZED = 3
Public Const SW_SHOWMINIMIZED = 2
Public Const SW_SHOWMINNOACTIVE = 7
Public Const SW_SHOWNOACTIVATE = 4
Public Function DateiOeffnen(Aktion As String, Pfad As String, _
Ansicht As Long) As Boolean
Call ShellExecute(hWnd, Aktion, Pfad, "", "", Ansicht)
End Function
Und das Bild so verbunden.
Private Sub imgBild_Click()
Dim Pfad As String
Pfad = "Bilder\" & Me![ID_Bauteil] & ".jpg" '< XXX = Endung mdb, jpg, doc usw.
DateiOeffnen "open", Pfad, SW_MAXIMIZE
End Sub
Wenn ich auf das Bild klicke, öffnet sich das entsprechende Bild nicht. Der Pfad müsste doch ok sein . Ich sehe zumindest nicht, was ich jetzt falsch gemacht haben sollte.
Hallo,
ZitatDer Pfad müsste doch ok sein
das glaube ich nicht, versuche es besser mal mit dem vollständigen Zugriffspfad, so wie du es in Antwort #4 geschrieben hattest.
PERFEKT DANKE !!! :-*
;D
Bin gerade auf der Arbeit und wollte den Pfad anpassen. Der zeitige Code.
Private Sub Form_Current()
Dim BName As String
BName = CurrentProject.Path & "W:\bao\fn2\fn2-pub\Instandhaltung\Instandhaltung Schicht a,b,c\Materiallisten_Übungsraum\Lager\Bilder\" & Me![ID_Bauteil] & ".jpg"
If Dir(BName) = "" Then
Me!imgBild.Visible = True
Me!imgBild.Picture = CurrentProject.Path & "W:\bao\fn2\fn2-pub\Instandhaltung\Instandhaltung Schicht a,b,c\Materiallisten_Übungsraum\Lager\Bilder\leer.gif"
Else
Me!imgBild.Visible = True
Me!imgBild.Picture = BName
End If
End Sub
Bild öffnen
Private Sub imgBild_Click()
Dim Pfad As String
'Einfach den Pfad ändern und das war's....
Pfad = CurrentProject.Path & "W:\bao\fn2\fn2-pub\Instandhaltung\Instandhaltung Schicht a,b,c\Materiallisten_Übungsraum\Lager\Bilder\" & [ID_Bauteil] & ".jpg" '< XXX = Endung mdb, jpg, doc usw.
DateiOeffnen "open", Pfad, SW_MAXIMIZE
End Sub
Der Zeigt mir in VBA an , das die Variable BName den Wert "C:\Users\PPUETZ1\DesktopW:\bao\fn2\fn2-pub\Instandhaltung\Instandhaltung Schicht a,b,c\Materiallisten_Übungsraum\Lager\Bilder\XXX.jpg"
Meine Bearbeitungsdatei(Lager.accdb) liegt auf dem Desktop und meine Backend auf dem Netzlaufwerk (W:\bao\fn2\fn2-pub\Instandhaltung\Instandhaltung Schicht a,b,c\Materiallisten_Übungsraum\Lager)
Ich muss auch sagen , das das Laufwerk W, ein Netzwerk Festplatte ist. proj(\\ner9010301) (W:)
Muss man jetzt das Laufwerk und den Pfad explizip vordefinieren, wenn man auf die Bilder zugreifen möchte die auf einem anderen Laufwerk befinden? Bei mir wäre das der Fall Laufwerk: W zB. mit
ChDrive
ChDir
oder alles in UNC-Pfade auslesen lassen ? Könnt ihr mir dabei helfen.
Netzwerk Festplatte ist. proj(\\ner9010301) (W:)
Option Compare Database
Private Declare Function WNetGetConnection Lib "mpr.dll" _
Alias "WNetGetConnectionA" (ByVal lpszLocalName As String, _
ByVal lpszRemoteName As String, _
cbRemoteName As Long) As Long
Public Function GetUNCPath(ByVal sLocalPath As String) As String
'// -----------------------------------------------------------------
'// Methode: | Konvertiert einen Pfad in UNC-Pfad (\\SERVER\...)
'// -----------------------------------------------------------------
'// Parameter: | sLocalPath = gültiger, lokaler Pfad (X:\..)
'// -----------------------------------------------------------------
'// Rückgabe: | bei Erfolg = UNC-Pfad
'// | bei Fehler = sLocalPath
'// -----------------------------------------------------------------
Const NO_ERROR As Long = 0
Dim sUNCPath As String
Dim sResult As String
Dim sDrive As String
GetUNCPath = sLocalPath
If VBA.Mid$(sLocalPath, 2, 1) <> ":" Then Exit Function
'// Die API-Funktion benötigt nur das Laufwerk!
sDrive = VBA.Left$(sLocalPath, 2)
sUNCPath = VBA.String(260, 0)
If WNetGetConnection(sDrive, sUNCPath, VBA.Len(sUNCPath)) = NO_ERROR Then
sResult = VBA.Left$(sUNCPath, VBA.InStr(sUNCPath, vbNullChar) - 1)
If VBA.Len(sResult) > 0 Then
GetUNCPath = sResult & VBA.Mid$(sLocalPath, 3)
End If
End If
End Function
Hallo,
die ganzen Verbiegungen sind überflüssig....
Das Laden des Bildes erfordert den vollständigen PfadDateiNamen der Bilddatei.
Me!imgBild.Picture = "kompletter Pfad-Datei-Name"
Insofern solltest Du bestimmen/herausfinden, wie das akt. Laufwerk, der akt. PFADname und die Bilddatei einschließlich Extension heißt.
Currentproject.Path liefert den akt. Pfad, aus dem die DB (das FE) gestartet wurde und ist in dem Fall, dass die Bilddateien nicht unterhalb des FE-Verzeichnisses (Desktop) liegen, nicht zu gebrauchen.
Dieses:
CurrentProject.Path & "W:baofn2fn2-pubInstandhaltungInstandhaltung Schicht a,b,cMateriallisten_ÜbungsraumLagerBilderleer.gif"
ist an sich unsinnig.
Dieses:
CurrentProject.Path & "W:\bao\fn2\fn2-pub\Instandhaltung\Instandhaltung Schicht a,b,c\Materiallisten_Übungsraum\Lager\Bilder\leer.gif"
zeigt zumindest die Verzeichnisstruktur und den Bilddatei-Namen. Das vorangestellte Currentproject.Path ist falsch.
Genau so, wie die reinen Bilddateinamen in einer Tabellenspalte hinterlegt sind, kann für den Fall des unterschiedlichen Einsatzortes der DB der entspr. Pfad-Namen in einer Tabelle hinterlegt werden. Falls die Bilddateien in einem Unterverzeichnis des BE-Verzeichnisses liegen, kann der Pfad auch durch Auslesen des BE-Pfades aus der Tabelle Msysobjects ermittelt werden.
von http://dbwiki.net/wiki/VBA_Tipp:_Namen_und_Pfad_der_verkn%C3%BCpften_Datenbank_ermitteln :
Public Function GetDBName(TblName)
GetDBName = DLookup("Database","MSysObjects","Name='" & TblName & "'")
End Function
Mit dieser Funktion und den Bilddateinamen aus der Tabelle läßt sich dann der benötigte PfadDateiName zusammensetzen, der der Picture-Eigenschaft zugewiesen wird.