Avatar billede avalon116 Nybegynder
30. november 2005 - 11:08 Der er 13 kommentarer og
1 løsning

Reference der er ralativ på mappeniveau

Jeg vil gerne i en formel referere til en celle i et regneark, der ligger i en mappe et niveau højere oppe end mit rengeark, hvordan gøres det?
Avatar billede x-lars Novice
30. november 2005 - 12:08 #1
Betyder dit spm. at referencen skifter fra tid til anden - altså at der skal peges på en anden placering af referencearket?
Avatar billede avalon116 Nybegynder
30. november 2005 - 13:18 #2
Det betyder, at hvis mit ark med formler ("Regneark1")ligger i mappen M2:
"../M1/M2/Regneark1.xls", så ligger mit ark med celler, der skal hentes værdier fra ("Regneark2") i mappen M1:
../M1/Regneark2.xls

Jeg har brug for at kunne flytte alle mapper fra og med M1 til et andet sted (samlet).

Giver det mening?
Avatar billede x-lars Novice
30. november 2005 - 14:06 #3
Jeg går ud fra, at referencen sker via kæder.

Det nemmeste må da være, at gå ind í Rediger > Kæder, klikke på "Skift kæde" og så pege på den nye placering af dit ark?
Avatar billede avalon116 Nybegynder
30. november 2005 - 14:18 #4
Der er ca 45 kæder der skal rettes, så det er ikke hensigtsmæssigt, hvis det kan løses på anden vis.
Men det er sådan, jeg løser det lige nu.
Avatar billede x-lars Novice
30. november 2005 - 15:52 #5
Hvad med søg/erstat? Det tager noget tid, hvis du har mange fjernreferencer, men hvis alle regnearkene kommer til at ligge i den samme mappe, skal du kun sætte det op en gang.

Ellers er jeg lidt tom for idéer. :-(
Avatar billede sjap Praktikant
01. december 2005 - 22:12 #6
Blev det væk!? Så må jeg prøve igen.
Avatar billede sjap Praktikant
01. december 2005 - 22:16 #7
Har rodet lidt med det, og har fundet en "smart" funktion, der kan finde mappen et niveau op. Der er bare lige det problem, at funktionen bruger funktionen Split, som først blev indført med Excel 2000 (og jeg bruger stadig 97). Derfor kan jeg ikke checke om det virker, så jeg håber i bærer over emd mig.

Du skal blot huske er erstatte "Mappe1.xls" med navnet på den mappe som du har kæder til. Det retter kun én, men hvis det virker, kan vi se på resten.


Sub Makro1()

FName = "Mappe1.xls"
OldFileName = CurDir & "\" & FName
NewFileName = PathGetParent(CurDir) & "\" & FName

ActiveWorkbook.ChangeLink Name:=OldFileName, NewName:=NewFileName, Type:=xlExcelLinks

End Sub

Public Function PathGetParent(ByVal sFolder As String, Optional lParentIndex As Long = 1) As String
    Dim asFolders() As String
    Dim sPathSep As String
    Dim lThisFolder As Long
   
    If Len(sFolder) > 0 Then
        'Determine the path seperator
        If InStr(1, sFolder, "/") > 0 Then
            sPathSep = "/"
        Else
            sPathSep = "\"
        End If
       
        If Right$(sFolder, 1) <> sPathSep Then
            sFolder = sFolder & sPathSep
        End If
       
        asFolders = Split(sFolder, sPathSep)
        'Get the requested parent folder
        For lThisFolder = 0 To UBound(asFolders) - lParentIndex - 1
            PathGetParent = PathGetParent & asFolders(lThisFolder) & sPathSep
        Next
    End If
End Function
Avatar billede avalon116 Nybegynder
02. december 2005 - 11:17 #8
jeg får bare fejlmeddelelsen: "400"
Avatar billede avalon116 Nybegynder
02. december 2005 - 11:19 #9
Men hvorfor bruger du ikke bare "ParentDir"?
Avatar billede avalon116 Nybegynder
02. december 2005 - 11:59 #10
Nå der er en fejl i:
NewFileName = PathGetParent(CurDir) & "\" & FName

Skal være:
NewFileName = PathGetParent(CurDir) & FName
Avatar billede avalon116 Nybegynder
02. december 2005 - 12:03 #11
Og så skal koden ændres lidt, så den kæde der skiftes fra ikke er det nuværende stinavn. Den gamle kæde (OldFileName) skal man selv taste ind, tror jeg. Og så kan vi klare det med de mange kæder ved at alle filnavne hedder 1_Filnavn, 2_Filnavn osv. Så der skal laves noget loop.
Avatar billede sjap Praktikant
02. december 2005 - 19:25 #12
Avalon > Lidt kommentarer til dine kommentarer:

11:19:42
"ParentDir"? Hvad er det? Den findes ikke i mine Excel

11:59:15
I min version inkluderer CurDir IKKE den afsluttende \ - derfor er jeg nødt til at sætte den ind. Jeg regnede derfor med at den heller ikke var en del af PathGetParent funktionen. Det var åbenbart forkert, men fint at du selv fandt den fejl.

12:03:30
Har lavet et forslag til et loop. Prøv om det er noget i den retning du søger.

strCurDir = CurDir & "\"
strCurParent = PathGetParent(CurDir)
strBasisFName = "Filnavn"
strBasisFExt = ".xls"

For FileNo = 1 To 45
    FName = strBasisFName & FileNo & strBasisFExt
    OldFileName = strCurDir & FName
    NewFileName = PathGetParent(CurDir) & FName
    ActiveWorkbook.ChangeLink Name:=OldFileName, NewName:=NewFileName, Type:=xlExcelLinks
Next FileNo

Jeg har lavet nogen konstanter af CurDir og PathGetParent(CurDir) sådan at disse funktioner kun kaldes én gang og ikke 45 gange. Det er ikke sikkert det betyder noget væsentligt for hastigheden - men alligevel.

Som du kan se så opbygges filnavne nu af tre dele

strBasisFName  - som er den fælles del af filnavnet
FileNo  -  et nummer på filen (dvs. den IKKE fælles del af filnavnet)
strBasisFExt  -  filens extension

Du kan i pricippet selv bestemme rækkefølgen - blot SKAL strBasisFExt komme sidst :0)
Avatar billede avalon116 Nybegynder
04. december 2005 - 06:52 #13
Jeps, det virker. 1.000 tak for hjælpen.
Ang. ParentDir, nej den er ikke hvad jeg troede. Men den var under hjælp...jeg ved ikke, hvad den kan bruges til. Men i hvert fald ikke til det her.
Avatar billede sjap Praktikant
04. december 2005 - 12:30 #14
:0)
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
Vi har et stort udvalg af Excel kurser. Find lige det kursus der passer dig lige her.

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