Avatar billede larsgrau Forsker
29. august 2011 - 09:10 Der er 13 kommentarer og
1 løsning

Sti til desktop

Hej

Jeg har et lille problem, jeg importer en fil til en tabel via denne VBA kode, men jeg bruger mappen c:\windows\temp til at omdøbe fil til en txt fil, men på de maskine hvor den skal bruges har bruger ikke rettigheder til at skrive til denne mappe, så jeg tænke  findes der en sti til desktop ??

Private Sub Kommandoknap46_Click()
On Error GoTo Err_import_file

DoCmd.SetWarnings False

Dim strFilter As String
Dim strInputFileName As String

DoCmd.OpenQuery "dnk_tøm_signal", acViewNormal, acAdd

strFilter = ahtAddFilterItem(strFilter, "ALL FILES (*.*)", "*.*")
strInputFileName = ahtCommonFileOpenSave( _
                Filter:=strFilter, OpenFile:=True, _
                DialogTitle:="Please select an input file...", _
                Flags:=ahtOFN_HIDEREADONLY)

FileCopy strInputFileName, "c:\windows\temp\import.txt"

DoCmd.TransferText acImportDelim, "signalimport", "dnk_signal", "c:\windows\temp\import.txt", False, ""

Kill "c:\windows\temp\import.txt"

Me.Tekst17 = dnk_fhpHentsignal
Err_import_file:
If Err.Number = 53 Then
Exit Sub
Else
MsgBox Err.Number & " - " & Err.Description

End If
End Sub

Nogen som har en ide ??

/lars
Avatar billede hugopedersen Nybegynder
29. august 2011 - 09:22 #1
Smid nedenstående i et modul, så får du en funktion fhpFolder_Get_Location der kan returnere alle mulige foldernavne.
Men på Windows 7 kan det godt være lidt specielt stadig.


Public Const CSIDL_FLAG_CREATE = &H8000&          'combine with CSIDL_ value to force
                                                    'create on SHGetSpecialFolderLocation()
Public Const CSIDL_FLAG_DONT_VERIFY = &H4000      'combine with CSIDL_ value to force
                                                    'create on SHGetSpecialFolderLocation()
Public Const CSIDL_FLAG_MASK = &HFF00              'mask for all possible flag values
Private Const SHGFP_TYPE_CURRENT = &H0              'current value for user, verify it exists
Private Const SHGFP_TYPE_DEFAULT = &H1

'Converts an item identifier list to a file system path.
Private Declare Function SHGetPathFromIDList Lib "shell32" _
  Alias "SHGetPathFromIDListA" _
  (ByVal pidl As Long, _
  ByVal pszPath As String) As Long

Private Declare Function SHGetSpecialFolderLocation Lib "shell32" _
  (ByVal hWndOwner As Long, _
    ByVal nFolder As Long, _
    pidl As Long) As Long

Private Declare Sub CoTaskMemFree Lib "ole32" _
  (ByVal pv As Long)
   
Private Const MAX_PATH = 260

Public Enum hpSystem_Path
  CSIDL_DESKTOP = &H0                  '{desktop}
  CSIDL_INTERNET = &H1                  'Internet Explorer (icon on desktop)
  CSIDL_PROGRAMS = &H2                  'Start Menu\Programs
  CSIDL_CONTROLS = &H3                  'My Computer\Control Panel
  CSIDL_PRINTERS = &H4                  'My Computer\Printers
  CSIDL_PERSONAL = &H5                  'My Documents
  CSIDL_FAVORITES = &H6                '{user}\Favourites
  CSIDL_STARTUP = &H7                  'Start Menu\Programs\Startup
  CSIDL_RECENT = &H8                    '{user}\Recent
  CSIDL_SENDTO = &H9                    '{user}\SendTo
  CSIDL_BITBUCKET = &HA                '{desktop}\Recycle Bin
  CSIDL_STARTMENU = &HB                '{user}\Start Menu
  CSIDL_DESKTOPDIRECTORY = &H10        '{user}\Desktop
  CSIDL_DRIVES = &H11                  'My Computer
  CSIDL_NETWORK = &H12                  'Network Neighbourhood
  CSIDL_NETHOOD = &H13                  '{user}\nethood
  CSIDL_FONTS = &H14                    'windows\fonts
  CSIDL_TEMPLATES = &H15
  CSIDL_COMMON_STARTMENU = &H16        'All Users\Start Menu
  CSIDL_COMMON_PROGRAMS = &H17          'All Users\Programs
  CSIDL_COMMON_STARTUP = &H18          'All Users\Startup
  CSIDL_COMMON_DESKTOPDIRECTORY = &H19  'All Users\Desktop
  CSIDL_APPDATA = &H1A                  '{user}\Application Data
  CSIDL_PRINTHOOD = &H1B                '{user}\PrintHood
  CSIDL_LOCAL_APPDATA = &H1C            '{user}\Local Settings\Application Data (non roaming)
  CSIDL_ALTSTARTUP = &H1D              'non localized startup
  CSIDL_COMMON_ALTSTARTUP = &H1E        'non localized common startup
  CSIDL_COMMON_FAVORITES = &H1F
  CSIDL_INTERNET_CACHE = &H20
  CSIDL_COOKIES = &H21
  CSIDL_HISTORY = &H22
  CSIDL_COMMON_APPDATA = &H23          'All Users\Application Data
  CSIDL_WINDOWS = &H24                  'GetWindowsDirectory()
  CSIDL_SYSTEM = &H25                  'GetSystemDirectory()
  CSIDL_PROGRAM_FILES = &H26            'C:\Program Files
  CSIDL_MYPICTURES = &H27              'C:\Program Files\My Pictures
  CSIDL_PROFILE = &H28                  'USERPROFILE
  CSIDL_SYSTEMX86 = &H29                'x86 system directory on RISC
  CSIDL_PROGRAM_FILESX86 = &H2A        'x86 C:\Program Files on RISC
  CSIDL_PROGRAM_FILES_COMMON = &H2B    'C:\Program Files\Common
  CSIDL_PROGRAM_FILES_COMMONX86 = &H2C  'x86 Program Files\Common on RISC
  CSIDL_COMMON_TEMPLATES = &H2D        'All Users\Templates
  CSIDL_COMMON_DOCUMENTS = &H2E        'All Users\Documents
  CSIDL_COMMON_ADMINTOOLS = &H2F        'All Users\Start Menu\Programs\Administrative Tools
  CSIDL_ADMINTOOLS = &H30              '{user}\Start Menu\Programs\Administrative Tools
