4.1. Analiza AWN jest dokonywana na poziomie VBA Centralnym miejscem systemu wspomagania dokonania analizy wydatków na wynagrodzenia nauczycieli są makra (procedury, programy) przygotowane w środowisku VBA. Makra zostały podzielone na pięć modułów. 4.1.1. Makra modułu Glowny ------------------------------------------------------------------------ deklaracja zmiennych i stałych ------------------------------------------------------------------------ Dim i_dzien(1 To 31, 1 To 12) As Integer tablica wart. w zakresie "Rok" Dim i_lidnimies(1 To 12) As Integer tabl. liczby dni w kolejnych mies. Dim i_sumadnirob(1 To 12) As Integer suma dni roboczych w danym mies. Dim i_dninieog(0 To 12) As Integer suma dni nieobecn. - ogółem Dim i_dniniero(0 To 12) As Integer suma dni nieobecn. - roboczych Dim i_dninieog1(0 To 12) As Integer suma dni nieobecn. - ogółem (typ 1) Dim i_dniniero1(0 To 12) As Integer suma dni nieobecn. - robocz. (typ 1) Dim i_dninieog2(0 To 12) As Integer suma dni nieobecn. - ogółem (typ 2) Dim i_dniniero2(0 To 12) As Integer suma dni nieobecn. - robocz. (typ 2) Dim i_dninieog3(0 To 12) As Integer suma dni nieobecn. - ogółem (typ 3) Dim i_dniniero3(0 To 12) As Integer suma dni nieobecn. - robocz. (typ 3) Dim d_etat(1 To 12) As Double wymiar etatu Dim d_mswz(1 To 12) As Double minimalna stawka wynagrodzenia zasadniczego Dim d_strz(1 To 12) As Double struktura zatrudnienia Dim d_oswz(1 To 12) As Double osobista stawka wynagrodzenia zasadniczego Dim i_nauczyciel As Integer licznik nauczycieli Dim str_awn As String plik z danymi Dim i_metoda As Integer wybór metody liczenia struktury zatrudnienia Dim cti_zaokr As Integer dokładność obl. (miejsc po przecinku - prawo) Public Const cti_zaokrzl As Integer = 2 dokładność obliczeń (kwoty) Const cti_luty As Integer = 28 liczby dni w lutym dla danego roku Dim str_folder As String folder, w którym znajdują się pliki analizy Dim str_ark As String arkusz do pobrania danych z plików awn*.xls Dim i_wierszanalizy As Integer licznik kolejnych wierszy w pliku analizy Public Analiza As String arkusz dokonania analizy dla danej grupy naucz. Public i_linaproc As Integer ------------------------------------------------------------------------ Procedura : Dni_01() Autor : Krzysztof Sługocki; Krzysztof.Slugocki@gmail.com Data wer. : 2014-03-20 Zadanie : Zliczenie i oznaczenie dni w danym roku Uwagi : Dane są pobierane z ukrytego arkusza "Tablice" ------------------------------------------------------------------------ Sub Dni_01() Dim m As Integer licznik miesięcy w tablicy zakresu "Rok" Dim n As Integer licznik dni danego miesiąca w tablicy zakresu "Rok" For m = 1 To 12 For n = 1 To 31
i_dzien(n, m) = _ Tablice.Range("Rok").Cells(n, m) Next n Next m For m = 1 To 12 i_lidnimies(m) = _ Tablice.Range("LiczbaDni").Cells(m, 1) Next m For m = 1 To 12 i_sumadnirob(m) = 0 For n = 1 To 31 i_sumadnirob(m) = i_sumadnirob(m) + i_dzien(n, m) Next n Next m ------------------------------------------------------------------------ Procedura : Nieobecnosci_01() Autor : Krzysztof Sługocki; Krzysztof.Slugocki@gmail.com Data wer. : 2014-03-24 Zadanie : Zliczenie dni nieobecności w zależności od typu nieobecn. Uwagi : Dane (daty) są pobierane z arkuszy awn* ------------------------------------------------------------------------ Sub Nieobecnosci_01() Dim i_dziennie(1 To 31, 1 To 12) As Integer Dim i_dninie As Integer Dim i As Integer licznik kolejnych nieobecności Dim j As Integer licznik dni dla danego okresu nieobecności Dim m As Integer licznik miesięcy w tablicy zakresu "Rok" Dim n As Integer licznik dni danego miesiąca w tablicy zakresu "Rok" Dim i_liczbanie As Integer liczba nieobecności Dim i_typnie As Integer typ nieobecności Dim i_data2 As Long Dim i_data1 As Long m = 0 i_liczbanie = WartZamPlik(str_Folder, str_awn, str_ark, 95, _ 5 + 3 * i_nauczyciel) For i = 1 To i_liczbanie i_typnie = WartZamPlik(str_Folder, str_awn, str_ark, 27 + i, _ 5 + 3 * i_nauczyciel) If i_typnie <> 0 Then i_data2 = WartZamPlik(str_Folder, str_awn, str_ark, 27 + i, _ 7 + 3 * i_nauczyciel) i_data1 = WartZamPlik(str_Folder, str_awn, str_ark, 27 + i, _ 6 + 3 * i_nauczyciel) i_dninie = i_data2 - i_data1 + 1 For j = 1 To i_dninie n = Day(DateValue(WartZamPlikData(str_Folder, str_awn, _ str_ark, 27 + i, 6 + 3 * i_nauczyciel)) + j - 1) 2
m = Month(DateValue(WartZamPlikData(str_Folder, str_awn, _ str_ark, 27 + i, 6 + 3 * i_nauczyciel)) + j - 1) i_dniniero(m) = i_dniniero(m) + i_dzien(n, m) i_dninieog(m) = i_dninieog(m) + 1 Select Case WartZamPlik(str_Folder, str_awn, str_ark, _ 27 + i, 5 + 3 * i_nauczyciel) Case 1 nie jest uwzględniania w liczeniu struktury i_dniniero1(m) = i_dniniero1(m) + i_dzien(n, m) i_dninieog1(m) = i_dninieog1(m) + 1 Case 2 jest uwzględniana w liczeniu struktury i_dniniero2(m) = i_dniniero2(m) + i_dzien(n, m) i_dninieog2(m) = i_dninieog2(m) + 1 If i_dninieog2(m) = 31 And i_metoda = 3 Then i_dninieog2(m) = 30 If m = 2 And i_dninieog2(m) = cti_luty And _ i_metoda = 3 Then i_dninieog2(m) = 30 Case 3 jest uwzględn. w licz. strukt. (za mies. 30 dni) i_dniniero3(m) = i_dniniero3(m) + i_dzien(n, m) i_dninieog3(m) = i_dninieog3(m) + 1 If i_dninieog3(m) = 31 Then i_dninieog3(m) = 30 If m = 2 And i_dninieog3(m) = cti_luty Then i_dninieog3(m) = 30 End Select Next j ------------------------------------------------------------------------ Procedura : WymEtat_MiOswz_StrZ_01() Autor : Krzysztof Sługocki; Krzysztof.Slugocki@gmail.com Data wer. : 2014-04-08 Zadanie : Obliczenie wymiaru etatu, miesięcznej struktury zatrudn. oraz osobistej stawki wynagrodzenia zasadniczego Uwagi : Dane są pobierane z arkuszy awn* ------------------------------------------------------------------------ Sub WymEtat_MiOswz_StrZ_01() Dim i As Integer i_metoda = DanPar.Range("D10").Value For i = 1 To 12 If WartZamPlik(str_Folder, str_awn, str_ark, 13 + i, _ 7 + 3 * i_nauczyciel) = 0 Then d_etat(i) = 0 Else d_etat(i) = WartZamPlik(str_Folder, str_awn, str_ark, _ 3
13 + i, 6 + 3 * i_nauczyciel) / WartZamPlik(str_Folder, _ str_awn, str_ark, 13 + i, 7 + 3 * i_nauczyciel) Select Case i_metoda Case 1 d_mswz(i) = WartZamPlik(str_Folder, str_awn, str_ark, _ 13 + i, 5 + 3 * i_nauczyciel) d_strz(i) = Round(d_Etat(i) * (1 - i_dninieog2(i) / _ i_lidnimies(i) - i_dninieog3(i) / 30), cti_zaokr) d_oswz(i) = Round(d_Mswz(i) * (d_etat(i) * _ (1 - i_dninieog2(i) / i_lidnimies(i) - i_dninieog3(i) / _ 30)), cti_zaokrzl) Case 2 d_mswz(i) = WartZamPlik(str_Folder, str_awn, str_ark, _ 13 + i, 5 + 3 * i_nauczyciel) d_strz(i) = Round(d_Etat(i) * (1 - i_dniniero2(i) / _ i_sumadnirob(i) - i_dninieog3(i) / 30), cti_zaokr) d_oswz(i) = Round(d_Mswz(i) * (d_etat(i) * _ (1 - i_dniniero2(i) / i_sumadnirob(i) - i_dninieog3(i) / _ 30)), cti_zaokrzl) Case 3 d_mswz(i) = WartZamPlik(str_Folder, str_awn, str_ark, _ 13 + i, 5 + 3 * i_nauczyciel) d_strz(i) = Round(d_Etat(i) * (1 - i_dninieog2(i) / _ 30 - i_dninieog3(i) / 30), cti_zaokr) d_oswz(i) = Round(d_Mswz(i) * (d_etat(i) * _ (1 - i_dninieog2(i) / 30 - i_dninieog3(i) / 30)), _ cti_zaokrzl) End Select ------------------------------------------------------------------------ Procedura : CzystyObszar_01() Autor : Krzysztof Sługocki; Krzysztof.Slugocki@gmail.com Data wer. : 2014-03-01 Zadanie : Usunięcie wartości komórek z obszaru mormalnej tabeli przed ponownym wypełnieniem danymi Uwagi : obsługuje obszar tabeli w arkuszu "a_*" ------------------------------------------------------------------------ Sub CzystyObszar_01() Dim l_nrwiersza As Long Dim l_nrkolumny As Long With ThisWorkbook.Worksheets(Analiza).Range("A13").Select l_nrwiersza =.UsedRange.Rows.Count l_nrkolumny =.UsedRange.Columns.Count.Range(Selection, Selection.Rows(l_NrWiersza)).Select.Range(Selection, Selection.Columns(l_NrKolumny)).Select Selection.ClearContents.Range("B11").Select 4
End With ------------------------------------------------------------------------ Procedura : DoklObliczStr() Autor : Krzysztof Sługocki; Krzysztof.Slugocki@gmail.com Data wer. : 2014-04-08 Zadanie : Formatowanie wartości struktur zatrudnienia w zależności od wyboru dokładności obliczeń Uwagi : obsługuje obszar tabeli w arkuszu "a_*" ------------------------------------------------------------------------ Sub DoklObliczStr() Columns("D:R").Select Select Case cti_zaokr Case 0 Selection.NumberFormat = "#,##0" Case 1 Selection.NumberFormat = "#,##0.0" Case 2 Selection.NumberFormat = "#,##0.00" Case 3 Selection.NumberFormat = "#,##0.000" Case 4 Selection.NumberFormat = "#,##0.0000" Case 5 Selection.NumberFormat = "#,##0.00000" Case 6 Selection.NumberFormat = "#,##0.000000" Case 7 Selection.NumberFormat = "#,##0.0000000" End Select Range("B13").Select ------------------------------------------------------------------------ Procedura : Analiza_01() Autor : Krzysztof Sługocki; Krzysztof.Slugocki@gmail.com Data wer. : 2014-04-27 Zadanie : Obliczenia wartości "średniorocznych" i wypełnienie danymi tabeli normalnej Uwagi : obsługuje obszar tabeli w arkuszu "a_*" ------------------------------------------------------------------------ Sub Analiza_01() Dim i As Integer Dim d_strz8 As Double Dim d_suma8 As Double Dim d_strz4 As Double Dim d_suma4 As Double 5
Dim d_strz12 As Double Dim d_suma12 As Double Dim d_oswz12 As Double Dim d_sumawyd8 As Double Dim d_sumawyd4 As Double Dim d_sumawyd12 As Double Dim d_wydatki As Double Dim d_sumaoswz As Double Dim i_liczbanauczycieli As Integer Dim i_nrpliku As Integer i_liczbanauczycieli = WartZamPlik(str_Folder, str_awn, str_ark, 11, 3) For i_nauczyciel = 0 To i_liczbanauczycieli - 1 For i = 1 To 12 i_dninieog(i) = 0 i_dniniero(i) = 0 i_dninieog1(i) = 0 i_dniniero1(i) = 0 i_dninieog2(i) = 0 i_dniniero2(i) = 0 i_dninieog3(i) = 0 i_dniniero3(i) = 0 Nieobecnosci_01 WymEtat_MiOswz_StrZ_01 d_suma8 = 0 d_suma4 = 0 d_suma12 = 0 d_sumaoswz = 0 d_sumawyd8 = 0 d_sumawyd4 = 0 d_sumawyd12 = 0 With ThisWorkbook.Worksheets(Analiza).Cells(i_WierszAnalizy + i_nauczyciel, 2).Value = str_ark & _ WartZamPlik(str_Folder, str_awn, str_ark, 11, 5 + 3 * i_nauczyciel).cells(i_wierszanalizy + i_nauczyciel, 3).Value = _ WartZamPlik(str_Folder, str_awn, str_ark, 12, 5 + 3 * i_nauczyciel) If WartZamPlik(str_Folder, str_awn, str_ark & "W", 4, 9) = 1 Then For i = 1 To 12 d_wydatki = WartZamPlik(str_Folder, str_awn, str_ark & "W", _ 13 + i, 5 + 3 * i_nauczyciel).cells(i_wierszanalizy + i_nauczyciel, 36 + i).value = _ d_wydatki If i <= 8 Then d_sumawyd8 = d_sumawyd8 + d_wydatki Else d_sumawyd4 = d_sumawyd4 + d_wydatki d_sumawyd12 = d_sumawyd8 + d_sumawyd4.cells(i_wierszanalizy + i_nauczyciel, 36 + i).value = _ d_sumawyd8.cells(i_wierszanalizy + i_nauczyciel, 37 + i).value = _ 6
d_sumawyd4.cells(i_wierszanalizy + i_nauczyciel, 38 + i).value = _ d_sumawyd12 Else If i_nauczyciel = i_liczbanauczycieli - 1 Then For i = 1 To 12 d_wydatki = WartZamPlik(str_Folder, str_awn, _ str_ark & "W", 30 + i, 17).Cells(i_WierszAnalizy + i_nauczyciel, 36 + i).value = _ d_wydatki If i <= 8 Then d_sumawyd8 = d_sumawyd8 + d_wydatki Else d_sumawyd4 = d_sumawyd4 + d_wydatki d_sumawyd12 = d_sumawyd8 + d_sumawyd4.cells(i_wierszanalizy + i_nauczyciel, 36 + i).value = _ d_sumawyd8.cells(i_wierszanalizy + i_nauczyciel, 37 + i).value = _ d_sumawyd4.cells(i_wierszanalizy + i_nauczyciel, 38 + i).value = _ d_sumawyd12 For i = 1 To 12.Cells(i_WierszAnalizy + i_nauczyciel, 3 + i).value = d_strz(i) If i <= 8 Then d_suma8 = d_suma8 + d_strz(i) Else d_suma4 = d_suma4 + d_strz(i).cells(i_wierszanalizy + i_nauczyciel, 18 + i).value = d_oswz(i) d_sumaoswz = d_sumaoswz + d_oswz(i) d_strz8 = Round(d_Suma8 / 8, cti_zaokr) d_strz4 = Round(d_Suma4 / 4, cti_zaokr) d_strz12 = Round((d_Suma8 + d_suma4) / 12, cti_zaokr) d_oswz12 = Round(d_SumaOswz / 12, cti_zaokrzl).cells(i_wierszanalizy + i_nauczyciel, 16).Value = d_strz8.cells(i_wierszanalizy + i_nauczyciel, 17).Value = d_strz4.cells(i_wierszanalizy + i_nauczyciel, 18).Value = d_strz12.cells(i_wierszanalizy + i_nauczyciel, 31).Value = d_oswz12.cells(i_wierszanalizy + i_nauczyciel, 32).Value = d_sumaoswz.cells(i_wierszanalizy + i_nauczyciel, 33).Value = _ WartZamPlik(str_Folder, str_awn, str_ark, 7, 4).Cells(i_WierszAnalizy + i_nauczyciel, 34).Value = _ WartZamPlik(str_Folder, str_awn, str_ark, 6, 4).Cells(i_WierszAnalizy + i_nauczyciel, 35).Value = _ WartZamPlik(str_Folder, str_awn, str_ark, 8, 4).Cells(i_WierszAnalizy + i_nauczyciel, 36).Value = str_awn.cells(i_wierszanalizy + i_nauczyciel, 1).Value = _ i_wierszanalizy + i_nauczyciel - 12 7
On Error Resume Next.Cells(11, 3).Value = (i_wierszanalizy + i_nauczyciel - 12) / _ i_linaproc Pliki.Range("G4").Value End With _Nauczyciel i_wierszanalizy = i_wierszanalizy + i_nauczyciel ------------------------------------------------------------------------ Procedura : Funkcja WartZamPlik Autor : Krzysztof Sługocki; Krzysztof.Slugocki@gmail.com Data wer. : 2014-04-09 Zadanie : Pobranie wartości z zamkniętego pliku Uwagi : ------------------------------------------------------------------------ Function WartZamPlik(ByVal str_sciezka As String, _ str_folderplik As String, str_arkusz As String, i_nrw As Integer, _ i_nrk As Integer) As Variant Dim str_arg As String WartZamPlik = "" If Right(str_Sciezka, 1) <> "\" Then str_sciezka = str_sciezka & "\" If Dir(str_Sciezka & "\" & str_folderplik) = "" Then Exit Function str_arg = "" & str_sciezka & "[" & str_folderplik & "]" & _ str_arkusz & "!" & Cells(i_nrW, i_nrk).address(true, True, _ xlr1c1) On Error Resume Next WartZamPlik = ExecuteExcel4Macro(str_Arg) End Function ------------------------------------------------------------------------ Procedura : Funkcja WartZamPlikData Autor : Krzysztof Sługocki; Krzysztof.Slugocki@gmail.com Data wer. : 2014-04-09 Zadanie : Pobranie wartości (daty) z zamkniętego pliku Uwagi : ------------------------------------------------------------------------ Function WartZamPlikData(ByVal str_sciezka As String, _ str_folderplik As String, str_arkusz As String, i_nrw As Integer, _ i_nrk As Integer) As Date Dim str_arg As String WartZamPlikData = #12:00:00 AM# If Right(str_Sciezka, 1) <> "\" Then str_sciezka = str_sciezka & "\" If Dir(str_Sciezka & "\" & str_folderplik) = "" Then Exit Function str_arg = "" & str_sciezka & "[" & str_folderplik & "]" & _ str_arkusz & "!" & Cells(i_nrW, i_nrk).address(true, True, _ xlr1c1) On Error Resume Next WartZamPlikData = ExecuteExcel4Macro(str_Arg) End Function 8
------------------------------------------------------------------------ Procedura : AnalizaPliki() Autor : Krzysztof Sługocki; Krzysztof.Slugocki@gmail.com Data wer. : 2014-04-27 Zadanie : Obsługa (procedurą Analiza_01) listy plików Uwagi : integracja wykorzystania wszystkich procedur ------------------------------------------------------------------------ Sub AnalizaPliki() Dim i_liczbaplikow As Integer Dim i As Integer i_liczbaplikow = Pliki.Range("F5").Value str_folder = Pliki.Range("C4").Value cti_zaokr = DanPar.Range("D14").Value dokładność obliczeń (struktura) str_ark = ThisWorkbook.Worksheets(Analiza).Range("B11").Value i_wierszanalizy = 13 CzystyObszar_01 Dni_01 DoklObliczStr For i = 1 To i_liczbaplikow str_awn = Pliki.Cells(6 + i, 1).Value If str_awn <> "" Then Analiza_01 4.1.2. Makra modułu Analiza ------------------------------------------------------------------------- Procedura : AnalizaNS (uaktywniana przyciskiem w arkuszu "a_ns" Autor : Krzysztof Sługocki; Krzysztof.Slugocki@gmail.com Data : 2014-04-27 Zadanie : Pobranie danych dotyczących naucz. stażystów z arkuszy pozyskania danych (awn*); wyliczenie struktur zatrudnienia; wyliczenie osobistych stawek wynagrodzenia zasadniczego. Uwagi : ------------------------------------------------------------------------- Sub AnalizaNS() On Error GoTo AnalizaNS_Error Analiza = "a_ns" i_linaproc = Pliki.Range("G4").Value AnalizaPliki On Error GoTo 0 Exit Sub AnalizaNS_Error: MsgBox "Error " & Err.Number & " (" & Err.Description & ") w AnalizaNS" 9
------------------------------------------------------------------------- Procedura : AnalizaNK (uaktywniana przyciskiem w arkuszu "a_nk" Autor : Krzysztof Sługocki; Krzysztof.Slugocki@gmail.com Data : 2014-04-27 Zadanie : Pobranie danych dotyczących naucz. kontraktowych z arkuszy pozyskania danych (awn*); wyliczenie struktur zatrudnienia; wyliczenie osobistych stawek wynagrodzenia zasadniczego. Uwagi : ------------------------------------------------------------------------- Sub AnalizaNK() On Error GoTo AnalizaNK_Error Analiza = "a_nk" i_linaproc = Pliki.Range("H4").Value AnalizaPliki On Error GoTo 0 Exit Sub AnalizaNK_Error: MsgBox "Error " & Err.Number & " (" & Err.Description & ") w AnalizaNK" ------------------------------------------------------------------------- Procedura : AnalizaNM (uaktywniana przyciskiem w arkuszu "a_nm" Autor : Krzysztof Sługocki; Krzysztof.Slugocki@gmail.com Data : 2014-04-27 Zadanie : Pobranie danych dotyczących naucz. mianowanych z arkuszy pozyskania danych (awn*); wyliczenie struktur zatrudnienia; wyliczenie osobistych stawek wynagrodzenia zasadniczego. Uwagi : ------------------------------------------------------------------------- Sub AnalizaNM() On Error GoTo AnalizaNM_Error Analiza = "a_nm" i_linaproc = Pliki.Range("I4").Value AnalizaPliki On Error GoTo 0 Exit Sub AnalizaNM_Error: MsgBox "Error " & Err.Number & " (" & Err.Description & ") w AnalizaNM" ------------------------------------------------------------------------- Procedura : AnalizaND (uaktywniana przyciskiem w arkuszu "a_nd" Autor : Krzysztof Sługocki; Krzysztof.Slugocki@gmail.com Data : 2014-04-27 Zadanie : Pobranie danych dotyczących naucz. dyplomowanych z arkuszy pozyskania danych (awn*); wyliczenie struktur zatrudnienia; wyliczenie osobistych stawek wynagrodzenia zasadniczego. 10
Uwagi : ------------------------------------------------------------------------- Sub AnalizaND() On Error GoTo AnalizaND_Error Analiza = "a_nd" i_linaproc = Pliki.Range("J4").Value AnalizaPliki On Error GoTo 0 Exit Sub AnalizaND_Error: MsgBox "Error " & Err.Number & " (" & Err.Description & ") w AnalizaND" 4.1.3. Makra modułu AnalizaJDU Dim DaneA As String Dim DaneJDU As String ------------------------------------------------------------------------- Procedura : AnalizaJDU() (uaktywniana przyciskiem w arkuszach "jdu_*") Autor : Krzysztof Sługocki; Krzysztof.Slugocki@gmail.com Data : 2014-05-08 Zadanie : Pobranie danych dotyczących nauczycieli z arkuszy "a_*"; Wyliczenie jednorazowych dodatków uzupełniających. Uwagi : wybór obsługi grupy naucz., wyczyszczenie obszaru tabeli ------------------------------------------------------------------------- Sub AnalizaJDU() On Error GoTo AnalizaJDU_ND_Error DaneA = "a_" & Range("J4") DaneJDU = "jdu_" & Range("J4") CzystyObszar_jdu jdu_1 On Error GoTo 0 Exit Sub AnalizaJDU_ND_Error: MsgBox "Error " & Err.Number & " (" & Err.Description & ") w Analiza" ------------------------------------------------------------------------- Procedura : jdu_1() Autor : Krzysztof Sługocki; Krzysztof.Slugocki@gmail.com Data : 2014-05-08 Zadanie : Pobranie danych dotyczących nauczycieli z arkuszy "a_*"; Wyliczenie jednorazowych dodatków uzupełniających. Uwagi : centralna część procedury AnalizaJDU() ------------------------------------------------------------------------- Sub jdu_1() Dim l_maxwiersz As Long 11
Dim i As Long Dim i_okrbaz As Integer ThisWorkbook.Worksheets(DaneA).Select Worksheets(DaneA).Range("A12").Select l_maxwiersz = WorksheetFunction.Max(Range("A13:A9999")) ThisWorkbook.Worksheets(DaneJDU).Select For i = 1 To l_maxwiersz Cells(22 + i, 2) = Sheets(DaneA).Cells(12 + i, 1) Cells(22 + i, 3) = Sheets(DaneA).Cells(12 + i, 2) Cells(22 + i, 4) = Sheets(DaneA).Cells(12 + i, 3) Cells(22 + i, 5) = Sheets(DaneA).Cells(12 + i, 33) Cells(22 + i, 6) = Sheets(DaneA).Cells(12 + i, 36) Cells(22 + i, 8) = Cells(22 + i, 4) & " (" & Cells(22 + i, 3) _ & "/" & Cells(22 + i, 2) & "/" & Cells(22 + i, 5) & "/" _ & Cells(22 + i, 6) & ")" Cells(22 + i, 10) = Sheets(DaneA).Cells(12 + i, 32) i_okrbaz = Sheets("DanPar").Range("J21").Value Select Case i_okrbaz Case 2 If Cells(16, 11) < 0 Then Cells(22 + i, 11) = -Round(Cells(16, 11) * _ Cells(22 + i, 10) / Cells(15, 11), cti_zaokrzl) Else Cells(22 + i, 11) = 0 Case 1 If Cells(18, 11) < 0 Then Cells(22 + i, 11) = -Round(Cells(18, 11) * _ Cells(22 + i, 10) / Cells(15, 11), cti_zaokrzl) Else Cells(22 + i, 11) = 0 End Select ------------------------------------------------------------------------- Procedura : CzystyObszar_jdu() Autor : Krzysztof Sługocki; Krzysztof.Slugocki@gmail.com Data : 2014-05-08 Zadanie : Wyczyszczenie obszaru danych w arkuszu "jdu" Uwagi : ------------------------------------------------------------------------- Sub CzystyObszar_jdu() Dim l_nrwiersza As Long Dim l_nrkolumny As Long ThisWorkbook.Worksheets(DaneJDU).Select Worksheets(DaneJDU).Range("A23").Select l_nrwiersza = Pliki.UsedRange.Rows.Count l_nrkolumny = Pliki.UsedRange.Columns.Count 12
Worksheets(DaneJDU).Range(Selection, _ Selection.Rows(l_NrWiersza)).Select Worksheets(DaneJDU).Range(Selection, _ Selection.Columns(l_NrKolumny)).Select Selection.ClearContents Worksheets(DaneJDU).Range("A23").Select 4.1.4. Makra modułu ObslugaPlikow ------------------------------------------------------------------------- Procedura : ListaPlikow() Autor : Krzysztof Sługocki; Krzysztof.Slugocki@gmail.com Data : 2014-05-06 Zadanie : Stworzenie listy plików z danymi do analizy Uwagi : ------------------------------------------------------------------------- Sub ListaPlikow() Dim str_folder As String Dim str_folderplik As String Dim r As Integer Dim v_wartkom As Variant Dim str_lista() As String Dim i_licznik As Integer Dim i As Integer CzystyObszar_02 Pliki.Range("C4").Value = "=FOLDER()" str_folder = Pliki.Range("C4").Value tworzy listę skoroszytów w folderze str_folder i_licznik = 0 str_folderplik = Dir(str_Folder & "\" & "*.*") While str_folderplik <> "" i_licznik = i_licznik + 1 ReDim Preserve str_lista(1 To i_licznik) str_lista(i_licznik) = str_folderplik str_folderplik = Dir Wend If i_licznik = 0 Then Exit Sub pobiera wartość ze wskazanej komórki z każdego pliku z listy r = 6 For i = 1 To i_licznik r = r + 1 Cells(r, 2).Value = i Cells(r, 3).Formula = str_lista(i) If Left(Cells(r, 3).Value, 3) <> "awn" _ Or Right(Cells(r, 3).Value, 3) <> "xls" _ Or Left(Cells(r, 3).Value, 6) = "awn000" Then Cells(r, 5).Value = "N" Else Cells(r, 6).Value = Cells(r, 3).Value Cells(r, 5).Value = "T" 13
Cells(r, 4).Formula = WartzNieOtwPlik(str_Folder, _ str_lista(i), "Podmiot", "D7") Cells(r, 7).Formula = WartzNieOtwPlik(str_Folder, _ str_lista(i), "ns", "C11") Cells(r, 8).Formula = WartzNieOtwPlik(str_Folder, _ str_lista(i), "nk", "C11") Cells(r, 9).Formula = WartzNieOtwPlik(str_Folder, _ str_lista(i), "nm", "C11") Cells(r, 10).Formula = WartzNieOtwPlik(str_Folder, _ str_lista(i), "nd", "C11") ------------------------------------------------------------------------- Procedura : Funkcja WartzNieOtwPlik Autor : Krzysztof Sługocki; Krzysztof.Slugocki@gmail.com Data : 2014-05-06 Zadanie : Pobieranie danych z zamkniętyvh plików Uwagi : na podstawie funkcji z modułu "Glowny" ------------------------------------------------------------------------- Function WartzNieOtwPlik(ByVal str_sciezka As String, str_folderplik _ As String, str_arkusz As String, str_komorka As String) As Variant Dim str_arg As String WartzNieOtwPlik = "" If Right(str_Sciezka, 1) <> "\" Then str_sciezka = str_sciezka & "\" If Dir(str_Sciezka & "\" & str_folderplik) = "" Then Exit Function str_arg = "" & str_sciezka & "[" & str_folderplik & "]" & _ str_arkusz & "!" & Range(str_Komorka).Address(True, True, xlr1c1) On Error Resume Next WartzNieOtwPlik = ExecuteExcel4Macro(str_Arg) End Function ------------------------------------------------------------------------- Procedura : Funkcja FOLDER() Autor : Krzysztof Sługocki; Krzysztof.Slugocki@gmail.com Data : 2014-04-03 Zadanie : Identyfikacja folderu Uwagi : ------------------------------------------------------------------------- Function FOLDER() Application.Volatile Thrue FOLDER = Application.Caller.Parent.Parent.Path End Function ------------------------------------------------------------------------- Procedura : CzystyObszar() Autor : Krzysztof Sługocki; Krzysztof.Slugocki@gmail.com Data : 2014-04-03 Zadanie : Wyczyszczenie obszaru danych w arkuszu "Pliki" 14
Uwagi : ------------------------------------------------------------------------- Sub CzystyObszar_02() Dim l_nrwiersza As Long Dim l_nrkolumny As Long Pliki.Range("B7").Select l_nrwiersza = Pliki.UsedRange.Rows.Count l_nrkolumny = Pliki.UsedRange.Columns.Count Pliki.Range(Selection, Selection.Rows(l_NrWiersza)).Select Pliki.Range(Selection, Selection.Columns(l_NrKolumny)).Select Selection.ClearContents Pliki.Range("B7").Select ------------------------------------------------------------------------- Procedura : GenPliki() Autor : Krzysztof Sługocki; Krzysztof.Slugocki@gmail.com Data : 2014-04-03 Zadanie : Generator plików pozyskania danych Uwagi : Kopiowane są pliki wzorcowe ------------------------------------------------------------------------- Sub GenPlik() Dim i_nrp As Integer Dim i_nrk As Integer Dim i_metoda As Integer Dim i As Integer i_nrp = DanPar.Range("D17") i_nrk = DanPar.Range("D18") i_metoda = DanPar.Range("D10") Pliki.Range("C4").Value = "=FOLDER()" Workbooks.Open Filename:=Pliki.Range("C4") & "\LNID000.xls" For i = i_nrp To i_nrk ActiveWorkbook.SaveAs Filename:=Pliki.Range("C4") & "\LNID" _ & i & ".xls", FileFormat:=xlExcel8 ActiveWindow.Close Workbooks.Open Filename:=Pliki.Range("C4") & "\awn000.xls" For i = i_nrp To i_nrk ActiveWorkbook.Worksheets("Podmiot").Range("D9").Value = i ActiveWorkbook.Worksheets("Podmiot").Range("E11").Value = i_metoda ActiveWorkbook.SaveAs Filename:=Pliki.Range("C4") & "\awn" & i _ & ".xls", FileFormat:=xlExcel8 ActiveWindow.Close 15
4.1.5. Makra modułu Raporty Dim DaneR As String ------------------------------------------------------------------------- Procedura : Raport_RW (uaktywniana przyciskiem w arkuszu "RW" Autor : Krzysztof Sługocki; Krzysztof.Slugocki@gmail.com Data : 2014-05-28 Zadanie : Aktualizacja tabeli przestawnej "Raport_RW" w arkuszu "RW" dla wybranej grupy awansu zawodowego. Uwagi : ------------------------------------------------------------------------- Sub Raport_RW() On Error GoTo Raport_RW_Error DaneR = "a_" & Range("M2") & "R" MsgBox DaneR ActiveSheet.PivotTables("Raport_RW").ChangePivotCache ActiveWorkbook. _ PivotCaches.Create(SourceType:=xlDatabase, SourceData:=DaneR, _ Version:=xlPivotTableVersion12) ActiveWorkbook.RefreshAll On Error GoTo 0 Exit Sub Raport_RW_Error: MsgBox "Error " & Err.Number & " (" & Err.Description & ") w Raport_RW" ------------------------------------------------------------------------- Procedura : Raport_RS (uaktywniana przyciskiem w arkuszu "RS" Autor : Krzysztof Sługocki; Krzysztof.Slugocki@gmail.com Data : 2014-05-28 Zadanie : Aktualizacja tabeli przestawnej "Raport_RS" w arkuszu "RS" dla wybranej grupy awansu zawodowego. Uwagi : ------------------------------------------------------------------------- Sub Raport_RS() On Error GoTo Raport_RS_Error DaneR = "a_" & Range("O2") & "R" MsgBox DaneR ActiveSheet.PivotTables("Raport_RS").ChangePivotCache ActiveWorkbook. _ PivotCaches.Create(SourceType:=xlDatabase, SourceData:=DaneR, _ Version:=xlPivotTableVersion12) ActiveWorkbook.RefreshAll On Error GoTo 0 Exit Sub Raport_RS_Error: MsgBox "Error " & Err.Number & " (" & Err.Description & ") w Raport_RS" ------------------------------------------------------------------------- 16
Procedura : Raport_jdu (uaktywniana przyciskiem w arkuszu "Rjdu" Autor : Krzysztof Sługocki; Krzysztof.Slugocki@gmail.com Data : 2014-05-28 Zadanie : Aktualizacja tabeli przestawnej "Raport_jdu" w arkuszu "Rjdu" dla wybranej grupy awansu zawodowego. Uwagi : ------------------------------------------------------------------------- Sub Raport_jdu() On Error GoTo Raport_jdu_Error DaneR = "jdu_" & Range("F2") & "R" MsgBox DaneR ActiveSheet.PivotTables("Raport_jdu").ChangePivotCache ActiveWorkbook. _ PivotCaches.Create(SourceType:=xlDatabase, SourceData:=DaneR, _ Version:= xlpivottableversion12) ActiveWorkbook.RefreshAll On Error GoTo 0 Exit Sub Raport_jdu_Error: MsgBox "Error " & Err.Number & " (" & Err.Description & ") w Raport_jdu" 17