Avatar billede martin_moth Mester
24. august 2009 - 14:31 Der er 14 kommentarer og
1 løsning

Finde den mappe Excel pr. default gemmer XLA filer i

Jeg vil prøve at lave et lille installationsprogram, der skal kopiere bl.a. en .XLA fil ind i den mappe, hvor Excel pr default gemmer XLA-filer.

Den placering afhænger jo af brugeren der er logget på PC'en, og sikkert også af office-versionen, win-versionen osv.

På min (XP / office 2003 ) er det her:
C:\Documents and Settings\MAMO\Application Data\Microsoft\AddIns\

Hvordan finder man stien til denne mappe på en vilkårlig PC? Ved noget API kald eller?
Avatar billede Lene Fredborg Ekspert
24. august 2009 - 15:00 #1
I VBA kan du bruge:
Application.StartupPath
Avatar billede martin_moth Mester
24. august 2009 - 15:33 #2
Men det kan jeg jo ikke bruge til det jeg vil.

Jeg vil lave et VB-program (en .exe - fil), der finder ud af hvor Excel gemmer sin XLA-fil pr default på den givne PC.
Avatar billede Lene Fredborg Ekspert
24. august 2009 - 15:59 #3
OK. Du sluttede med "eller?" så det så ud til at dit valg af løsning var åbent...
Avatar billede excelent Ekspert
24. august 2009 - 19:09 #4
Denne kode leveres af VBA-Hjælp måske du kan bruge den

Sub Test()

With Worksheets(2)
    .Rows(1).Font.Bold = True
    .Range("a1:d1").Value = _
        Array("Name", "Full Name", "Title", "Installed")
    For i = 1 To AddIns.Count
        .Cells(i + 1, 1) = AddIns(i).Name
        .Cells(i + 1, 2) = AddIns(i).FullName
        .Cells(i + 1, 3) = AddIns(i).Title
        .Cells(i + 1, 4) = AddIns(i).Installed
    Next
    .Range("a1").CurrentRegion.Columns.AutoFit
End With

End Sub
Avatar billede martin_moth Mester
25. august 2009 - 08:36 #5
Jeg skal jo helst finde ud af det uden at starte Excel ...
Avatar billede tjacob Juniormester
25. august 2009 - 11:37 #6
I Vista/Office 2007 er adressen:

C:\Users\[brugernavn]\AppData\Roaming\Microsoft\AddIns

Så mon ikke man kan gå ud fra at de to sidste levels (\Microsoft\AddIns) er generelle?
Du skal så blot finde AppData mappen.

Der findes uden tvivl en API der finder systemmmapperne, og den kan finde AppData (eller i Vista: AppData\Roaming).
I .NET findes en funktion:
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)
der gør netop dette, og den bygger uden tvivl på en API.

Men jeg vil umiddelbart tro at det nemmeste simpelthen er at aflæse adressen i Systemregisterdatabasen:
Computer\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
Nøglen AppData

Denne adresse gælder i Vista, og -vil jeg tro- de fleste tidligere versioner af Windows.

Så du skal blot finde en VB-funktion der kan aflæse nøgler i registret............
Avatar billede martin_moth Mester
25. august 2009 - 11:52 #7
VB funktionen til at aflæse i registeret tror jeg jeg kan finde - prøver lige at kikke på det :-)

Hvordan fandt du frem til :
Computer\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders

Og peger den på den unikke folder der hedder xxx\AddIns ?
Avatar billede tjacob Juniormester
25. august 2009 - 12:01 #8
Jeg kan ikke huske hvor jeg først hørte om denne nøgle, men jeg har brugt den mange gange før til at finde adressen på diverse systemmapper.

Den peger IKKE på den unikke folder xxx\AddIns, men på mappen AppData, men som jeg nævnte i sidste indlæg, så tror jeg godt du kan gå ud fra at mappen "Microsoft\AddIns" ligger i AppData, så du skal altså manuelt tilføje "\Microsoft\AddIns" til det path du får ud.
Avatar billede tjacob Juniormester
25. august 2009 - 12:13 #9
Alternativt fandt jeg lige denne side:

http://msdn.microsoft.com/en-us/library/aa140088(office.10).aspx

Men jeg tror ikke den bringer dig nærmere end AppData-mappen.
Avatar billede tjacob Juniormester
25. august 2009 - 12:20 #10
Nu fandt jeg pludselig det rigtige svar til dig:

Det viser sig at der ER en funktion i VBA til at finde systemmapper/data:

Environ("navn her")

Se her:

http://blogs.officezealot.com/charles/archive/2004/12/10/3574.aspx
Avatar billede tjacob Juniormester
25. august 2009 - 12:26 #11
Så det ser ud til at du blot skal:

Dim AddInPath as String

AddInPath = Environ("APPDATA") & "\Microsoft\AddIns"


/tjacob
Avatar billede martin_moth Mester
25. august 2009 - 13:24 #12
Se - det vil være guld...

Og så laver jeg en On Error Goto om det hele, så brugeren kan browse sig frem ,hvis ovenstående fejler

tester det senere - men pointene er vist dine - smid svar
Avatar billede tjacob Juniormester
25. august 2009 - 13:44 #13
OK -her er svar, men tjek nu lige om det virker!
Avatar billede tjacob Juniormester
22. september 2009 - 18:33 #14
Hvad så martin, virkede det?
Avatar billede martin_moth Mester
22. september 2009 - 21:08 #15
har fået opgaven på stand-by - skal nok få det testet om kort tid :-) Du er ikke glemt
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
Kurser inden for grundlæggende programmering

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