Avatar billede Jane Knudsen Nybegynder
16. oktober 2013 - 17:40 Der er 9 kommentarer og
1 løsning

VBA kode som åbner en mappe

Hej. Jeg vil meget gerne have hjælpe til lidt VBA-kodning. Jeg har brug for en knap i Excel som kan åbne en mappe. Stien til mappen skal kunne aflæses i en bestemt celle fx A1.
17. oktober 2013 - 17:40 #1
Åbne en mappe... mener du    Excel - Filer | Åben    eller  Åben stifinder i den specifikke folder ?
Avatar billede Jane Knudsen Nybegynder
21. oktober 2013 - 20:23 #2
Hej, jeg mente en specifik folder, men jeg har løst problemet. Jeg har løst problemet med denne kode:
Sub Open_Mappe()
    Dim stFolder As String
   
    Sheets("Liste").Activate
   
    stFolder = Range("M1").Value
   
    If Len(Dir(stFolder, vbDirectory)) <> 0 Then
        Shell "Explorer.exe /n,/e," & stFolder, vbNormalFocus
    Else
        MsgBox "Mappen kunne ikke findes.", vbCritical
    End If
   
    Sheets("Projektspecifikation").Activate
   
End Sub
Nu er der dog opstået et nyt problem, nemlig at i stedet for at finde et eksakt match mellem hvad der står i celle "M1" og mappens navn, vil jeg gerne have koden tilpasses således at, jeg finder og åbner den mappe som begynder med det som står i "M1" - er dette muligt?
23. oktober 2013 - 18:22 #3
Det kan man godt, men det kræver noget mere vba gymnastik, da du løbe igennem alle foldere i mappen et niveau over, og så teste på om mappenavnet starter med xxx
23. oktober 2013 - 18:41 #4
Har du et eksempel på, hvad der kunne stå i M1 ?
23. oktober 2013 - 19:00 #5
Denne her er lavet i forventning om at M1 f.eks. kunne indeholde en sti som "C:\_Test\i", og at du vil åbne den første folder der starter med i - f.eks. "C:\_Test\isbil"

Public Sub OpenFolder()
    Dim sPath As String, sFolder As String, sStartWith As String
    Dim sSubPath() As String
   
    'sPath = "C:\_Test\i" 'Test sti
    sPath = Sheets("Liste").Range("M1").Value
    sSubPath = Split(sPath, "\")
    sStartWith = LCase(sSubPath(UBound(sSubPath)))
    sPath = Left(sPath, Len(sPath) - Len(sStartWith))
   
    sFolder = Dir(sPath, vbDirectory)
    Do While sFolder > ""
        If Not sFolder Like ".*" Then
            If (GetAttr(sPath & sFolder) And vbDirectory) = vbDirectory Then
                If sStartWith = LCase(Left(sFolder, Len(sStartWith))) Then
                    Shell "Explorer.exe /n,/e," & sPath & sFolder, vbNormalFocus
                End If
            End If
        End If
        sFolder = Dir
    Loop
End Sub
23. oktober 2013 - 19:01 #6
I linien efter Shell burde der stå  Exit For
23. oktober 2013 - 19:03 #7
Det hedder selvfølgelig Exit Do...

Public Sub OpenFolder()
    Dim sPath As String, sFolder As String, sStartWith As String
    Dim sSubPath() As String
   
    'sPath = "C:\_Test\i" 'Test sti
    sPath = Sheets("Liste").Range("M1").Value
    sSubPath = Split(sPath, "\")
    sStartWith = LCase(sSubPath(UBound(sSubPath)))
    sPath = Left(sPath, Len(sPath) - Len(sStartWith))
   
    sFolder = Dir(sPath, vbDirectory)
    Do While sFolder > ""
        If Not sFolder Like ".*" Then
            If (GetAttr(sPath & sFolder) And vbDirectory) = vbDirectory Then
                If sStartWith = LCase(Left(sFolder, Len(sStartWith))) Then
                    Shell "Explorer.exe /n,/e," & sPath & sFolder, vbNormalFocus
                    Exit Do
                End If
            End If
        End If
        sFolder = Dir
    Loop
End Sub
Avatar billede Jane Knudsen Nybegynder
23. oktober 2013 - 20:27 #8
Hej SmartOffice, mange tak for din kode men jeg forstår ikke helt hvordan din kode virker, men den mappe jeg gerne vil have åbnet fra Excel ligger som en undermappe her: "c:\projekter\". Undermapperne hedder fx 906598_Test_Test, eller 906599_bla_bla.
I celle M1 vil der kun stå fx 906598. I dette tilfælde skal makroen gerne åbne mappen 906598_Test_Test. VH Jane
Avatar billede Jane Knudsen Nybegynder
23. oktober 2013 - 20:32 #9
Nu kan jeg se sammenhængen og har fået koden til at virke - tusind tak.
23. oktober 2013 - 22:55 #10
Jeg ville sætte c:\projekter ind således:

Public Sub OpenFolder()
    Dim sPath As String, sFolder As String, sStartWith As String
    Dim sSubPath() As String
   
    sPath = "c:\projekter\" & Sheets("Liste").Range("M1").Value
    sSubPath = Split(sPath, "\")
    sStartWith = LCase(sSubPath(UBound(sSubPath)))
    sPath = Left(sPath, Len(sPath) - Len(sStartWith))
   
    sFolder = Dir(sPath, vbDirectory)
    Do While sFolder > ""
        If Not sFolder Like ".*" Then
            If (GetAttr(sPath & sFolder) And vbDirectory) = vbDirectory Then
                If sStartWith = LCase(Left(sFolder, Len(sStartWith))) Then
                    Shell "Explorer.exe /n,/e," & sPath & sFolder, vbNormalFocus
                    Exit Do
                End If
            End If
        End If
        sFolder = Dir
    Loop
End Sub


God fornøjelse med det /Flemming
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

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