29. august 2003 - 13:25Der 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 !!)
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 ?
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
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
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)
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.