End Enum

Public Function fhpFolder_Get_Location(lngCSIDL As hpSystem_Path) As String
' -----------------------------------------------------------------------------------
' Purpose    : Placering af en bestemt system folder
' Parameters :
' Returns    : String
' Created    : 01-14-05
' Modified  :
' Remarks    :
' -----------------------------------------------------------------------------------
On Error GoTo Error_fhpFolder_Get_Location
  Dim strPath As String
  Dim strFolder_Path As String
  Dim pidl As Long
 
  'fill the idl structure with the specified folder item
  If SHGetSpecialFolderLocation(0, lngCSIDL, pidl) = 0 Then
    strPath = Space$(MAX_PATH)
    If SHGetPathFromIDList(ByVal pidl, ByVal strPath) Then
      strFolder_Path = Left(strPath, InStr(strPath, Chr$(0)) - 1)
    End If
    Call CoTaskMemFree(pidl)
  End If
 
Exit_fhpFolder_Get_Location:
  If Right(strFolder_Path, 1) <> "\" Then
    strFolder_Path = strFolder_Path & "\"
  End If
  fhpFolder_Get_Location = strFolder_Path
  Exit Function

Error_fhpFolder_Get_Location:
  strFolder_Path = "C:\"
  Select Case Err.Number
    Case 3021
    Case 2501
    Case Is < 0
    Case Else
      MsgBox Err.Number & ": " & Err.Description, vbOKOnly + vbCritical, "Error in procedure 'fhpFolder_Get_Location'"
  End Select
  Resume Exit_fhpFolder_Get_Location

End Function
29. august 2011 - 09:25 #2
Istedet at forvente at c:\windows\temp\ findes så brug variablen

%TEMP%
Avatar billede hugopedersen Nybegynder
29. august 2011 - 09:32 #3
Det hjælper ham ikke nødvendigvis på Windows 7 og Vista hvad angår rettigheder.
Og da Windows\Temp er et bibliotek der oprettes af systemet under installation, så skal der ske et eller andet for at den forsvinder
29. august 2011 - 10:11 #4
Jeg har kun oplevet %TEMP% som helt 'fri' ?!? Mange programmer + systemet bruger jo den mappe i flæng ...
Avatar billede larsgrau Forsker
29. august 2011 - 21:15 #5
Jeg har sat det modil ind i et modul i VBA

  'fill the idl structure with the specified folder item
If SHGetSpecialFolderLocation(0, lngCSIDL_DESKTOPDIRECTORY, pidl) = 0 Then
    strPath = Space$(MAX_PATH)
    If SHGetPathFromIDList(ByVal pidl, ByVal strPath) Then
      strFolder_Path = Left(strPath, InStr(strPath, Chr$(0)) - 1)
    End If
    Call CoTaskMemFree(pidl)
End If

Er det rigtigt hvis jeg gerne vil have den til at finde "CSIDL_DESKTOPDIRECTORY = &H10        '{user}Desktop"

Hvis det er rigtigt hvordan sætte jeg den så ind i følgende kode:
FileCopy strInputFileName, "fhpFolder_Get_Location\import.txt"

DoCmd.TransferText acImportDelim, "signalimport", "dnk_signal", "fhpFolder_Get_Location\import.txt", False, ""

Kill "fhpFolder_Get_Location\import.txt"

??
Avatar billede hugopedersen Nybegynder
30. august 2011 - 07:48 #6
Noget i stil med
FileCopy strInputFileName, fhpFolder_Get_Location(CSIDL_DESKTOPDIRECTORY) & "import.txt"


(Har ikke adgang til Access lige her så jeg kan ikke teste)
Avatar billede larsgrau Forsker
30. august 2011 - 19:14 #7
Kan ikke få den til at virke
Avatar billede hugopedersen Nybegynder
30. august 2011 - 21:19 #8
Så send mig lige din mailadresse, så skal jeg sende dig et eksempel der virker selv på Windows 7
Avatar billede hugopedersen Nybegynder
31. august 2011 - 15:07 #9
Eksempel sendt med mail dags dato.
Avatar billede larsgrau Forsker
31. august 2011 - 15:52 #10
Oki, ikke modtaget kl 15:52
Avatar billede hugopedersen Nybegynder
31. august 2011 - 16:07 #11
Det forstå jeg så ikke.
Men prøv så
http://www.hugopedersen.dk/content/files/946035.zip

Der ligger den i hvert fald nu.
Avatar billede hugopedersen Nybegynder
02. september 2011 - 10:37 #12
Tak for points - jeg antager at du fik det forventede resultat.
Avatar billede larsgrau Forsker
02. september 2011 - 16:20 #13
ja tak, har du testet om det virker på en XP maskine også ?
Avatar billede hugopedersen Nybegynder
02. september 2011 - 16:25 #14
Ja det har jeg - og det gjorde den
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester