VBA, różnica czasu


(Jollapitka) #1

Celem jest obliczenie faktycznej różnicy lat (w kontekście daty bieżącej)

Skorzystałam z funkcji /WorksheetFunction.YearFrac/. Fomuła wydaje się dobra, ale coś jej jednak brakuję:

Chciałabym aby funcja dotyczyła obszaru całej kolumny która zawiera daty zatrudnienia poszczególnych pracowników

Sub lata_pracy1()

Dim thisDate As Date

thisDate = DateValue(Now)

End Sub

Function YearFrac( _

data_zatrudnienia As Object, _

thisDate As Object) As Double

Dim instance As WorksheetFunction

Dim data_zatrudnienia As Object

Dim thisDate As Object

Dim returnValue As Double

returnValue = instance.YearFrac(data_zatrudnienia, thisDate)

lata_pracy = returnValue

End Function

Każda rada się przyda:)


(Pablo_Wawa) #2

Jak dla mnie, to Twój kod jest bez sensu, nie powinien działać, a już na pewno nie ma całej kolumnie (bo skąd ma to wiedzieć?). Ja bym to napisał tak:

Sub lata_pracy1()

Dim data_zatrudnienia As Date

Dim thisDate As Date

Dim instance As WorksheetFunction

Dim Kolumna As Integer

Dim KolumnaDocelowa As Integer

Kolumna = 2

KolumnaDocelowa = 5

thisDate = DateValue(Now)

For Wiersz = 2 To 10

  data_zatrudnienia = Cells(Wiersz, Kolumna).Value

  Cells(Wiersz, KolumnaDocelowa).Value = instance.YearFrac(thisDate, data_zatrudnienia, 3)

Next

End Sub

W kolumnie 2 ("B") są daty, w kolumnie 5 ("E") będzie wynik. Iteracja po wierszach od 2 do 10.


([alex]) #3

Po kiego pisać funkcję skoro można to w skoroszycie zrobić formułą i formatowaniem?


(Pablo_Wawa) #4

No tyż prawda, zasugerowałem się, że ma być do tego makro.