Ich habe diese Funktionen einfach in ein neues Modul kopiert.
Verknüpfte Tabellen
Es ist eine feine Sache, wenn man Quelldaten, die sich immer wieder ändern, nicht jedesmal importieren muss, sondern einfach als Tabelle verknüft. Das funktioniert auch sehr gut, wenn die Datei vorformatiert ist. Also Excel oder Access bspw. als Quelle dient. Hat man aber eine csv oder txt Datei, ist das ganze nicht mehr ganz so einfach, denn diese Verknüpfungen lassen sich nicht so ohne weiteres über den Tabellenverknüpfungsmanager aktualisieren. Hier gibt es nur 2 Wege mir bekannte Wege:
- Man verknüpft immer wieder neu, das ist aber schon nervig, auch wenn man eine Spec dafür hat. Man muss sich ja doch jedesmal durch klicken.
- Man erledigt diese Aufgabe per Makro (wie auch sonst) :)
Private Sub Befehl1_Click()
dateipfad = DateiOeffnen("Datei wählen", _
"Text-Dateien" & Chr$(0) & "IMPDATEN*.csv", , _
"C:\DATEN\TRANS_DATEN_IN\WP")
If dateipfad <> "" Then
DoCmd.DeleteObject acTable, "IMP_AKT_MON" #
DoCmd.TransferText acLinkDelim, "IMP_Verknüpfen", "IMP_AKT_MON", dateipfad, True, ""
'Format: TransferText(Transfertyp, Spezifikationsname, Tabellenname, Dateiname, BesitztFeldnamen, HTML-Tabellenname, Codepage)
Else
MsgBox "Nix gewählt."
End If
End Sub
Das funktioniert ganz wunderbar.
Zuerst wird die alte Verknüpfung gelöscht und dann wird mittels Spezifikation die Verknüpfung neu gemacht. Arbeitet man mit einer schema.ini, läßt man den Spzifikationsnamen einfach leer.
Nur zu dumm, dass VBA für Access nicht von Haus aus den Datei-Öffnen-Dialog anbietet.
Dieser muss erst speziell eingebunden werden. Hier eine Lösung aus dem iNet, leider habe ich mir die Quelle nicht aufgeschrieben. Es klappt aber hervorragend. Ich habe diese Lösung schon seit geraumer Zeit in Nutzung.
Option Compare Database
Option Explicit
Declare Function SHBrowseForFolder Lib "shell32.dll" Alias _
"SHBrowseForFolderA" (lpBrowseInfo As BROWSEINFO) As Long
Declare Function SHGetPathFromIDList Lib "shell32.dll" Alias _
"SHGetPathFromIDListA" (ByVal pidl As Long, ByVal pszPath$) As Long
Declare Function GetOpenFileName Lib "comdlg32.dll" Alias _
"GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long
Declare Function GetSaveFileName Lib "comdlg32.dll" Alias _
"GetSaveFileNameA" (pSavefilename As SAVEFILENAME) As Long
Private Type BROWSEINFO
hOwner As Long
pidlRoot As Long
pszDisplayName As String
lpszTitle As String
ulFlags As Long
lpfn As Long
lParam As Long
iTmage As Long
End Type
Private Type OPENFILENAME
lStructSize As Long
hwndOwner As Long
hInstance As Long
lpstrFilter As String
lpstrCustomFilter As String
nMaxCustFilter As Long
nFilterIndex As Long
lpstrFile As String
nMaxFile As Long
lpstrFileTitle As String
nMaxFileTitle As Long
lpstrInitialDir As String
lpstrTitle As String
Flags As Long
nFileOffset As Integer
nFileExtension As Integer
lpstrDefExt As String
lCustData As Long
lpfnHook As Long
lpTemplateName As Long
End Type
Private Type SAVEFILENAME
lStructSize As Long
hwndOwner As Long
hInstance As Long
lpstrFilter As String
lpstrCustomFilter As String
nMaxCustFilter As Long
nFilterIndex As Long
lpstrFile As String
nMaxFile As Long
lpstrFileTitle As String
nMaxFileTitle As Long
lpstrInitialDir As String
lpstrTitle As String
Flags As Long
nFileOffset As Integer
nFileExtension As Integer
lpstrDefExt As String
lCustData As Long
lpfnHook As Long
lpTemplateName As Long
End Type
Public Const OFN_FILEMUSTEXIST = &H1000
Public Const OFN_READONLY = &H1
Public Const OFN_HIDEREADONLY = &H4
Public Const BIF_RETURNONLYFSDIRS = &H1
Public Function VerzeichnisWählen(Title$, XHwnd As Long) As String
Dim x As Long, BInfo As BROWSEINFO, dwIList As Long
Dim szPath$, wPos%
With BInfo
.hOwner = XHwnd
.lpszTitle = Title
.ulFlags = BIF_RETURNONLYFSDIRS
End With
dwIList = SHBrowseForFolder(BInfo)
szPath = Space$(512)
x = SHGetPathFromIDList(ByVal dwIList, ByVal szPath)
If x Then
wPos = InStr(szPath, Chr(0))
VerzeichnisWählen = Left$(szPath, wPos - 1)
Else
VerzeichnisWählen = " "
End If
End Function
Public Function DateiOeffnen(Optional Titel, Optional Filter, _
Optional DefExtension, Optional Aktdir) As String
Dim strDateiName$, strDlgTitel$, strFilter$
Dim strDefExtension$, strAktDir$, strNull$
Dim OpenDlg As OPENFILENAME
strNull = Chr$(0)
strDateiName = String$(512, 0)
If IsMissing(Titel) Then
strDlgTitel = "Datei öffnen" & strNull
Else
strDlgTitel = Titel & strNull
End If
If IsMissing(Filter) Then
strFilter = "Alle Dateien" & strNull & "*.*" & strNull & strNull
Else
strFilter = Filter
End If
If IsMissing(DefExtension) Then
strDefExtension = strNull
Else
strDefExtension = DefExtension & strNull
End If
If IsMissing(Aktdir) Then
strAktDir = CurDir$ & strNull
Else
strAktDir = Aktdir & strNull
End If
With OpenDlg
.lStructSize = Len(OpenDlg)
' .hwndOwner = Screen.ActiveForm.Hwnd
.lpstrFilter = strFilter
.nFilterIndex = 1
.lpstrFile = strDateiName
.nMaxFile = Len(strDateiName)
.lpstrInitialDir = strAktDir
.lpstrTitle = strDlgTitel
.Flags = OFN_FILEMUSTEXIST Or OFN_HIDEREADONLY
.lpstrDefExt = strDefExtension
If GetOpenFileName(OpenDlg) <> 0 Then
DateiOeffnen = Left$(.lpstrFile, InStr(.lpstrFile, strNull) - 1)
Else
DateiOeffnen = " "
End If
End With
End Function
Public Function DateiSpeichern(Optional Titel, Optional Filter, _
Optional DefExtension, Optional Aktdir) _
As String
Dim strDateiName$, strDlgTitel$, strFilter$
Dim strDefExtension$, strAktDir$, strNull$
Dim SaveDlg As SAVEFILENAME
strNull = Chr$(0)
strDateiName = String$(512, 0)
If IsMissing(Titel) Then
strDlgTitel = "Datei öffnen" & strNull
Else
strDlgTitel = Titel & strNull
End If
If IsMissing(Filter) Then
strFilter = "Alle Dateien" & strNull & "*.*" & strNull & strNull
Else
strFilter = Filter
End If
If IsMissing(DefExtension) Then
strDefExtension = strNull
Else
strDefExtension = DefExtension & strNull
End If
If IsMissing(Aktdir) Then
strAktDir = CurDir$ & strNull
Else
strAktDir = Aktdir & strNull
End If
With SaveDlg
.lStructSize = Len(SaveDlg)
.hwndOwner = Screen.ActiveForm.Hwnd
.lpstrFilter = strFilter
.nFilterIndex = 1
.lpstrFile = strDateiName
.nMaxFile = Len(strDateiName)
.lpstrInitialDir = strAktDir
.lpstrTitle = strDlgTitel
.Flags = OFN_HIDEREADONLY
.lpstrDefExt = strDefExtension
If GetSaveFileName(SaveDlg) <> 0 Then
DateiSpeichern = Left$(.lpstrFile, InStr(.lpstrFile, strNull) - 1)
Else
DateiSpeichern = " "
End If
End With
End Function
Schreib was...