Avatar billede 44nato44 Nybegynder
02. november 2009 - 17:27 Der er 9 kommentarer

MS Excel 2000 faa fat i et bibliotek

Hej

Jeg skal ha en bruger til at aabne en dialog boks og vaelge et bibliotek som jeg vil ha gemt i en tekst streng.

Jeg kan aabne og gemme filer, men hvordan faar jeg kun fat i biblioteket.

Takker saa meget
Avatar billede tjacob Juniormester
02. november 2009 - 17:55 #1
Såvidt jeg ved kan det kun gøres med brug af API'er.
Kopier følgende ind i et modul, og kør test-makroen.

Private Type BROWSEINFO
  hOwner As Long
  pidlRoot As Long
  pszDisplayName As String
  lpszTitle As String
  ulFlags As Long
  lpfn As Long
  lParam As Long
  iImage As Long
End Type

Private Declare Function SHGetPathFromIDList Lib "shell32.dll" Alias _
            "SHGetPathFromIDListA" (ByVal pidl As Long, _
            ByVal pszPath As String) As Long
           
Private Declare Function SHBrowseForFolder Lib "shell32.dll" Alias _
            "SHBrowseForFolderA" (lpBrowseInfo As BROWSEINFO) _
            As Long

Function BrowseFolder() As String
 
    Dim X As Long, bi As BROWSEINFO, dwIList As Long
    Dim szPath As String, wPos As Integer
    bi.ulFlags = 1
    dwIList = SHBrowseForFolder(bi)
    szPath = Space$(512)
    X = SHGetPathFromIDList(ByVal dwIList, ByVal szPath)
    If X Then
        wPos = InStr(szPath, Chr(0))
        BrowseFolder = Left$(szPath, wPos - 1)
    Else
        BrowseFolder = vbNullString
    End If

End Function

Sub test()

    Dim strMappe As String
    strMappe = BrowseFolder

End Sub


Du skal efterfølgende teste på strMappe om den er tom (=""), -dette sker hvis bruger klikker "Annuller".
Avatar billede excelent Ekspert
02. november 2009 - 17:57 #2
Sub VælgSti()
Dim x As FileDialog
Set x = Application.FileDialog(msoFileDialogFolderPicker)
x.Show
sti = x.SelectedItems(1)
sti = sti & "\"
MsgBox sti
End Sub
Avatar billede tjacob Juniormester
02. november 2009 - 18:02 #3
Ah, det kunne gøres uden API'er...........;)
Avatar billede bak Forsker
02. november 2009 - 18:22 #4
Jeg tror faktisk at tjacob har ret her.
Men at msoFileDialogFolderPicker først kom med Excel XP

Lidt kortere version af tjacobs er :

Public Function get_Folder(Optional capt, Optional StartFolder)
    Dim objShell As Object
    Set objShell = CreateObject("Shell.Application").BrowseForFolder(0&, capt, &H200, StartFolder)
    If Not objShell Is Nothing Then get_Folder = objShell.Self.Path
End Function



Sub test()
    x = get_Folder("", "c:\")
End Sub
Avatar billede excelent Ekspert
02. november 2009 - 18:40 #5
så for søren... bak is back :-)

tjakob jeg har problemer med at kopiere din kode ind i et modul
er der en særlig metode ?
Avatar billede bak Forsker
02. november 2009 - 19:08 #6
excellent..kun lige tilbage for få banket noget af rusten af :-)
kan godt mærke at det er længe siden ...
Avatar billede tjacob Juniormester
03. november 2009 - 11:56 #7
excelent>> Ingen særlig metode; Marker med mus - kopier - sæt ind.
Men bak's løsning er jo noget mere elegant, og kan endda simplificeres yderligere hvis man er ligeglad med startupfolder og caption:

Public Function get_Folder()
    Dim objShell As Object
    Set objShell = CreateObject("Shell.Application").BrowseForFolder(0&, "", &H200)
    If Not objShell Is Nothing Then get_Folder = objShell.Self.Path
End Function

Sub test()
    Dim x As String
    x = get_Folder
End Sub
Avatar billede excelent Ekspert
03. november 2009 - 17:32 #8
virker ikke hos mig !!!
Avatar billede excelent Ekspert
03. november 2009 - 17:32 #9
altså marker/kopier sæt ind
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
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

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