Avatar billede capion Nybegynder
29. august 2003 - 13:25 Der er 12 kommentarer og
1 løsning

totaler i separat bog/projekt/mappe IKKE ark..

jeg skal opsamle totaler fra X-antal regneark, i eet, separat ark.
alle regneark ligger i samme katalog (f.eks. c:\regneark\aaa.xls
c:\regneark\bbb.xls
c:\regneark\ccc.xls

i hvert af disse er hhv. 12 (måneders) ark + 1 total for året.
jeg har så et separat regneark:
c:\regneark\total\totaler.xls
i dette ark vil jeg have en automatik, som indsamler totaler fra hvert af de andre ark.
Der er 5 felter i hvert ark som skal hentes ind i totaler.xls; og beregnes til en årstotal.
Når jeg skriver automatik, mener jeg at, der skal læses filnavne fra c:\regneark\*.xls
således man ikke skal håndkode hver gang der er oprettet et nyt regneark.
Hvordan gør jeg ?
Jeg ser gerne en total-løsning ( se lige det mega-antal point jeg giver !!)
Avatar billede martin.jensen Nybegynder
29. august 2003 - 13:38 #1
Er det til privat brug eller??
Avatar billede aheiss Praktikant
29. august 2003 - 13:54 #2
Skal total filen bestå af et total ark efterfulgt af et antal ark svarende til antal filer i mappen ? Eller kun et ark svarende til summen af alle total ark i mappen ?
Avatar billede bak Seniormester
29. august 2003 - 14:07 #3
Det kan gøres smartere end det her, men det virker.
Køres fra c:\regneark\total\totaler.xls

Sub BatchProcess()
Dim FS As FileSearch
Dim FilePath As String, FileSpec As String, SheetName As String
Dim i As Integer
Dim v As Variant
Dim sheet As String, cell_1 As String, cell_2 As String, cell_3 As String
Dim cell_4 As String, cell_5 As String
FilePath = "C:\Regneark\"
FileSpec = "*.xls"
SheetName = "Total"
cell_1 = "$A$1"
cell_2 = "$A$2"
cell_3 = "$A$3"
cell_4 = "$A$4"
cell_5 = "$F$2"

Set FS = Application.FileSearch
With FS
.LookIn = FilePath
.Filename = FileSpec
.Execute
If .FoundFiles.Count = 0 Then
MsgBox ("Ingen filer fundet")
Exit Sub
End If
End With
For i = 1 To FS.FoundFiles.Count
v = Split(FS.FoundFiles(i), Application.PathSeparator)
ActiveCell.Offset(i - 1, 0) = hentceller(FilePath, v(UBound(v)), SheetName, cell_1)
ActiveCell.Offset(i - 1, 1) = hentceller(FilePath, v(UBound(v)), SheetName, cell_2)
ActiveCell.Offset(i - 1, 3) = hentceller(FilePath, v(UBound(v)), SheetName, cell_3)
ActiveCell.Offset(i - 1, 4) = hentceller(FilePath, v(UBound(v)), SheetName, cell_4)
ActiveCell.Offset(i - 1, 5) = hentceller(FilePath, v(UBound(v)), SheetName, cell_5)

Next
Range(ActiveCell, ActiveCell.Offset(i, 1)) = Range(ActiveCell, ActiveCell.Offset(i, 1)).Value
End Sub

Function hentceller(p, f, s, c)
hentceller = "='" & p & "[" & f & "]" & s & "'!" & Range(c).Address(, , xlA1)
End Function
Avatar billede janvogt Praktikant
29. august 2003 - 14:09 #4
Hvis det samme felt du skal hente på alle ark kan du bruge den fremgangsmåde jeg har beskrevet her
http://www.eksperten.dk/spm/333245
Avatar billede aheiss Praktikant
29. august 2003 - 16:22 #5
bak / er "Split" en Excel2000 funktion ? Jeg kan ikke kalde den
Avatar billede bak Seniormester
29. august 2003 - 19:29 #6
Aheiss -> Rigtigt, der kom nogle nye funktioner til i xl2000.
Det er dog muligt at emulere disse. MS har en side med disse.
her er en anden jeg fandt engang.

Function Split(sString As String, Optional sDelim As String = " ", _
  Optional ByVal Limit As Long = -1, _
  Optional Compare As Long = vbBinaryCompare) As Variant
''''''''''''''''''''''''''''
'  Split mirrors the Split function introduced in XL2000
'  Author Myrna Larson
'  posted to microsoft.public.excel.programming 13 Nov 2001
Dim vOut As Variant, StrLen As Long
Dim DelimLen As Long, Lim As Long
Dim n As Long, p1 As Long, p2 As Long

StrLen = Len(sString)
DelimLen = Len(sDelim)
ReDim vOut(0 To 0)
If StrLen = 0 Or Limit = 0 Then
' return array with 1 element which is empty
ElseIf DelimLen = 0 Then
    vOut(0) = sString ' return whole string in first array element
Else
    Limit = Limit - 1 ' adjust from count to offset
    n = -1
    p1 = 1
    Do While p1 <= StrLen
        p2 = InStr(p1, sString, sDelim, Compare)
        If p2 = 0 Then p2 = StrLen + 1
        n = n + 1
        If n > 0 Then ReDim Preserve vOut(0 To n)
        If n = Limit Then
            vOut(n) = Mid$(sString, p1) ' last element contains entire tail
            Exit Do
        Else
            vOut(n) = Mid$(sString, p1, p2 - p1) ' extract this piece of string
        End If
            p1 = p2 + DelimLen ' advance start past delimiter
    Loop
End If
Split = vOut
End Function
Avatar billede aheiss Praktikant
01. september 2003 - 11:25 #7
Jep - det virker. janvogts virker i øvrigt også.
Avatar billede bak Seniormester
01. september 2003 - 11:57 #8
S'føli, de er også stort set ens, dog er der en væsentlig forskel.
Jan's henter værdien af cellerne, min efterlader et link til cellerne.
Avatar billede capion Nybegynder
13. oktober 2003 - 14:09 #9
jeg har været væk et stk. tid, sorry. jeg kan se at JanVogts udgave virker OK. Men !.. hvordan får jeg det til at blive i arket.. så ikke der oprettes en ny hvergang ? (Kan se at FætterGuf også har spurgt, men uden svar)
Avatar billede aheiss Praktikant
14. oktober 2003 - 10:17 #10
Det gør du ved at slette linje 17
Workbooks.Add
i janvogts kode. Eller sæt ' foran
Avatar billede janvogt Praktikant
14. oktober 2003 - 10:38 #11
Jeg mener nu jeg hár svaret på spørgsmålet fra FætterGuf (se svar 26/03-2003 21:20:06) :-)
Avatar billede janvogt Praktikant
14. oktober 2003 - 15:17 #12
Nåede du i mål capion?
Avatar billede capion Nybegynder
15. oktober 2003 - 18:54 #13
AH!.. jow *S* ( Hastværk er lastværk )
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