Option Explicit
Public SetFolders As New SetFolders
Public SetFilesVar As New SetFilesVar
Public startDoc, projDoc, sheetSettings, sheetMain, sheetVehicles As String
Public rubrikNamn(100) As Variant
Public stdRubrikNamn(100), radRubriknamn(100)
Public antalRubrik As Integer
Public datumNamn(100), serieNamn(100), kvartal(100), år(100), vehicle(100), KOL(100)
Public antalDatum As Integer
Public failCounter, pivåCounter As Integer
Sub Run()
Dim sCol, Summa, sYear, sRow, r, rr, c, cc, i, ii, n, kv, year, veh, ser, actP
Application.DisplayAlerts = False
Application.ScreenUpdating = False
sheetSettings = "Settings"
sheetMain = "Main"
failCounter = 1
pivåCounter = 1
actP = ActiveWorkbook.Path
sheetVehicles = "Vehicles"
Sheets(sheetVehicles).Visible = True
startDoc = ActiveWorkbook.Name
projDoc = ActiveWorkbook.Name
Worksheets("CheckDoc").Activate
Range("A2:IV1000").ClearContents
Worksheets("Pivådata").Activate
Range("A2:IV5000").ClearContents
Worksheets(sheetMain).Activate
Range("3:1000").ClearContents
Rows("3:1000").Select
Selection.NumberFormat = "General"
With Selection
.HorizontalAlignment = xlLeft
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Selection.Font.Bold = False
Selection.ClearOutline
' --------
sCol = MatchTextCol("Q1", 1, 100, 2)
sYear = Cells(1, sCol).Value - 2000
Call SetFilesVar.init(actP & "\Project", ".xls")
For n = 1 To SetFilesVar.noOfFiles
projDoc = SetFilesVar.Files(n)
' copy data
Workbooks.Open fileName:=actP & "\Project\" & projDoc
Sheets("Vehicles").Activate
Cells.Select
Selection.Copy
Workbooks(startDoc).Activate
Sheets("Vehicles").Select
Cells.Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Workbooks(projDoc).Activate
Workbooks(projDoc).Close
'-----------------------------
If checkRubrik = True Then
If checkDate = True Then
' Workbooks(startDoc).Activate
Worksheets(sheetMain).Activate
sRow = LRowFromEnd(1, "", "") + 2
Cells(sRow, 1).Value = projDoc
Cells(sRow, 1).Font.Bold = True
For i = 1 To antalRubrik
r = radRubriknamn(i)
rr = sRow + i
Cells(rr, 1).Value = stdRubrikNamn(i)
For ii = 1 To antalDatum
c = KOL(ii)
kv = kvartal(ii)
year = år(ii)
veh = vehicle(ii)
ser = serieNamn(ii)
' cc= (sCol-1)+sYear*(år-sYear)+ 3*(kv-1)+veh ' col
cc = (sCol - 1) + 12 * (year - sYear) + 3 * (kv - 1) + veh ' col
Cells(sRow, cc).Value = ser
Cells(sRow, cc).Select
With Selection
.HorizontalAlignment = xlLeft
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 90
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
pivåCounter = pivåCounter + 1
'År Kvartal Projektdok Rubrik Serie Antal h
Cells(rr, cc).Value = Worksheets(sheetVehicles).Cells(r, c).Value
Worksheets("Pivådata").Cells(pivåCounter, 1).Value = 2000 + Val(year)
Worksheets("Pivådata").Cells(pivåCounter, 2).Value = kv
Worksheets("Pivådata").Cells(pivåCounter, 3).Value = projDoc
Worksheets("Pivådata").Cells(pivåCounter, 4).Value = stdRubrikNamn(i)
Worksheets("Pivådata").Cells(pivåCounter, 5).Value = ser
Worksheets("Pivådata").Cells(pivåCounter, 6).Value = Worksheets(sheetVehicles).Cells(r, c).Value
Cells(sRow + antalRubrik + 1, cc).FormulaR1C1 = "=SUM(R[-" & (antalRubrik) & "]C:R[-1]C)"
Cells(sRow + antalRubrik + 1, cc).Font.Bold = True
Next ii
Next i
Cells(rr + 1, 1).Value = "Summa:"
Cells(rr + 1, 1).HorizontalAlignment = xlRight
Cells(rr + 1, 1).Font.Bold = True
Rows(sRow + 1 & ":" & rr).Select
Selection.Rows.Group
End If
End If
Next n
Worksheets("Pivådata").Activate
Dim eRow
eRow = lrow(1, 1, "", "")
Columns("A:M").Select
Worksheets("Pivådata").Sort.SortFields.Clear
Worksheets("Pivådata").Sort.SortFields.Add Key:=Range( _
"A2:A" & eRow), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
Worksheets("Pivådata").Sort.SortFields.Add Key:=Range( _
"B2:B" & eRow), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With Worksheets("Pivådata").Sort
.SetRange Range("A1:M" & eRow)
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
For i = 1 To 20
If SheetExist("Tabell" & i) = True Then Worksheets("Tabell" & i).PivotTables("PivotTable1").PivotCache.Refresh
Next i
'----------------
Worksheets(sheetMain).Activate
If failCounter > 1 Then Worksheets("CheckDoc").Activate
Sheets(sheetVehicles).Visible = False
'Uppdaterar skärmen igen automatiskt
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub
Function kvartalCalc(week)
Dim vv, wdate
vv = Val(Right(week, 2))
If vv > 39 Then
kvartalCalc = 4
Exit Function
End If
If vv > 26 Then
kvartalCalc = 3
Exit Function
End If
If vv > 13 Then
kvartalCalc = 2
Exit Function
End If
kvartalCalc = 1
End Function
Function checkRubrik()
Dim i, ii, no, r, eRow As Long
Dim rubrik(5) As Variant
checkRubrik = True
' Workbooks(startDoc).Activate
Worksheets(sheetSettings).Activate
eRow = lrow(1, 1, "", "")
' Workbooks(projDoc).Activate
Worksheets(sheetVehicles).Activate
For i = 1 To 150
Cells(i, 1).Value = Trim(Cells(i, 1).Value)
Next i
For i = 2 To eRow
For ii = 1 To 5
no = ii
stdRubrikNamn(i - 1) = Worksheets(sheetSettings).Cells(i, 1).Value
rubrik(no) = Worksheets(sheetSettings).Cells(i, no).Value
r = MatchTextRow(rubrik(no), 1, 1000, 1, 0)
If r > 0 Then Exit For
Next ii
If r = 0 Then
Dim FText
FText = "Rubriken " & Worksheets(sheetSettings).Cells(i, 1).Value & " finns inte i projektdokumentet"
checkRubrik = False
failCounter = failCounter + 1
Worksheets("CheckDoc").Cells(failCounter, 1).Value = projDoc
Worksheets("CheckDoc").Cells(failCounter, 2).Value = FText
'Exit Function
Else
If Cells(r, 1).Value <> rubrik(no) Then
FText = "Rubriken " & Worksheets(sheetSettings).Cells(i, no).Value & " har små bokstäver i projektdokumentet"
checkRubrik = False
failCounter = failCounter + 1
Worksheets("CheckDoc").Cells(failCounter, 1).Value = projDoc
Worksheets("CheckDoc").Cells(failCounter, 2).Value = FText
'Exit Function
End If
If checkRubrik = True Then
radRubriknamn(i - 1) = r
rubrikNamn(i - 1) = rubrik(no)
End If
End If
Next i
antalRubrik = eRow - 1
End Function
Function checkDate()
Dim i, ii, j, no, r, eCol As Long
Dim rubrik(5) As Variant
Dim dat As Date
Dim text, wdate
Dim år_1, kv_1
checkDate = False
' Workbooks(projDoc).Activate
Worksheets(sheetVehicles).Activate
eCol = 150
For i = 1 To eCol
Cells(5, i).Value = Trim(Cells(5, i).Value)
Next i
For i = 1 To eCol
wdate = Cells(5, i).Value
text = GetDate(wdate)
If text <> 0 Then
ii = ii + 1
KOL(ii) = i
år(ii) = Left(wdate, 2) '
kvartal(ii) = kvartalCalc(wdate)
antalDatum = ii
serieNamn(ii) = Cells(1, i).Value
datumNamn(ii) = text
j = 1
If år(ii) = år_1 And kv_1 = kvartal(ii) Then
j = j + 1
End If
vehicle(ii) = j
år_1 = år(ii)
kv_1 = kvartal(ii)
checkDate = True
End If
Next i
End Function
' *********************************
Option Explicit
' Används för getFileName
Private Declare PtrSafe Function SetCurrentDirectory Lib "kernel32" Alias "SetCurrentDirectoryA" (ByVal lpPathName As String) As Long
'------
Function GetFileName(expath, Title, prefix, Optional multiselectVal)
Dim vFileToOpen As Variant
Dim strCurDir As String
'// Keep Original Dir
strCurDir = CurDir
'// Note: If the UNC path does not exist then
'// It will default to your current one
SetCurrentDirectory expath
If IsMissing(multiselectVal) = True Then
GetFileName = Application.GetOpenFilename(Title & " (*" & prefix & "), *" & prefix & "")
Else
GetFileName = Application.GetOpenFilename(Title & " (*" & prefix & "), *" & prefix & "", 0, "", "", multiselectVal)
End If
expath = CurDir
If TypeName(GetFileName) = "Boolean" Then Exit Function
'// The rest of your code
'// End by resetting to last/original Dir
ChDir strCurDir
End Function
Sub saveActiveFile(fileName)
' save Activefile
' #If VBA7 Then
' ActiveWorkbook.SaveAs filename:=filename, FileFormat:=xlExcel8
' #Else
ActiveWorkbook.SaveAs fileName:=fileName
' #End If
End Sub
Sub CreateExcelInstance(wbFileName)
'Open the workbook in the new instance of Excel and set visible
'If the workbook doesn't exist (a new workbook) then
'create a new one in the new Excel instance
'Procuce a plot if typeOfConv = "Plot"
Dim xl As New Excel.Application
On Error Resume Next
xl.Workbooks.Open wbFileName
xl.Visible = True
If xl.Worksheets.Count = 3 Then xl.Worksheets(1).Activate
Set xl = Nothing
End Sub
' **** Övriga ofta använda
Function MatchTextRow(Rangetext, Startline, Stopline, col, Optional TypeOfS)
' Find row fast for RangeText
Dim TypeOfSearch
Dim i As Long
On Error GoTo Errorhandler
i = 0
If IsMissing(TypeOfS) = True Then
TypeOfSearch = 0 ' Exact match
Else
TypeOfSearch = TypeOfS ' -1 op 1 se help for Match funcion in Excel
End If
If Rangetext = "" Then
For i = Startline To Stopline
If UCase(Rangetext) = UCase(Cells(i, col)) Then
MatchTextRow = i - (Startline - 1)
Exit Function
End If
Next i
End If
MatchTextRow = Application.WorksheetFunction.Match(Rangetext, Range(Cells(Startline, col), Cells(Stopline, col)), TypeOfSearch)
MatchTextRow = MatchTextRow + (Startline - 1)
Exit Function
Errorhandler:
MatchTextRow = 0
End Function
Function MatchTextCol(Rangetext, StartCol, StopCol, row)
' Finn kolumn för RangeText
Dim actS As String
Dim i As Long
On Error GoTo Errorhandler
If Rangetext = "" Then
For i = StartCol To StopCol
If UCase(Rangetext) = UCase(Cells(row, i)) Then
MatchTextCol = i + (StartCol - 1)
Exit Function
End If
Next i
End If
MatchTextCol = Application.WorksheetFunction.Match(Rangetext, _
Range(Cells(row, StartCol), Cells(row, StopCol)), 0)
MatchTextCol = MatchTextCol + (StartCol - 1)
Exit Function
Errorhandler: MatchTextCol = 0
End Function
Function GetFilesVar(Folder, noOfFiles, prefix)
Dim fc As Variant
Dim f
Dim i As Long
Dim Fil() As Variant
Dim fs As New Scripting.FileSystemObject
Set fc = fs.GetFolder(Folder).Files
noOfFiles = 0
For Each f In fc
If Right(f.Name, Len(prefix)) = prefix Then
i = i + 1
ReDim Preserve Fil(i)
Fil(i) = f.Name
noOfFiles = noOfFiles + 1
End If
Next
GetFilesVar = Fil
End Function
Function GetFiles(Folder, noOfFiles)
Dim fc As Variant
Dim f
Dim i As Long
Dim Fil() As Variant
Dim cond As Boolean
Dim fs As New Scripting.FileSystemObject
Set fc = fs.GetFolder(Folder).Files
For Each f In fc
If frmPlot.ChBox_Viewscg = True Then cond = Right(f.Name, 5) = ".xlsm" Or Right(f.Name, 4) = ".scg" Or Right(f.Name, 5) = ".xlsx"
If frmPlot.ChBox_Viewscg = False Then cond = Right(f.Name, 5) = ".xlsm" Or Right(f.Name, 5) = ".xlsx"
If cond = True Then
i = i + 1
ReDim Preserve Fil(i)
Fil(i) = f.Name
noOfFiles = noOfFiles + 1
End If
Next
GetFiles = Fil
End Function
Function GetFilesVB(Folder, noOfFiles)
Dim fc As Variant
Dim f
Dim i As Long
Dim Fil() As Variant
Dim fs As New Scripting.FileSystemObject
Set fc = fs.GetFolder(Folder).Files
For Each f In fc
If Right(f.Name, 4) = ".bas" = True Then
i = i + 1
ReDim Preserve Fil(i)
Fil(i) = f.Name
noOfFiles = noOfFiles + 1
End If
Next
GetFilesVB = Fil
End Function
Function GetFolder(Folder, noofFolder)
Dim fc As Variant
Dim f
Dim i As Long
Dim Fold() As Variant
Dim fs As New Scripting.FileSystemObject
Set fc = fs.GetFolder(Folder).SubFolders
For Each f In fc
i = i + 1
ReDim Preserve Fold(i)
Fold(i) = f.Name
noofFolder = noofFolder + 1
Next
GetFolder = Fold
End Function
Function lrow(row, col, ActB, actS)
' Last row. O if first are Blank
Dim actB1, ActS1 As String
actB1 = ActiveWorkbook.Name
ActS1 = ActiveSheet.Name
If ActB <> "" Then Workbooks(ActB).Activate
If actS <> "" Then Workbooks(actS).Activate
lrow = Cells(row, col).End(xlDown).row
If lrow = Cells.Rows.Count Then
If Cells(Cells.Rows.Count, col).Value = "" Then
If Cells(row, col).Value <> "" Then lrow = row
If Cells(row, col).Value = "" Then lrow = row - 1
End If
End If
Workbooks(actB1).Activate
Worksheets(ActS1).Activate
End Function
Bookmarks