28. januar 2003 - 22:11Der er
14 kommentarer og 1 løsning
Kan makroen vælge bestemte data
Jeg har en fil >>Opgørelse<< med et ark >>Opgørelse2003<<. Ved hjælp af følgende Makro hentes der ugentligt i løbet af året data fra en række lukkede filer/mapper:
Stub OPGØRELSE_Makro() s = "Opgørelse" ' faneblad Application.ScreenUpdating = False For tæller = 1 To 52 'uger For c = 2 To 4 ' kolonner For r = 8 To 27 ' rækker a = Cells(r, c).Address p = "O:\AS\Ugeseddel_30_52\Uge" & Format(tæller, "00") f = Format(tæller, "00") & "sim2002.xls" Cells(r, c + tæller + tæller + tæller - 1) = GetValue(p, f, s, a) 'path, file, sheet and ref Next r Next c Next tæller End Sub
De data Makroen indsamler bliver indsat i Arket >>Opgørelse2003<< For uge01 bliver dataene indsat i D8:F27 I kolonne D indsættes Projektnr, i kolonne E indsættes Normaltimer og i F Overtimer. Og det samme gentager sig i uge02 hvor dataene bliver indsat i G8:I27. I hele arket bliver for alle 52 uger indsat data i D8:FC27.
Jeg har en lille Makro det uge for uge summer Normaltimerne og Overtimerne.
Men nu kommer mit STORE problem, jeg vil gerne kunne summe alle Normaltimerne og alle Overtimerne når Projektnr begynder med b. Eksempel:
Sorry - jeg kan ikke læse - behøver ikke noget - denne her skulle kunne gøre det - prøv ad:
Sub ProjektSum() Dim lCount As Long Dim dNormTid As Double Dim dOverTid As Long
dNormTid = 0 dOverTid = 0 For lCount = 8 To 27 With Cells(lCount, 4) If UCase(Left(.Value, 1) = "B") Then dNormTid = dNormTid + CDbl(.Offset(1, 0).Value) dOverTid = dvoerTid + CDbl(.Offset(3, 0).Value) End If End With Next lCount
MsgBox "Normaltimer: " & Format(dNormTid, "#,##0.00") & vbCrLf & vbCrLf & _ "Overtimer: " & Format(dOverTid, "#,##0.00"), _ vbInformation + vbOKOnly, "Information om B-projekter" End Sub
Flemmingdahl Det funger, men der vises kun 0,00 Normaltimer og 0,00 Overtimer i MsgBox selv om der står timer ud for Projektnr. mfj1 Kan resultatet ikke vises fast i celle A14 og B15?
Sub ProjektSum() Dim lCount As Long Dim dNormTid As Double Dim dOverTid As Long
dNormTid = 0 dOverTid = 0 For lCount = 8 To 27 With Cells(lCount, 4) If UCase(Left(.Value, 1)) = "B" Then dNormTid = dNormTid + CDbl(.Offset(0, 1).Value) dOverTid = dvoerTid + CDbl(.Offset(0, 2).Value) End If End With Next lCount
MsgBox "Normaltimer: " & Format(dNormTid, "#,##0.00") & vbCrLf & vbCrLf & _ "Overtimer: " & Format(dOverTid, "#,##0.00"), _ vbInformation + vbOKOnly, "Information om B-projekter" End Sub
Denne her gennemløber alle ugerne, men når den løber ned i rækkerne for den enkelte uge, så stopper den i denne kolonne, hvis ikke den finder et projektnr. og fortsætter så i næste uge.
Sub ProjektSum() Const lWeeks As Long = 53 Const lRowStart As Long = 8 Const lRowEnd As Long = 27 Dim lCount As Long Dim lCols As Long Dim lRows As Long Dim dNormTid As Double Dim dOverTid As Long
dNormTid = 0 dOverTid = 0 For lCount = 0 To lWeeks - 1 lCols = lCount * 3 + 4 For lRows = lRowStart To lRowEnd With Cells(lRows, lCols) If Not (.Value = "") Then If UCase(Left(.Value, 1)) = "B" Then dNormTid = dNormTid + CDbl(.Offset(0, 1).Value) dOverTid = dvoerTid + CDbl(.Offset(0, 2).Value) End If Else Exit For End If End With Next lRows Next lCount
MsgBox "Normaltimer: " & Format(dNormTid, "#,##0.00") & vbCrLf & vbCrLf & _ "Overtimer: " & Format(dOverTid, "#,##0.00"), _ vbInformation + vbOKOnly, "Information om B-projekter" End Sub
Flemmingdahl Jeg har prøvet at teste din sidste Makro, den funger fint og tæller alle de almindelige timer op perfekt, de over timer jeg har skrevet ind i uge 1, 2, 3, 4 og 5 tælles ikke med, men overtimer skrevet ind i uge 41 er talt med. Jeg sender filen retur.
Flemmingdahl Det funger, tilføjer flere end de 27 overtimer og nomaltimer tælles de ikke med, men sletter jeg f.eks. 3 timer viser den, som den skal at nu er der 24 timer. Ændre jeg nogle af de tal der er indtastet i de celler der er talt med tæller Makroen de nye værdier med. Det er underligt?? mfj1
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.