diff --git a/_del/task4.del/.editorconfig b/_del/task4.del/.editorconfig new file mode 100644 index 0000000..c1017ab --- /dev/null +++ b/_del/task4.del/.editorconfig @@ -0,0 +1,12 @@ +# EditorConfig is awesome: https://EditorConfig.org + +# top-most EditorConfig file +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = latin1 +trim_trailing_whitespace = true +insert_final_newline = true diff --git a/_del/task4.del/dist/Expense_Report.xlsm b/_del/task4.del/dist/Expense_Report.xlsm new file mode 100644 index 0000000..3f8f1bb Binary files /dev/null and b/_del/task4.del/dist/Expense_Report.xlsm differ diff --git a/_del/task4.del/dist/step.png b/_del/task4.del/dist/step.png new file mode 100644 index 0000000..1d22f34 --- /dev/null +++ b/_del/task4.del/dist/step.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8d540dc41a28598e42dc6725df4ed1d2ef3643bb88cbf60733fe75a303d7622f +size 32046 diff --git a/_del/task4.del/from_client/Expense Report_original.xlsx b/_del/task4.del/from_client/Expense Report_original.xlsx new file mode 100644 index 0000000..51e6354 Binary files /dev/null and b/_del/task4.del/from_client/Expense Report_original.xlsx differ diff --git a/_del/task4.del/notes.md b/_del/task4.del/notes.md new file mode 100644 index 0000000..e69de29 diff --git a/_del/task4.del/source/Expense_Report.xlsm b/_del/task4.del/source/Expense_Report.xlsm new file mode 100644 index 0000000..3f8f1bb Binary files /dev/null and b/_del/task4.del/source/Expense_Report.xlsm differ diff --git a/_del/task4.del/source/dev.bat b/_del/task4.del/source/dev.bat new file mode 100644 index 0000000..c77160c --- /dev/null +++ b/_del/task4.del/source/dev.bat @@ -0,0 +1 @@ +xlwings vba edit --file .\Expense_Report.xlsm diff --git a/_del/task4_o/from_client/Expense Report.xlsx b/_del/task4_o/from_client/Expense Report.xlsx new file mode 100644 index 0000000..51e6354 Binary files /dev/null and b/_del/task4_o/from_client/Expense Report.xlsx differ diff --git a/_del/task4_o/notes.md b/_del/task4_o/notes.md new file mode 100644 index 0000000..e69de29 diff --git a/_del/task4_o/source/Expense_Report.xlsx b/_del/task4_o/source/Expense_Report.xlsx new file mode 100644 index 0000000..51e6354 Binary files /dev/null and b/_del/task4_o/source/Expense_Report.xlsx differ diff --git a/gitUpdate.bat b/gitUpdate.bat new file mode 100644 index 0000000..688de66 --- /dev/null +++ b/gitUpdate.bat @@ -0,0 +1,7 @@ +git status . + +@pause + +git add . +git commit -m"update natalie0312," +start git push \ No newline at end of file diff --git a/meta.md b/meta.md new file mode 100644 index 0000000..94d783c --- /dev/null +++ b/meta.md @@ -0,0 +1,15 @@ +--- +tags: + - excel + - vba + - accounting +--- + +# natalie0312, maxchan0823 + +## Things to note + +個 user 識比 requirements, +但係要問清楚佢有幾多條 record + +e.g. 6000 row record ? diff --git a/task1/Example_file.xlsx b/task1/Example_file.xlsx new file mode 100644 index 0000000..a49206e Binary files /dev/null and b/task1/Example_file.xlsx differ diff --git a/task1/Q1.png b/task1/Q1.png new file mode 100644 index 0000000..9e24e77 --- /dev/null +++ b/task1/Q1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:36b0fce830dadaedbc58d86ca8e46449ba4b38dcc5f391b536f0c222ae7c0117 +size 521404 diff --git a/task1/Q2.png b/task1/Q2.png new file mode 100644 index 0000000..24a9c23 --- /dev/null +++ b/task1/Q2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:54d3297ee9314130fcda6af467fed3939af5989707a7a16017c6b21874e7b5cb +size 314546 diff --git a/task1/Q3.png b/task1/Q3.png new file mode 100644 index 0000000..8a665b0 --- /dev/null +++ b/task1/Q3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ca389f78067650ab72be235460ada834da4d25dd5efe44bbdddf636dfb062591 +size 302278 diff --git a/task1/QnA.md b/task1/QnA.md new file mode 100644 index 0000000..c8f882e --- /dev/null +++ b/task1/QnA.md @@ -0,0 +1,5 @@ +你好,有小小野想問 + +Q1: "NA" 需要嗎? +Q2: Debit / credit ? +Q3: 8600 / 8700 ? diff --git a/task1/ThisWorkbook.cls b/task1/ThisWorkbook.cls new file mode 100644 index 0000000..a43ab81 --- /dev/null +++ b/task1/ThisWorkbook.cls @@ -0,0 +1,568 @@ +Option Explicit +Dim pres_right As Integer + +Dim first_row As Integer +Dim current_row As Integer +Dim last_check_row As Integer + +Dim amount_in_func As String +Dim starting_cell As String + +Dim grand_total_curr as currency +Dim grand_total_str as string + +Dim amount_in_func_curr as currency +Dim amount_in_func_str as string + +Dim pcco_str as string + +Dim PCCO_COL as string +Dim ACCOUNT_COL as string + +Dim AMOUNT_IN_FUNC_COL as string +Dim GRAND_TOTAL_COL As String +Dim DEBIT_COL as string +Dim CREDIT_COL as string +Dim REMARKS_COL as string + +Dim ADJUSTMENT_WORKSHEET as string +Dim ADJUSTMENT_TEST_WORKSHEET as string + +Dim AC_1020 as string +Dim AC_8600 as string +Dim AC_8601 as string +Dim AC_8700 as string +Dim AC_8701 as string +Dim AC_1311 as string +Dim AC_1375 as string +Dim AC_2020 as string + +Dim current_row_value_valid as boolean +Dim check_next_row_ready as boolean + +function writeRemarks(current_row as integer, remarks as string) + Worksheets(ADJUSTMENT_WORKSHEET).Range(REMARKS_COL & CStr(current_row)).Value = remarks +end function + +function writeCredit(current_row as integer, credit as variant) + Worksheets(ADJUSTMENT_WORKSHEET).Range(CREDIT_COL & CStr(current_row)).Value = abs(credit) + Worksheets(ADJUSTMENT_WORKSHEET).Range(CREDIT_COL & CStr(current_row)).NumberFormat = "#,##0.00" + +end function + +function writeDebit(current_row as integer, debit as variant) + Worksheets(ADJUSTMENT_WORKSHEET).Range(DEBIT_COL & CStr(current_row)).Value = abs(debit) + Worksheets(ADJUSTMENT_WORKSHEET).Range(DEBIT_COL & CStr(current_row)).NumberFormat = "#,##0.00" +end function + +function writeAccount(current_row as integer, account as string) + Worksheets(ADJUSTMENT_WORKSHEET).Range(ACCOUNT_COL & CStr(current_row)).Value = account +end function + +function getPCCO(current_row as integer) + Dim output as string + output = Worksheets(ADJUSTMENT_WORKSHEET).Range(PCCO_COL & CStr(current_row)).Value + getPCCO = output +end function + + +function getGrandTotal(current_row as integer) + Dim output as string + output = Worksheets(ADJUSTMENT_WORKSHEET).Range(GRAND_TOTAL_COL & CStr(current_row)).text + getGrandTotal = output +end function + +function getAmountInFunc(current_row as integer) + Dim output as string + output = Worksheets(ADJUSTMENT_WORKSHEET).Range(AMOUNT_IN_FUNC_COL & CStr(current_row)).Value + debug.print output + getAmountInFunc = output +end function + +function checkOutputCellReady(current_row as integer) + Dim output as boolean + output = True + + Dim account_cell as variant + account_cell = Worksheets(ADJUSTMENT_WORKSHEET).Range(ACCOUNT_COL & CStr(current_row)) + + if (IsEmpty(account_cell) = False) then + output = False + end if + + checkOutputCellReady = output +end function + + +function checkCurrentRowValueValid(current_row as integer) + Dim output as boolean + output = True + + if (checkIfGrandTotalRefNotFound(current_row) = True) then + debug.print "grand total ref not found" + + output = False + end if + + Dim grand_total_str as string + dim amount_in_func_str as string + dim pcco_str as string + + grand_total_str = getGrandTotal(current_row) + amount_in_func_str = getAmountInFunc(current_row) + pcco_str = getPCCO(current_row) + + ' Debug.print InStr(pcco_str, "Error") >= 0 + ' Debug.print InStr(amount_in_func_str, "N/A") >= 0 + ' Debug.print InStr(grand_total_str, "N/A") >= 0 + + if (trim(pcco_str) = "" or InStr(pcco_str, "N/A") > 0 or InStr(pcco_str, "Error") > 0) then + output = False + end if + + if (trim(amount_in_func_str) = "" or InStr(amount_in_func_str, "N/A") > 0 or InStr(amount_in_func_str, "Error") > 0) then + output = False + end if + + if (trim(grand_total_str) = "" or InStr(grand_total_str, "N/A") > 0 or InStr(grand_total_str, "Error") > 0) then + output = False + end if + + checkCurrentRowValueValid = output +end function + +function checkFullFillCasePCCOCode_P1375000Situation_1(grand_total as currency, amount_in_func as currency) + ' ### Special case (if PCCO Code = P1375000): + ' ### Situation 1: + ' if Grand total + amount in func > 0 (missing example) + + checkFullFillCasePCCOCode_P1375000Situation_1 = (grand_total + amount_in_func > 0) +end function + +function checkFullFillCasePCCOCode_P1375000Situation_2(grand_total as currency, amount_in_func as currency) + ' ### Special case (if PCCO Code = P1375000): + ' ### Situation 2: + ' if Grand total + amount in func < 0 (row 21) + + checkFullFillCasePCCOCode_P1375000Situation_2 = (grand_total + amount_in_func < 0) +end function + +function checkFullFillCasePCCOCode_P1375000Situation_3(grand_total as currency, amount_in_func as currency) + ' ### Special case (if PCCO Code = P1375000): + ' ### Situation 3: + ' if Grand total + amount in func = 0 + ' - do nothing + + checkFullFillCasePCCOCode_P1375000Situation_3 = (grand_total + amount_in_func = 0) +end function + +function checkFullFillCaseCommonSituation_1(grand_total as currency, amount_in_func as currency) + ' ### Situation 1: + ' if Grand total + amount in func > 0 (row 8 ?) + checkFullFillCaseCommonSituation_1 = (grand_total + amount_in_func > 0) +end function + +function checkFullFillCaseCommonSituation_2(grand_total as currency, amount_in_func as currency) + ' ### Situation 2: + ' if Grand total + amount in func < 0 (row 8 ?)' + checkFullFillCaseCommonSituation_2 = (grand_total + amount_in_func < 0) +end function + +function checkFullFillCaseCommonSituation_3(grand_total as currency, amount_in_func as currency) + ' ### Situation 3: + ' if Grand total + amount in func = 0 + checkFullFillCaseCommonSituation_3 = (grand_total + amount_in_func = 0) +end function + +function checkIfReferenceNotFound(cell as variant) + Dim test_text as variant + test_text = cell.text + checkIfReferenceNotFound = (InStr(test_text, "#REF!") > 0) +end function + +function checkIfGrandTotalRefNotFound(current_row as integer) + checkIfGrandTotalRefNotFound = checkIfReferenceNotFound (Worksheets(ADJUSTMENT_WORKSHEET).Range(GRAND_TOTAL_COL & CStr(current_row))) +end function + +function applyCommonSituation_1(current_row as integer) + Dim net_var as variant + Dim grand_total_var as variant + Dim amount_in_func_var as variant + + grand_total_var = CDec(getGrandTotal(current_row)) + amount_in_func_var = CDec(getAmountInFunc(current_row)) + net_var = grand_total_var + amount_in_func_var + +' current row +' - Account column: A1311, Debit column: Grand Total+amount in func + writeAccount current_row, AC_1311 + writeDebit current_row, net_var + +' - add row: +' - account:1020, +' - debit column: Grand Total+amount in func + insertNewRowBelow current_row + current_row = current_row+ 1 + writeAccount current_row, AC_1020 + writeDebit current_row, net_var + +' - add row: +' - account:NA8600, +' - debit: grand total + amount in func + insertNewRowBelow current_row + current_row = current_row+ 1 + writeAccount current_row, AC_8600 + writeDebit current_row, net_var + +' - add row: +' - account NA8601, +' - credit: grand total + amount in func + insertNewRowBelow current_row + current_row = current_row+ 1 + writeAccount current_row, AC_8601 + writeCredit current_row, net_var + + applyCommonSituation_1 = True +end function + +function applyCommonSituation_2(current_row as integer) + Dim net_var as variant + Dim grand_total_var as variant + Dim amount_in_func_var as variant + + grand_total_var = CDec(getGrandTotal(current_row)) + amount_in_func_var = CDec(getAmountInFunc(current_row)) + net_var = grand_total_var + amount_in_func_var + +' if Grand total + amount in func < 0 (row 8 ?) +' - Account column: A1311, +' - Credit column: Grand Total+amount in func + writeAccount current_row, AC_1311 + writeCredit current_row, net_var + +' - add row: +' - account:1020, +' - credit column: Grand Total+amount in func + insertNewRowBelow current_row + current_row = current_row+ 1 + writeAccount current_row, AC_1020 + writeCredit current_row, net_var + +' - add row: +' - account:NA8700, +' - credit: grand total + amount in func + insertNewRowBelow current_row + current_row = current_row+ 1 + writeAccount current_row, AC_8700 + writeCredit current_row, net_var + +' - add row: +' - account NA8701, +' - debit: grand total + amount in func + insertNewRowBelow current_row + current_row = current_row+ 1 + writeAccount current_row, AC_8701 + writeDebit current_row, net_var + + applyCommonSituation_2 = True +end function + +function applyCommonSituation_3(current_row as integer) +' if Grand total + amount in func = 0 +' - do nothing + applyCommonSituation_3 = True +end function + +function applyPcco1375Situation_1(current_row as integer) + Dim net_var as variant + Dim grand_total_var as variant + Dim amount_in_func_var as variant + + grand_total_var = CDec(getGrandTotal(current_row)) + amount_in_func_var = CDec(getAmountInFunc(current_row)) + net_var = grand_total_var + amount_in_func_var + + ' - Account + ' - column: P1375, + ' - Debit column: Grand Total+amount in func + writeAccount current_row, AC_1375 + writeDebit current_row, net_var + + ' - add row: + ' - account:2020, + ' - debit column: Grand Total+amount in func + insertNewRowBelow current_row + current_row = current_row+ 1 + writeAccount current_row, AC_2020 + writeDebit current_row, net_var + + ' - add row: + ' - account:NA8600, + ' - debit: grand total + amount in func + insertNewRowBelow current_row + current_row = current_row+ 1 + writeAccount current_row, AC_8600 + writeDebit current_row, net_var + + ' - add row: + ' - account NA8601, + ' - credit: grand total + amount in func + insertNewRowBelow current_row + current_row = current_row+ 1 + writeAccount current_row, AC_8601 + writeCredit current_row, net_var + + applyPcco1375Situation_1 = True +end function + +function applyPcco1375Situation_2(current_row as integer) + Dim net_var as variant + Dim grand_total_var as variant + Dim amount_in_func_var as variant + + grand_total_var = CDec(getGrandTotal(current_row)) + amount_in_func_var = CDec(getAmountInFunc(current_row)) + net_var = grand_total_var + amount_in_func_var + +' - Account +' - column: P1375, +' - Credit column: Grand Total+amount in func + writeAccount current_row, AC_1375 + writeCredit current_row, net_var + +' - add row: +' - account:2020, +' - credit column: Grand Total+amount in func + insertNewRowBelow current_row + current_row = current_row+ 1 + writeAccount current_row, AC_2020 + writeCredit current_row, net_var + +' - add row: +' - account:8700, +' - credit: grand total + amount in func + insertNewRowBelow current_row + current_row = current_row+ 1 + writeAccount current_row, AC_8700 + writeCredit current_row, net_var + +' - add row: +' - account 8701, +' - debit: grand total + amount in func + insertNewRowBelow current_row + current_row = current_row+ 1 + writeAccount current_row, AC_8701 + writeDebit current_row, net_var + + applyPcco1375Situation_2= True +end function + +function applyPcco1375Situation_3(current_row as integer) +' - do nothing + applyPcco1375Situation_3 = True +end function + + +Sub test() + ' Debug.Assert True = isCurrentRowNeedToProcess("7") + ' Debug.Assert False = isCurrentRowNeedToProcess("180") + ' debug.assert False = isAllDone ("7") + ' debug.assert True = isAllDone ("180") + + ' debug.assert False = checkFullFillCaseCommonSituation_1(-10,1) + ' debug.assert False = checkFullFillCaseCommonSituation_1(1,-10) + ' debug.assert False = checkFullFillCaseCommonSituation_1(-10,-10) + ' debug.assert False = checkFullFillCaseCommonSituation_1(0,0) + ' debug.assert True = checkFullFillCaseCommonSituation_1(0,1) + ' debug.assert True = checkFullFillCaseCommonSituation_1(1,0) + ' debug.assert True = checkFullFillCaseCommonSituation_1(1,1) + + ' debug.assert True = checkFullFillCaseCommonSituation_2(-10,1) + ' debug.assert True = checkFullFillCaseCommonSituation_2(1,-10) + ' debug.assert True = checkFullFillCaseCommonSituation_2(-10,-10) + ' debug.assert False = checkFullFillCaseCommonSituation_2(0,0) + ' debug.assert False = checkFullFillCaseCommonSituation_2(0,1) + ' debug.assert False = checkFullFillCaseCommonSituation_2(1,0) + ' debug.assert False = checkFullFillCaseCommonSituation_2(1,1) + + ' debug.assert True = checkFullFillCaseCommonSituation_3(0,0) + ' debug.assert False = checkFullFillCaseCommonSituation_3(1,1) + ' debug.assert False = checkFullFillCaseCommonSituation_3(-10,-10) + ' debug.assert False = checkFullFillCaseCommonSituation_3(1,0) + ' debug.assert False = checkFullFillCaseCommonSituation_3(0,1) + + ' debug.print Worksheets("Adjustment_TEST").Range("G86") + + init + + current_row = 29 + ' amount_in_func_str = getAmountInFunc(current_row) + ' pcco_str = getPCCO(current_row) + + ' debug.print current_row + ' debug.print grand_total_str + ' debug.print checkIfGrandTotalRefNotFound(current_row) + debug.print checkCurrentRowValueValid(current_row) + + ' current_row_value_valid = False + ' current_row_value_valid = checkCurrentRowValueValid(pcco_str, amount_in_func_str, grand_total_str) + ' check_next_row_ready = False + ' check_next_row_ready = checkOutputCellReady(current_row) + +End Sub + +Function getLastCheckRow(first_row As Integer) + getLastCheckRow = first_row + 10 +End Function + +function insertNewRowBelow(current_row as integer) + Range("A"¤t_row+1).EntireRow.Insert +end function + +function isAllDone(input_row as integer) + Dim cell_value As Currency + Dim output as Boolean + Dim i as integer + output = true + + last_check_row = getLastCheckRow(input_row) + For i = input_row To last_check_row + if (isCurrentRowNeedToProcess(i) = True) then + output = false + Exit For + end if + Next i + + isAllDone = output +end function + +Function isCurrentRowNeedToProcess(input_row as integer) + Dim output As Boolean + Dim cell_value As Currency + Dim input_cell as string + input_cell = GRAND_TOTAL_COL & input_row + + isCurrentRowNeedToProcess = not(IsEmpty(Worksheets(ADJUSTMENT_WORKSHEET).Range(input_cell).Value)) +End Function + +Sub init() + pres_right = 111 + first_row = 7 + current_row = first_row + last_check_row = getLastCheckRow(first_row) + + + GRAND_TOTAL_COL = "G" + amount_in_func = "J" + starting_cell = GRAND_TOTAL_COL & first_row + PCCO_COL = "I" + AMOUNT_IN_FUNC_COL = "J" + DEBIT_COL = "N" + CREDIT_COL= "O" + ACCOUNT_COL = "M" + REMARKS_COL = "Q" + + AC_1020 = "AC_1020" + AC_8600 = "AC_8600" + AC_8601 = "AC_8601" + AC_8700 = "AC_8700" + AC_8701 = "AC_8701" + AC_1311 = "AC_1311" + AC_1375 = "AC_1375" + AC_2020 = "AC_2020" + + ADJUSTMENT_WORKSHEET = "Adjustment_TEST" + ' ADJUSTMENT_WORKSHEET = "Adjustment" + +end sub + +Sub Main() + init + + While isAllDone(current_row) = False + debug.print "processing row: " & current_row + debug.print checkCurrentRowValueValid(current_row) + + + + current_row_value_valid = False + current_row_value_valid = checkCurrentRowValueValid(current_row) + check_next_row_ready = False + check_next_row_ready = checkOutputCellReady(current_row) + + + + if (current_row_value_valid and check_next_row_ready) then + ' input considered valid after this line + + Dim grand_total_str as string + dim amount_in_func_str as string + dim pcco_str as string + + grand_total_str = getGrandTotal(current_row) + amount_in_func_str = getAmountInFunc(current_row) + pcco_str = getPCCO(current_row) + + debug.print "before" + debug.print grand_total_str + debug.print "pass" + grand_total_curr = ccur(grand_total_str) + + amount_in_func_curr = ccur(amount_in_func_str) + + if (pcco_str = "P1375000") then + if (checkFullFillCasePCCOCode_P1375000Situation_1(grand_total_curr, amount_in_func_curr) = True) then + writeRemarks current_row, "P1375000 common sit 1" + applyPcco1375Situation_1(current_row) + Elseif (checkFullFillCasePCCOCode_P1375000Situation_2(grand_total_curr, amount_in_func_curr) = True) then + writeRemarks current_row, "P1375000 common sit 2" + applyPcco1375Situation_2(current_row) + Elseif (checkFullFillCasePCCOCode_P1375000Situation_3(grand_total_curr, amount_in_func_curr) = True) then + writeRemarks current_row, "P1375000 common sit 3" + applyPcco1375Situation_3(current_row) + Else + msgbox "missing pcco 1375 situation" + end if + + Elseif (pcco_str = "N/A") then + msgbox "pcco value is N/A" + + Else + if (checkFullFillCaseCommonSituation_1(grand_total_curr, amount_in_func_curr) = True) then + writeRemarks current_row, "common sit 1" + applyCommonSituation_1(current_row) + Elseif (checkFullFillCaseCommonSituation_2(grand_total_curr, amount_in_func_curr) = True) then + writeRemarks current_row, "common sit 2" + applyCommonSituation_2(current_row) + Elseif (checkFullFillCaseCommonSituation_3(grand_total_curr, amount_in_func_curr) = True) then + writeRemarks current_row, "common sit 3" + applyCommonSituation_3(current_row) + Else + msgbox "missing situation" + end if + end if + + else + debug.print "input is not valid, skipping row" + + if (checkOutputCellReady(current_row)) then + if (checkCurrentRowValueValid(current_row)) then + else + writeRemarks current_row, "input is not valid" + end if + end if + end if + + current_row = current_row + 1 + Wend + +End Sub + +Sub helloworld() + ' debug.print isCurrentRowNeedToProcess ("7") + ' debug.print isCurrentRowNeedToProcess ("180") + + ' debug.print isAllDone ("7") + ' debug.print isAllDone ("180") + +End Sub diff --git a/task1/_01_submit/Example_file.xlsm b/task1/_01_submit/Example_file.xlsm new file mode 100644 index 0000000..f10413d Binary files /dev/null and b/task1/_01_submit/Example_file.xlsm differ diff --git a/task1/_01_submit/README.md b/task1/_01_submit/README.md new file mode 100644 index 0000000..06b8328 --- /dev/null +++ b/task1/_01_submit/README.md @@ -0,0 +1,75 @@ + +其實我做緊嘅係adjustment + +係每個ISIN要有3樣野要做 + +### Situation 1: + +如果 Grand total + amount in func > 0 (row 8 ?) + + - Account column: A1311, Debit column: Grand Total+amount in func + + - 加多行row: + - account:1020, + - debit column: Grand Total+amount in func + + - 加多行row: + - account:NA8600, + - debit: grand total + amount in func + + - 再加多行row: + - account NA8601, + - credit: grand total + amount in func + +### Situation 2: + +如果Grand total + amount in func < 0 (row 8 ?) + + - Account column: A1311, Credit column: Grand Total+amount in func + + - 加多行row: account:1020, credit column: Grand Total+amount in func + + - 加多行row: account:NA8700, credit: grand total + amount in func + + - 再加多行row: account NA8701, debit: grand total + amount in func + +### Situation 3: + +如果Grand total + amount in func = 0 + + - 咩都唔洗做 + +### Special case (如果PCCO Code係P1375000): + +### Situation 1: + +如果Grand total + amount in func > 0 (missing example) + + - Account column: P1375, Debit column: Grand Total+amount in func + + - 加多行row: account:2020, debit column: Grand Total+amount in func + + - 加多行row: account:NA8600, debit: grand total + amount in func + + - 再加多行row: account NA8601, credit: grand total + amount in func + + +### Situation 2: + +如果Grand total + amount in func < 0 (row 21) + + - Account column: P1375, Credit column: Grand Total+amount in func + + - 加多行row: account:2020, credit column: Grand Total+amount in func + + - 加多行row: account:8700, credit: grand total + amount in func + + - 再加多行row: account 8701, debit: grand total + amount in func + +### Situation 3: + +如果Grand total + amount in func = 0 + + - 咩都唔洗做 + + diff --git a/task1/_02_submit/Example_file_working_2016.xlsm b/task1/_02_submit/Example_file_working_2016.xlsm new file mode 100644 index 0000000..c04658b Binary files /dev/null and b/task1/_02_submit/Example_file_working_2016.xlsm differ diff --git a/task1/_02_submit/Example_file_working_2016_test1.xlsm b/task1/_02_submit/Example_file_working_2016_test1.xlsm new file mode 100644 index 0000000..a695f4e Binary files /dev/null and b/task1/_02_submit/Example_file_working_2016_test1.xlsm differ diff --git a/task1/_02_submit/Example_file_working_2016_test2.xlsm b/task1/_02_submit/Example_file_working_2016_test2.xlsm new file mode 100644 index 0000000..ceb5668 Binary files /dev/null and b/task1/_02_submit/Example_file_working_2016_test2.xlsm differ diff --git a/task1/_02_submit/Example_file_working_2016_test2_deliver.xlsm b/task1/_02_submit/Example_file_working_2016_test2_deliver.xlsm new file mode 100644 index 0000000..a05914d Binary files /dev/null and b/task1/_02_submit/Example_file_working_2016_test2_deliver.xlsm differ diff --git a/task1/_02_submit/README.md 2 b/task1/_02_submit/README.md 2 new file mode 100644 index 0000000..cf3cb93 --- /dev/null +++ b/task1/_02_submit/README.md 2 @@ -0,0 +1,69 @@ + +其實我做緊嘅係adjustment + +係每個ISIN要有3樣野要做 + +### Situation 1: + +如果 Grand total > 0 (row 8 ?) + + - PCEC(Column I): 302210, PCCO: A1311000, Account column: 1020, debit column: Grand Total + + + - 加多行row: + - PCEC: 921810, + - PCCO: 92100100 + - account:8600, + - debit: grand total + + - 再加多行row: + - PCEC: 922910, + - PCCO: 98900100 + - account:8601, + - Credit: grand total +### Situation 2: + +如果Grand total < 0 (row 8 ?) + + - PCEC(Column I): 302210, PCCO: A1311000, Account column: 1020, credit column: Grand Total + + - 加多行row: PCEC: 922810, PCCO: 92200100, account:8700, credit: grand total + + - 再加多行row: PCEC: 921910, PCCO: 98900200, account:8701, debit: grand total + +### Situation 3: + +如果Grand total = 0 + + - 咩都唔洗做 + +### Special case (如果PCCO Code係P1375000): + +### Situation 1: + +如果Grand total > 0 (missing example) + + - PCEC(Column I): 302410, PCCO: P1375000, Account column: 2020, debit column: Grand Total + + - 加多行row: PCEC: 921810, PCCO: 92100100, account:8600, debit: grand total + + - 再加多行row: PCEC: 922910, PCCO: 98900100, account:8601, credit: grand total + + +### Situation 2: + +如果Grand total < 0 (row 21) + + - PCEC(Column I): 302410, PCCO: P1375000, Account column: 2020, credit column: Grand Total + + - 加多行row: PCEC: 922810, PCCO: 92200100, account:8700, credit: grand total + + - 再加多行row: PCEC: 921910, PCCO: 98900200, account:8701, debit: grand total + +### Situation 3: + +如果Grand total = 0 + + - 咩都唔洗做 + + diff --git a/task1/_02_submit/ThisWorkbook.cls b/task1/_02_submit/ThisWorkbook.cls new file mode 100644 index 0000000..38efdd2 --- /dev/null +++ b/task1/_02_submit/ThisWorkbook.cls @@ -0,0 +1,1032 @@ +' change log: +' 2023-09-24, update error handling +' 2023-09-23, update for "################" when zoom out + +Option Explicit + +Dim first_row As Integer +Dim current_row As Integer +Dim last_check_row As Integer + +' Dim amount_in_func As String +Dim starting_cell As String + +Dim grand_total_curr As Currency +Dim grand_total_str As String + +Dim amount_in_func_curr As Currency +Dim amount_in_func_str As String + +Dim pcco_str As String + +Dim ISIN_CODE_ESTD_COL As String +Dim BOOK_COL As String +Dim BUY_COL As String +Dim SELL_COL As String +Dim GRANDTOTAL_COL As String +Dim PCCO_COL As String +Dim AMOUNT_IN_FUNC_COL As String +Dim BMF_ID_COL As String + +Dim ACCOUNT_COL As String +Dim DEBIT_COL As String +Dim CREDIT_COL As String + +Dim REMARKS_COL As String + +Dim ADJUSTMENT_WORKSHEET As String +Dim ADJUSTMENT_TEST_WORKSHEET As String + +Dim AC_1020 As String +Dim AC_8600 As String +Dim AC_8601 As String +Dim AC_8700 As String +Dim AC_8701 As String +Dim AC_1311 As String +Dim AC_1375 As String +Dim AC_2020 As String + +Dim current_row_value_valid As Boolean +Dim check_next_row_ready As Boolean + +Sub init() + On Error GoTo eh + + first_row = 7 + current_row = first_row + last_check_row = getLastCheckRow(current_row) + + ' amount_in_func = "J" + ISIN_CODE_ESTD_COL = "C" + BOOK_COL = "D" + BUY_COL = "E" + SELL_COL = "F" + GRANDTOTAL_COL = "G" + PCCO_COL = "I" + AMOUNT_IN_FUNC_COL = "J" + BMF_ID_COL = "K" + + ACCOUNT_COL = "M" + DEBIT_COL = "N" + CREDIT_COL = "O" + + REMARKS_COL = "Q" + + starting_cell = GRANDTOTAL_COL & first_row + + AC_1020 = "AC_1020" + AC_8600 = "AC_8600" + AC_8601 = "AC_8601" + AC_8700 = "AC_8700" + AC_8701 = "AC_8701" + AC_1311 = "AC_1311" + AC_1375 = "AC_1375" + AC_2020 = "AC_2020" + + 'ADJUSTMENT_WORKSHEET = "Adjustment_TEST" + ADJUSTMENT_WORKSHEET = "Adjustment" + +Done: + Exit Sub + +eh: + MsgBox "init:Error: " & Err.Description + Stop + +End Sub + +Function writeRemarks(current_row As Integer, remarks As String) + On Error GoTo eh + + Worksheets(ADJUSTMENT_WORKSHEET).Range(REMARKS_COL & CStr(current_row)).Value = remarks + +Done: + Exit Function + +eh: + MsgBox "writeRemarks:Error: " & Err.Description + Stop + +End Function + +Function writeCredit(current_row As Integer, credit As Variant) + On Error GoTo eh + + Worksheets(ADJUSTMENT_WORKSHEET).Range(CREDIT_COL & CStr(current_row)).Value = Abs(credit) + Worksheets(ADJUSTMENT_WORKSHEET).Range(CREDIT_COL & CStr(current_row)).NumberFormat = "#,##0.00" + +Done: + Exit Function + +eh: + MsgBox "writeCredit:Error: " & Err.Description + Stop + +End Function + +Function writeDebit(current_row As Integer, debit As Variant) + On Error GoTo eh + + Worksheets(ADJUSTMENT_WORKSHEET).Range(DEBIT_COL & CStr(current_row)).Value = Abs(debit) + Worksheets(ADJUSTMENT_WORKSHEET).Range(DEBIT_COL & CStr(current_row)).NumberFormat = "#,##0.00" + +Done: + Exit Function + +eh: + MsgBox "writeDebit:Error: " & Err.Description + Stop + +End Function + +Function writeAccount(current_row As Integer, account As String) + On Error GoTo eh + + Worksheets(ADJUSTMENT_WORKSHEET).Range(ACCOUNT_COL & CStr(current_row)).Value = account + +Done: + Exit Function + +eh: + MsgBox "writeAccount:Error: " & Err.Description + Stop + +End Function + +Function getPCCO(current_row As Integer) + On Error GoTo eh + + Dim output As String + output = Worksheets(ADJUSTMENT_WORKSHEET).Range(PCCO_COL & CStr(current_row)).Value + +Done: + getPCCO = output + Exit Function + +eh: + MsgBox "getPCCO:Error: " & Err.Description + Stop + +End Function + + +Function getGrandTotal(current_row As Integer) + On Error GoTo eh + + Dim output As String + + output = Worksheets(ADJUSTMENT_WORKSHEET).Range(GRANDTOTAL_COL & CStr(current_row)).Text + If (InStr(output, "###") >= 0) Then + output = Worksheets(ADJUSTMENT_WORKSHEET).Range(GRANDTOTAL_COL & CStr(current_row)).Value + End If + +Done: + getGrandTotal = output + Exit Function + +eh: + MsgBox "getGrandTotal:Error: " & Err.Description & ":" & CStr(current_row) + Stop + +End Function + +Function getAmountInFunc(current_row As Integer) + On Error GoTo eh + + Dim output As String + + output = Worksheets(ADJUSTMENT_WORKSHEET).Range(AMOUNT_IN_FUNC_COL & CStr(current_row)).Text + If (InStr(output, "###") >= 0) Then + output = Worksheets(ADJUSTMENT_WORKSHEET).Range(AMOUNT_IN_FUNC_COL & CStr(current_row)).Value + End If + +Done: + getAmountInFunc = output + Exit Function + +eh: + MsgBox "getAmountInFunc:Error: " & Err.Description & ":" & CStr(current_row) + Stop + +End Function + +Function checkOutputCellReady(current_row As Integer) + On Error GoTo eh + + Dim output As Boolean + output = True + + Dim account_cell As Variant + account_cell = Worksheets(ADJUSTMENT_WORKSHEET).Range(ACCOUNT_COL & CStr(current_row)) + + If (IsEmpty(account_cell) = False) Then + output = False + End If + +Done: + checkOutputCellReady = output + Exit Function + +eh: + MsgBox "checkOutputCellReady:Error: " & Err.Description + Stop + +End Function + +Function checkCellFormat(test_cell As Variant) + On Error GoTo eh + + Dim Msg As String + + Msg = "no match" + Select Case IsEmpty(test_cell) + Case True + Msg = "General." + Case Else + Select Case IsNumeric(test_cell) + Case True + Msg = "Number." + Case Else + Select Case IsDate(test_cell) + Case True + Msg = "Date." + Case Else + Msg = "Text." + End Select + End Select + End Select + ' debug.print "checkCellFormat:" & test_cell.Address & ":" & Msg + +Done: + checkCellFormat = Msg + Exit Function + +eh: + MsgBox "checkCellFormat:Error: " & Err.Description + Stop + +End Function + + + +Function checkCurrentRowFormatValid(current_row As Integer) + On Error GoTo eh + + Dim test_cell As Variant + Dim output As Boolean + output = True + + test_cell = Worksheets(ADJUSTMENT_WORKSHEET).Range(ISIN_CODE_ESTD_COL & CStr(current_row)) + If "Text." = checkCellFormat(test_cell) Then + Debug.Print "ISIN_CODE_ESTD_COL:check ok" + Else + Debug.Print "ISIN_CODE_ESTD_COL:check failed" + Debug.Print checkCellFormat(test_cell) + output = False + End If + + test_cell = Worksheets(ADJUSTMENT_WORKSHEET).Range(BOOK_COL & CStr(current_row)) + If "Text." = checkCellFormat(test_cell) Then + Debug.Print "BOOK_COL:check ok" + Else + Debug.Print "BOOK_COL:check failed" + Debug.Print checkCellFormat(test_cell) + output = False + End If + + test_cell = Worksheets(ADJUSTMENT_WORKSHEET).Range(BUY_COL & CStr(current_row)) + + If "Number." = checkCellFormat(test_cell) Then + Debug.Print "BUY_COL:check ok" + Else + Debug.Print "BUY_COL:check failed" + Debug.Print checkCellFormat(test_cell) + output = False + End If + + test_cell = Worksheets(ADJUSTMENT_WORKSHEET).Range(GRANDTOTAL_COL & CStr(current_row)) + If "Number." = checkCellFormat(test_cell) Then + Debug.Print "GRANDTOTAL_COL:check ok" + Else + Debug.Print "GRANDTOTAL_COL:check failed" + Debug.Print checkCellFormat(test_cell) + output = False + End If + + test_cell = Worksheets(ADJUSTMENT_WORKSHEET).Range(PCCO_COL & CStr(current_row)) + If "Text." = checkCellFormat(test_cell) Then + Debug.Print "PCCO_COL:check ok" + Else + Debug.Print "PCCO_COL:check failed" + Debug.Print checkCellFormat(test_cell) + output = False + End If + + test_cell = Worksheets(ADJUSTMENT_WORKSHEET).Range(AMOUNT_IN_FUNC_COL & CStr(current_row)) + If "Number." = checkCellFormat(test_cell) Then + Debug.Print "AMOUNT_IN_FUNC_COL:check ok" + Else + Debug.Print "AMOUNT_IN_FUNC_COL:check failed" + Debug.Print checkCellFormat(test_cell) + output = False + End If + + test_cell = Worksheets(ADJUSTMENT_WORKSHEET).Range(BMF_ID_COL & CStr(current_row)) + If "Number." = checkCellFormat(test_cell) Then + Debug.Print "BMF_ID_COL:check ok" + Else + Debug.Print "BMF_ID_COL:check failed" + Debug.Print checkCellFormat(test_cell) + output = False + End If + + + test_cell = Worksheets(ADJUSTMENT_WORKSHEET).Range(ACCOUNT_COL & CStr(current_row)) + If "General." = checkCellFormat(test_cell) Then + Debug.Print "ACCOUNT_COL:check ok" + Else + Debug.Print "ACCOUNT_COL:check failed" + Debug.Print checkCellFormat(test_cell) + output = False + End If + + test_cell = Worksheets(ADJUSTMENT_WORKSHEET).Range(DEBIT_COL & CStr(current_row)) + If "General." = checkCellFormat(test_cell) Then + Debug.Print "DEBIT_COL:check ok" + Else + Debug.Print "DEBIT_COL:check failed" + Debug.Print checkCellFormat(test_cell) + output = False + End If + + test_cell = Worksheets(ADJUSTMENT_WORKSHEET).Range(CREDIT_COL & CStr(current_row)) + If "General." = checkCellFormat(test_cell) Then + Debug.Print "CREDIT_COL:check ok" + Else + Debug.Print "CREDIT_COL:check failed" + Debug.Print checkCellFormat(test_cell) + output = False + End If + + test_cell = Worksheets(ADJUSTMENT_WORKSHEET).Range(REMARKS_COL & CStr(current_row)) + If "General." = checkCellFormat(test_cell) Then + Debug.Print "REMARKS_COL:check ok" + Else + Debug.Print "REMARKS_COL:check failed" + Debug.Print checkCellFormat(test_cell) + output = False + End If + +Done: + checkCurrentRowFormatValid = output + Exit Function + +eh: + MsgBox "checkCurrentRowFormatValid:Error: " & Err.Description + Stop + +End Function + + +Function checkCurrentRowValueValid(current_row As Integer) + On Error GoTo eh + + Dim output As Boolean + output = True + + If (checkIfGrandTotalRefNotFound(current_row) = True) Then + Debug.Print "grand total ref not found" + output = False + End If + + + If output Then + + Dim grand_total_str As String + Dim amount_in_func_str As String + Dim pcco_str As String + + grand_total_str = getGrandTotal(current_row) + amount_in_func_str = getAmountInFunc(current_row) + pcco_str = getPCCO(current_row) + + ' Debug.print InStr(pcco_str, "Error") >= 0 + ' Debug.print InStr(amount_in_func_str, "N/A") >= 0 + ' Debug.print InStr(grand_total_str, "N/A") >= 0 + + If (Trim(pcco_str) = "" Or InStr(pcco_str, "N/A") > 0 Or InStr(pcco_str, "Error") > 0) Then + output = False + End If + + If (Trim(amount_in_func_str) = "" Or InStr(amount_in_func_str, "N/A") > 0 Or InStr(amount_in_func_str, "Error") > 0) Then + output = False + End If + + If (Trim(grand_total_str) = "" Or InStr(grand_total_str, "N/A") > 0 Or InStr(grand_total_str, "Error") > 0) Then + output = False + End If + + Else + Debug.Print "skipping as grand total ref not found" + End If + +Done: + checkCurrentRowValueValid = output + Exit Function + +eh: + MsgBox "checkCurrentRowValueValid:Error: " & Err.Description + Stop + +End Function + +Function checkFullFillCasePCCOCode_P1375000Situation_1(grand_total As Currency, amount_in_func As Currency) + On Error GoTo eh + + ' ### Special case (if PCCO Code = P1375000): + ' ### Situation 1: + ' if Grand total + amount in func > 0 (missing example) + Dim output As Boolean + output = (grand_total + amount_in_func > 0) + +Done: + checkFullFillCasePCCOCode_P1375000Situation_1 = output + Exit Function + +eh: + MsgBox "checkFullFillCasePCCOCode_P1375000Situation_1:Error: " & Err.Description + Stop + +End Function + +Function checkFullFillCasePCCOCode_P1375000Situation_2(grand_total As Currency, amount_in_func As Currency) + On Error GoTo eh + + ' ### Special case (if PCCO Code = P1375000): + ' ### Situation 2: + ' if Grand total + amount in func < 0 (row 21) + Dim output As Boolean + output = (grand_total + amount_in_func < 0) + +Done: + checkFullFillCasePCCOCode_P1375000Situation_2 = output + Exit Function + +eh: + MsgBox "checkFullFillCasePCCOCode_P1375000Situation_2:Error: " & Err.Description + Stop + +End Function + +Function checkFullFillCasePCCOCode_P1375000Situation_3(grand_total As Currency, amount_in_func As Currency) + On Error GoTo eh + + ' ### Special case (if PCCO Code = P1375000): + ' ### Situation 3: + ' if Grand total + amount in func = 0 + ' - do nothing + Dim output As Boolean + output = (grand_total + amount_in_func = 0) + +Done: + checkFullFillCasePCCOCode_P1375000Situation_3 = output + Exit Function + +eh: + MsgBox "checkFullFillCasePCCOCode_P1375000Situation_3:Error: " & Err.Description + Stop + +End Function + +Function checkFullFillCaseCommonSituation_1(grand_total As Currency, amount_in_func As Currency) + On Error GoTo eh + + ' ### Situation 1: + ' if Grand total + amount in func > 0 (row 8 ?) + Dim output As Boolean + output = (grand_total + amount_in_func > 0) + +Done: + checkFullFillCaseCommonSituation_1 = output + Exit Function + +eh: + MsgBox "checkFullFillCaseCommonSituation_1:Error: " & Err.Description + Stop + +End Function + +Function checkFullFillCaseCommonSituation_2(grand_total As Currency, amount_in_func As Currency) + On Error GoTo eh + + ' ### Situation 2: + ' if Grand total + amount in func < 0 (row 8 ?)' + Dim output As Boolean + output = (grand_total + amount_in_func < 0) + +Done: + checkFullFillCaseCommonSituation_2 = output + Exit Function + +eh: + MsgBox "checkFullFillCaseCommonSituation_2:Error: " & Err.Description + Stop + +End Function + +Function checkFullFillCaseCommonSituation_3(grand_total As Currency, amount_in_func As Currency) + On Error GoTo eh + + ' ### Situation 3: + ' if Grand total + amount in func = 0 + Dim output As Boolean + output = (grand_total + amount_in_func = 0) + +Done: + checkFullFillCaseCommonSituation_3 = output + Exit Function + +eh: + MsgBox "checkFullFillCaseCommonSituation_3:Error: " & Err.Description + Stop +End Function + +Function checkIfReferenceNotFound(cell As Variant) + On Error GoTo eh + + Dim test_text As Variant + test_text = cell.Text + Dim output As Boolean + + output = (InStr(test_text, "#REF!") > 0) + +Done: + checkIfReferenceNotFound = output + Exit Function + +eh: + MsgBox "checkIfReferenceNotFound:Error: " & Err.Description + Stop + +End Function + +Function checkIfGrandTotalRefNotFound(current_row As Integer) + On Error GoTo eh + + Dim test_cell As Variant + test_cell = Worksheets(ADJUSTMENT_WORKSHEET).Range(GRANDTOTAL_COL & CStr(current_row)) + +Done: + checkIfGrandTotalRefNotFound = checkIfReferenceNotFound(Worksheets(ADJUSTMENT_WORKSHEET).Range(GRANDTOTAL_COL & CStr(current_row))) + Exit Function + +eh: + MsgBox "checkIfGrandTotalRefNotFound:Error: " & Err.Description & ":" & GRANDTOTAL_COL & CStr(current_row) + Stop + +End Function + +Function applyCommonSituation_1(current_row As Integer) + On Error GoTo eh + + Dim net_var As Variant + Dim grand_total_var As Variant + Dim amount_in_func_var As Variant + + grand_total_var = CDec(getGrandTotal(current_row)) + amount_in_func_var = CDec(getAmountInFunc(current_row)) + net_var = grand_total_var + amount_in_func_var + +' current row +' - Account column: A1311, Debit column: Grand Total+amount in func + writeAccount current_row, AC_1311 + writeDebit current_row, net_var + +' - add row: +' - account:1020, +' - debit column: Grand Total+amount in func + insertNewRowBelow current_row + current_row = current_row + 1 + writeAccount current_row, AC_1020 + writeDebit current_row, net_var + +' - add row: +' - account:NA8600, +' - debit: grand total + amount in func + insertNewRowBelow current_row + current_row = current_row + 1 + writeAccount current_row, AC_8600 + writeDebit current_row, net_var + +' - add row: +' - account NA8601, +' - credit: grand total + amount in func + insertNewRowBelow current_row + current_row = current_row + 1 + writeAccount current_row, AC_8601 + writeCredit current_row, net_var + +Done: + applyCommonSituation_1 = True + Exit Function + +eh: + MsgBox "applyCommonSituation_1:Error: " & Err.Description + Stop + +End Function + +Function applyCommonSituation_2(current_row As Integer) + On Error GoTo eh + + Dim net_var As Variant + Dim grand_total_var As Variant + Dim amount_in_func_var As Variant + + grand_total_var = CDec(getGrandTotal(current_row)) + amount_in_func_var = CDec(getAmountInFunc(current_row)) + net_var = grand_total_var + amount_in_func_var + +' if Grand total + amount in func < 0 (row 8 ?) +' - Account column: A1311, +' - Credit column: Grand Total+amount in func + writeAccount current_row, AC_1311 + writeCredit current_row, net_var + +' - add row: +' - account:1020, +' - credit column: Grand Total+amount in func + insertNewRowBelow current_row + current_row = current_row + 1 + writeAccount current_row, AC_1020 + writeCredit current_row, net_var + +' - add row: +' - account:NA8700, +' - credit: grand total + amount in func + insertNewRowBelow current_row + current_row = current_row + 1 + writeAccount current_row, AC_8700 + writeCredit current_row, net_var + +' - add row: +' - account NA8701, +' - debit: grand total + amount in func + insertNewRowBelow current_row + current_row = current_row + 1 + writeAccount current_row, AC_8701 + writeDebit current_row, net_var + +Done: + applyCommonSituation_2 = True + Exit Function + +eh: + MsgBox "applyCommonSituation_2:Error: " & Err.Description + Stop + +End Function + +Function applyCommonSituation_3(current_row As Integer) + On Error GoTo eh + +' if Grand total + amount in func = 0 +' - do nothing + applyCommonSituation_3 = True + +Done: + applyCommonSituation_3 = True + Exit Function + +eh: + MsgBox "applyCommonSituation_3:Error: " & Err.Description + Stop + +End Function + +Function applyPcco1375Situation_1(current_row As Integer) + On Error GoTo eh + + Dim net_var As Variant + Dim grand_total_var As Variant + Dim amount_in_func_var As Variant + + grand_total_var = CDec(getGrandTotal(current_row)) + amount_in_func_var = CDec(getAmountInFunc(current_row)) + net_var = grand_total_var + amount_in_func_var + + ' - Account + ' - column: P1375, + ' - Debit column: Grand Total+amount in func + writeAccount current_row, AC_1375 + writeDebit current_row, net_var + + ' - add row: + ' - account:2020, + ' - debit column: Grand Total+amount in func + insertNewRowBelow current_row + current_row = current_row + 1 + writeAccount current_row, AC_2020 + writeDebit current_row, net_var + + ' - add row: + ' - account:NA8600, + ' - debit: grand total + amount in func + insertNewRowBelow current_row + current_row = current_row + 1 + writeAccount current_row, AC_8600 + writeDebit current_row, net_var + + ' - add row: + ' - account NA8601, + ' - credit: grand total + amount in func + insertNewRowBelow current_row + current_row = current_row + 1 + writeAccount current_row, AC_8601 + writeCredit current_row, net_var + + applyPcco1375Situation_1 = True + +Done: + applyPcco1375Situation_1 = True + Exit Function + +eh: + MsgBox "applyPcco1375Situation_1:Error: " & Err.Description + Stop + +End Function + +Function applyPcco1375Situation_2(current_row As Integer) + On Error GoTo eh + + Dim net_var As Variant + Dim grand_total_var As Variant + Dim amount_in_func_var As Variant + + grand_total_var = CDec(getGrandTotal(current_row)) + amount_in_func_var = CDec(getAmountInFunc(current_row)) + net_var = grand_total_var + amount_in_func_var + +' - Account +' - column: P1375, +' - Credit column: Grand Total+amount in func + writeAccount current_row, AC_1375 + writeCredit current_row, net_var + +' - add row: +' - account:2020, +' - credit column: Grand Total+amount in func + insertNewRowBelow current_row + current_row = current_row + 1 + writeAccount current_row, AC_2020 + writeCredit current_row, net_var + +' - add row: +' - account:8700, +' - credit: grand total + amount in func + insertNewRowBelow current_row + current_row = current_row + 1 + writeAccount current_row, AC_8700 + writeCredit current_row, net_var + +' - add row: +' - account 8701, +' - debit: grand total + amount in func + insertNewRowBelow current_row + current_row = current_row + 1 + writeAccount current_row, AC_8701 + writeDebit current_row, net_var + + applyPcco1375Situation_2 = True + +Done: + applyPcco1375Situation_2 = True + Exit Function + +eh: + MsgBox "applyPcco1375Situation_2:Error: " & Err.Description + Stop + +End Function + +Function applyPcco1375Situation_3(current_row As Integer) + On Error GoTo eh + +' - do nothing + applyPcco1375Situation_3 = True + +Done: + applyPcco1375Situation_3 = True + Exit Function + +eh: + MsgBox "applyPcco1375Situation_3:Error: " & Err.Description + Stop + +End Function + + +Sub test() + ' Debug.Assert True = isCurrentRowNeedToProcess("7") + ' Debug.Assert False = isCurrentRowNeedToProcess("180") + ' debug.assert False = isAllDone ("7") + ' debug.assert True = isAllDone ("180") + + ' debug.assert False = checkFullFillCaseCommonSituation_1(-10,1) + ' debug.assert False = checkFullFillCaseCommonSituation_1(1,-10) + ' debug.assert False = checkFullFillCaseCommonSituation_1(-10,-10) + ' debug.assert False = checkFullFillCaseCommonSituation_1(0,0) + ' debug.assert True = checkFullFillCaseCommonSituation_1(0,1) + ' debug.assert True = checkFullFillCaseCommonSituation_1(1,0) + ' debug.assert True = checkFullFillCaseCommonSituation_1(1,1) + + ' debug.assert True = checkFullFillCaseCommonSituation_2(-10,1) + ' debug.assert True = checkFullFillCaseCommonSituation_2(1,-10) + ' debug.assert True = checkFullFillCaseCommonSituation_2(-10,-10) + ' debug.assert False = checkFullFillCaseCommonSituation_2(0,0) + ' debug.assert False = checkFullFillCaseCommonSituation_2(0,1) + ' debug.assert False = checkFullFillCaseCommonSituation_2(1,0) + ' debug.assert False = checkFullFillCaseCommonSituation_2(1,1) + + ' debug.assert True = checkFullFillCaseCommonSituation_3(0,0) + ' debug.assert False = checkFullFillCaseCommonSituation_3(1,1) + ' debug.assert False = checkFullFillCaseCommonSituation_3(-10,-10) + ' debug.assert False = checkFullFillCaseCommonSituation_3(1,0) + ' debug.assert False = checkFullFillCaseCommonSituation_3(0,1) + + ' debug.print Worksheets("Adjustment_TEST").Range("G86") + + init + + current_row = 29 + ' amount_in_func_str = getAmountInFunc(current_row) + ' pcco_str = getPCCO(current_row) + + ' debug.print current_row + ' debug.print grand_total_str + ' debug.print checkIfGrandTotalRefNotFound(current_row) + Debug.Print checkCurrentRowValueValid(current_row) + + ' current_row_value_valid = False + ' current_row_value_valid = checkCurrentRowValueValid(pcco_str, amount_in_func_str, grand_total_str) + ' check_next_row_ready = False + ' check_next_row_ready = checkOutputCellReady(current_row) + +End Sub + +Function getLastCheckRow(first_row As Integer) + getLastCheckRow = first_row + 10 +End Function + +Function insertNewRowBelow(current_row As Integer) + Range("A" & current_row + 1).EntireRow.Insert +End Function + +Function isAllDone(input_row As Integer) + On Error GoTo eh + + Dim cell_value As Currency + Dim output As Boolean + Dim i As Integer + output = True + + last_check_row = getLastCheckRow(input_row) + For i = input_row To last_check_row + If (isCurrentRowNeedToProcess(i) = True) Then + output = False + Exit For + End If + Next i + + isAllDone = output + +Done: + isAllDone = output + Exit Function + +eh: + MsgBox "isAllDone:Error: " & Err.Description + Stop + +End Function + +Function isCurrentRowNeedToProcess(input_row As Integer) + On Error GoTo eh + + Dim output As Boolean + Dim cell_value As Currency + Dim input_cell As String + input_cell = GRANDTOTAL_COL & input_row + +Done: + isCurrentRowNeedToProcess = Not (IsEmpty(Worksheets(ADJUSTMENT_WORKSHEET).Range(input_cell).Value)) + Exit Function + +eh: + MsgBox "isCurrentRowNeedToProcess:Error: " & Err.Description + Stop + +End Function + +Sub Main() + On Error GoTo eh + + Debug.Print "start a new run" + + init + + While isAllDone(current_row) = False + ' While current_row < 9 + Debug.Print "processing row: " & current_row + + Debug.Print checkCurrentRowFormatValid(current_row) + + current_row_value_valid = False + current_row_value_valid = checkCurrentRowValueValid(current_row) + check_next_row_ready = False + check_next_row_ready = checkOutputCellReady(current_row) + + If (current_row_value_valid And check_next_row_ready) Then + ' input considered valid after this line + + Dim grand_total_str As String + Dim amount_in_func_str As String + Dim pcco_str As String + + grand_total_str = getGrandTotal(current_row) + amount_in_func_str = getAmountInFunc(current_row) + pcco_str = getPCCO(current_row) + + Debug.Print "before" + Debug.Print grand_total_str + Debug.Print "pass" + grand_total_curr = CCur(grand_total_str) + + amount_in_func_curr = CCur(amount_in_func_str) + + If (pcco_str = "P1375000") Then + If (checkFullFillCasePCCOCode_P1375000Situation_1(grand_total_curr, amount_in_func_curr) = True) Then + writeRemarks current_row, "P1375000 common sit 1" + applyPcco1375Situation_1 (current_row) + ElseIf (checkFullFillCasePCCOCode_P1375000Situation_2(grand_total_curr, amount_in_func_curr) = True) Then + writeRemarks current_row, "P1375000 common sit 2" + applyPcco1375Situation_2 (current_row) + ElseIf (checkFullFillCasePCCOCode_P1375000Situation_3(grand_total_curr, amount_in_func_curr) = True) Then + writeRemarks current_row, "P1375000 common sit 3" + applyPcco1375Situation_3 (current_row) + Else + MsgBox "missing pcco 1375 situation" + End If + + ElseIf (pcco_str = "N/A") Then + MsgBox "pcco value is N/A" + + Else + If (checkFullFillCaseCommonSituation_1(grand_total_curr, amount_in_func_curr) = True) Then + writeRemarks current_row, "common sit 1" + applyCommonSituation_1 (current_row) + ElseIf (checkFullFillCaseCommonSituation_2(grand_total_curr, amount_in_func_curr) = True) Then + writeRemarks current_row, "common sit 2" + applyCommonSituation_2 (current_row) + ElseIf (checkFullFillCaseCommonSituation_3(grand_total_curr, amount_in_func_curr) = True) Then + writeRemarks current_row, "common sit 3" + applyCommonSituation_3 (current_row) + Else + MsgBox "missing situation" + End If + End If + + Else + Debug.Print "input is not valid, skipping row" + + If (checkOutputCellReady(current_row)) Then + If (checkCurrentRowValueValid(current_row)) Then + Else + writeRemarks current_row, "input is not valid" + End If + End If + End If + + current_row = current_row + 1 + Wend + + +Done: + Debug.Print "done" + Exit Sub + +eh: + MsgBox "Main:Error: " & Err.Description + Stop + +End Sub + +Sub helloworld() + ' debug.print isCurrentRowNeedToProcess ("7") + ' debug.print isCurrentRowNeedToProcess ("180") + + ' debug.print isAllDone ("7") + ' debug.print isAllDone ("180") + +End Sub diff --git a/task1/_02_submit/dev.bat b/task1/_02_submit/dev.bat new file mode 100644 index 0000000..42ea370 --- /dev/null +++ b/task1/_02_submit/dev.bat @@ -0,0 +1 @@ +xlwings vba edit diff --git a/task1/_02_submit/package.json b/task1/_02_submit/package.json new file mode 100644 index 0000000..46d0fe8 --- /dev/null +++ b/task1/_02_submit/package.json @@ -0,0 +1,13 @@ +{ + "name": "adjustment", + "version": "1.0.0", + "description": "adjustment", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "gitUpdate":"git add . && git commit -m \"update, \"" + }, + "keywords": [], + "author": "", + "license": "ISC" +} diff --git a/task1/_03_submit/Example_file_working_2016.xlsm b/task1/_03_submit/Example_file_working_2016.xlsm new file mode 100644 index 0000000..c04658b Binary files /dev/null and b/task1/_03_submit/Example_file_working_2016.xlsm differ diff --git a/task1/_03_submit/Example_file_working_2016_test1.xlsm b/task1/_03_submit/Example_file_working_2016_test1.xlsm new file mode 100644 index 0000000..a695f4e Binary files /dev/null and b/task1/_03_submit/Example_file_working_2016_test1.xlsm differ diff --git a/task1/_03_submit/Example_file_working_2016_test2.xlsm b/task1/_03_submit/Example_file_working_2016_test2.xlsm new file mode 100644 index 0000000..ceb5668 Binary files /dev/null and b/task1/_03_submit/Example_file_working_2016_test2.xlsm differ diff --git a/task1/_03_submit/Example_file_working_2016_test2_deliver.xlsm b/task1/_03_submit/Example_file_working_2016_test2_deliver.xlsm new file mode 100644 index 0000000..a05914d Binary files /dev/null and b/task1/_03_submit/Example_file_working_2016_test2_deliver.xlsm differ diff --git a/task1/_03_submit/Example_file_working_2016_test3.xlsm b/task1/_03_submit/Example_file_working_2016_test3.xlsm new file mode 100644 index 0000000..224ff9c Binary files /dev/null and b/task1/_03_submit/Example_file_working_2016_test3.xlsm differ diff --git a/task1/_03_submit/Example_file_working_2016_test3_deliver.xlsm b/task1/_03_submit/Example_file_working_2016_test3_deliver.xlsm new file mode 100644 index 0000000..bf38505 Binary files /dev/null and b/task1/_03_submit/Example_file_working_2016_test3_deliver.xlsm differ diff --git a/task1/_03_submit/Example_file_working_2016_test4.xlsm b/task1/_03_submit/Example_file_working_2016_test4.xlsm new file mode 100644 index 0000000..b87984b Binary files /dev/null and b/task1/_03_submit/Example_file_working_2016_test4.xlsm differ diff --git a/task1/_03_submit/Example_file_working_2016_test4_deliver.xlsm b/task1/_03_submit/Example_file_working_2016_test4_deliver.xlsm new file mode 100644 index 0000000..fc16df8 Binary files /dev/null and b/task1/_03_submit/Example_file_working_2016_test4_deliver.xlsm differ diff --git a/task1/_03_submit/Module1.bas b/task1/_03_submit/Module1.bas new file mode 100644 index 0000000..7d627e0 --- /dev/null +++ b/task1/_03_submit/Module1.bas @@ -0,0 +1,19 @@ +Attribute VB_Name = "Module1" +Sub Macro6() +Attribute Macro6.VB_ProcData.VB_Invoke_Func = " \n14" +' +' Macro6 Macro +' + +' + Sheets("Sheet1").Select + Columns("B:P").Select + Range("P1").Activate + Selection.Copy + Sheets("Adjustment").Select + Columns("B:P").Select + Range("P1").Activate + Sheets("Adjustment").Paste + + +End Sub diff --git a/task1/_03_submit/README.md 2 b/task1/_03_submit/README.md 2 new file mode 100644 index 0000000..e55f72d --- /dev/null +++ b/task1/_03_submit/README.md 2 @@ -0,0 +1,69 @@ + +其實我做緊嘅係adjustment + +係每個ISIN要有3樣野要做 + +### Situation 1: + +如果 Grand total > 0 (row 8 ?) + + - PCEC(Column I): 302210, PCCO: A1311000, Account column: 1020, debit column: Grand Total + + + - 加多行row: + - PCEC: 921810, + - PCCO: 92100100 + - account:8600, + - debit: grand total + + - 再加多行row: + - PCEC: 922910, + - PCCO: 98900100 + - account:8601, + - Credit: grand total +### Situation 2: + +如果Grand total < 0 (row 8 ?) + + - PCEC(Column I): 302210, PCCO: A1311000, Account column: 1020, credit column: Grand Total + + - 加多行row: PCEC: 922810, PCCO: 92200100, account:8700, credit: grand total + + - 再加多行row: PCEC: 921910, PCCO: 98900200, account:8701, debit: grand total + +### Situation 3: + +如果Grand total = 0 + + - 咩都唔洗做 + +### Special case (如果PCCO Code係P1375000): + +### Situation 1: + +如果Grand total > 0 (missing example) + + - PCEC(Column I): 302410, PCCO: P1375000, Account column: 2020, debit column: Grand Total + + - 加多行row: PCEC: 921810, PCCO: 92100100, account:8600, debit: grand total + + - 再加多行row: PCEC: 922910, PCCO: 98900100, account:8601, credit: grand total + + +### Situation 2: + +如果Grand total < 0 (row 21) + + - PCEC(Column I): 302410, PCCO: P1375000, Account column: 2020, credit column: Grand Total + + - 加多行row: PCEC: 922810, PCCO: 92200100, account:8700, credit: grand total + + - 再加多行row: PCEC: 921910, PCCO: 98900200, account:8701, debit: grand total + +### Situation 3: + +如果Grand total = 0 + + - 咩都唔洗做 + + diff --git a/task1/_03_submit/ThisWorkbook.cls b/task1/_03_submit/ThisWorkbook.cls new file mode 100644 index 0000000..643ecd7 --- /dev/null +++ b/task1/_03_submit/ThisWorkbook.cls @@ -0,0 +1,1150 @@ +' change log: +' 2023-09-24, update error handling +' 2023-09-23, update for "################" when zoom out + +Option Explicit + +Dim first_row As Integer +Dim current_row As Integer +Dim last_check_row As Integer + +' Dim amount_in_func As String +Dim starting_cell As String + +Dim grand_total_curr As Currency +Dim grand_total_str As String + +Dim amount_in_func_curr As Currency +Dim amount_in_func_str As String + +Dim pcco_str As String + +Dim ISIN_CODE_ESTD_COL As String +Dim BOOK_COL As String +Dim BUY_COL As String +Dim SELL_COL As String +Dim GRANDTOTAL_COL As String +Dim PCCO_COL As String +Dim AMOUNT_IN_FUNC_COL As String +Dim BMF_ID_COL As String + +Dim ACCOUNT_COL As String +Dim DEBIT_COL As String +Dim CREDIT_COL As String + +Dim REMARKS_COL As String + +Dim ADJUSTMENT_WORKSHEET As String +Dim ADJUSTMENT_TEST_WORKSHEET As String + +Dim AC_1020 As String +Dim AC_8600 As String +Dim AC_8601 As String +Dim AC_8700 As String +Dim AC_8701 As String +Dim AC_1311 As String +Dim AC_1375 As String +Dim AC_2020 As String + +Dim current_row_value_valid As Boolean +Dim check_next_row_ready As Boolean +Dim check_row_format_valid as Boolean + +Sub init() + On Error GoTo eh + + first_row = 7 + current_row = first_row + last_check_row = getLastCheckRow(current_row) + + ' amount_in_func = "J" + ISIN_CODE_ESTD_COL = "C" + BOOK_COL = "D" + BUY_COL = "E" + SELL_COL = "F" + GRANDTOTAL_COL = "G" + PCCO_COL = "I" + AMOUNT_IN_FUNC_COL = "J" + BMF_ID_COL = "K" + + ACCOUNT_COL = "M" + DEBIT_COL = "N" + CREDIT_COL = "O" + + REMARKS_COL = "Q" + + starting_cell = GRANDTOTAL_COL & first_row + + AC_1020 = "AC_1020" + AC_8600 = "AC_8600" + AC_8601 = "AC_8601" + AC_8700 = "AC_8700" + AC_8701 = "AC_8701" + AC_1311 = "AC_1311" + AC_1375 = "AC_1375" + AC_2020 = "AC_2020" + + 'ADJUSTMENT_WORKSHEET = "Adjustment_TEST" + ADJUSTMENT_WORKSHEET = "Adjustment" + +Done: + Exit Sub + +eh: + Debug.print "init:Error: " & Err.Description + + +End Sub + +Function writeRemarks(current_row As Integer, remarks As String) + On Error GoTo eh + + Worksheets(ADJUSTMENT_WORKSHEET).Range(REMARKS_COL & CStr(current_row)).Value = remarks + +Done: + Exit Function + +eh: + Debug.print "writeRemarks:Error: " & Err.Description + +End Function + +Function appendRemarks(current_row As Integer, remarks As String) + On Error GoTo eh + + Dim original_string as String + original_string = Worksheets(ADJUSTMENT_WORKSHEET).Range(REMARKS_COL & CStr(current_row)).Value + Worksheets(ADJUSTMENT_WORKSHEET).Range(REMARKS_COL & CStr(current_row)).Value = remarks & "," & original_string + +Done: + Exit Function + +eh: + Debug.print "appendRemarks:Error: " & Err.Description + +End Function + +Function writeCredit(current_row As Integer, credit As Variant) + On Error GoTo eh + + Worksheets(ADJUSTMENT_WORKSHEET).Range(CREDIT_COL & CStr(current_row)).Value = Abs(credit) + Worksheets(ADJUSTMENT_WORKSHEET).Range(CREDIT_COL & CStr(current_row)).NumberFormat = "#,##0.00" + +Done: + Exit Function + +eh: + Debug.print "writeCredit:Error: " & Err.Description + + +End Function + +Function writeDebit(current_row As Integer, debit As Variant) + On Error GoTo eh + + Worksheets(ADJUSTMENT_WORKSHEET).Range(DEBIT_COL & CStr(current_row)).Value = Abs(debit) + Worksheets(ADJUSTMENT_WORKSHEET).Range(DEBIT_COL & CStr(current_row)).NumberFormat = "#,##0.00" + +Done: + Exit Function + +eh: + Debug.print "writeDebit:Error: " & Err.Description + + +End Function + +Function writeAccount(current_row As Integer, account As String) + On Error GoTo eh + + Worksheets(ADJUSTMENT_WORKSHEET).Range(ACCOUNT_COL & CStr(current_row)).Value = account + +Done: + Exit Function + +eh: + Debug.print "writeAccount:Error: " & Err.Description + + +End Function + +Function getPCCO(current_row As Integer) + On Error GoTo eh + + Dim output As String + output = Worksheets(ADJUSTMENT_WORKSHEET).Range(PCCO_COL & CStr(current_row)).Value + +Done: + getPCCO = output + Exit Function + +eh: + Debug.print "getPCCO:Error: " & Err.Description + + +End Function + + +Function getGrandTotal(current_row As Integer) + On Error GoTo eh + + Dim output As String + + output = Worksheets(ADJUSTMENT_WORKSHEET).Range(GRANDTOTAL_COL & CStr(current_row)).Text + If (InStr(output, "###") >= 0) Then + output = Worksheets(ADJUSTMENT_WORKSHEET).Range(GRANDTOTAL_COL & CStr(current_row)).Value + End If + +Done: + getGrandTotal = output + Exit Function + +eh: + Debug.print "getGrandTotal:Error: " & Err.Description & ":" & CStr(current_row) + +End Function + +Function getAccount(current_row As Integer) + On Error GoTo eh + + Dim output As String + + output = Worksheets(ADJUSTMENT_WORKSHEET).Range(ACCOUNT_COL & CStr(current_row)).Text + If (InStr(output, "###") >= 0) Then + output = Worksheets(ADJUSTMENT_WORKSHEET).Range(ACCOUNT_COL & CStr(current_row)).Value + End If + +Done: + getAccount = output + Exit Function + +eh: + Debug.print "getAccount:Error: " & Err.Description & ":" & CStr(current_row) + + appendRemarks current_row, "account format error, skipping" + +End Function + +Function getAmountInFunc(current_row As Integer) + On Error GoTo eh + + Dim output As String + + output = Worksheets(ADJUSTMENT_WORKSHEET).Range(AMOUNT_IN_FUNC_COL & CStr(current_row)).Text + If (InStr(output, "###") >= 0) Then + output = Worksheets(ADJUSTMENT_WORKSHEET).Range(AMOUNT_IN_FUNC_COL & CStr(current_row)).Value + End If + +Done: + getAmountInFunc = output + Exit Function + +eh: + 'MsgBox "getAmountInFunc:Error: " & Err.Description & ":" & CStr(current_row) + + appendRemarks current_row, "amount in func format error, skipping" + Err.Raise "Error in amount_in_func_format" + +End Function + +Function checkOutputCellReady(current_row As Integer) + On Error GoTo eh + + Dim output As Boolean + output = True + + Dim account_cell As Variant + account_cell = Worksheets(ADJUSTMENT_WORKSHEET).Range(ACCOUNT_COL & CStr(current_row)) + + If (IsEmpty(account_cell) = False) Then + output = False + End If + +Done: + checkOutputCellReady = output + Exit Function + +eh: + Debug.print "checkOutputCellReady:Error: " & Err.Description + + +End Function + +Function checkCellFormat(test_cell As Variant) + On Error GoTo eh + + Dim Msg As String + + Msg = "no match" + Select Case IsEmpty(test_cell) + Case True + Msg = "General." + Case Else + Select Case IsNumeric(test_cell) + Case True + Msg = "Number." + Case Else + Select Case IsDate(test_cell) + Case True + Msg = "Date." + Case Else + Msg = "Text." + End Select + End Select + End Select + ' debug.print "checkCellFormat:" & test_cell.Address & ":" & Msg + +Done: + checkCellFormat = Msg + Exit Function + +eh: + Debug.print "checkCellFormat:Error: " & Err.Description + + +End Function + + + +Function checkCurrentRowFormatValid(current_row As Integer) + On Error GoTo eh + + Dim test_cell As Variant + Dim output As Boolean + output = True + + test_cell = Worksheets(ADJUSTMENT_WORKSHEET).Range(ISIN_CODE_ESTD_COL & CStr(current_row)) + If "Text." = checkCellFormat(test_cell) Then + Debug.Print "ISIN_CODE_ESTD_COL:check ok" + Else + Debug.Print "ISIN_CODE_ESTD_COL:check failed" + Debug.Print checkCellFormat(test_cell) + output = False + End If + + test_cell = Worksheets(ADJUSTMENT_WORKSHEET).Range(BOOK_COL & CStr(current_row)) + If "Text." = checkCellFormat(test_cell) Then + Debug.Print "BOOK_COL:check ok" + Else + Debug.Print "BOOK_COL:check failed" + Debug.Print checkCellFormat(test_cell) + output = False + End If + + test_cell = Worksheets(ADJUSTMENT_WORKSHEET).Range(BUY_COL & CStr(current_row)) + + If "Number." = checkCellFormat(test_cell) Then + Debug.Print "BUY_COL:check ok" + Else + Debug.Print "BUY_COL:check failed" + Debug.Print checkCellFormat(test_cell) + output = False + End If + + test_cell = Worksheets(ADJUSTMENT_WORKSHEET).Range(GRANDTOTAL_COL & CStr(current_row)) + If "Number." = checkCellFormat(test_cell) Then + Debug.Print "GRANDTOTAL_COL:check ok" + Else + Debug.Print "GRANDTOTAL_COL:check failed" + Debug.Print checkCellFormat(test_cell) + output = False + End If + + test_cell = Worksheets(ADJUSTMENT_WORKSHEET).Range(PCCO_COL & CStr(current_row)) + If "Text." = checkCellFormat(test_cell) Then + Debug.Print "PCCO_COL:check ok" + Else + Debug.Print "PCCO_COL:check failed" + Debug.Print checkCellFormat(test_cell) + output = False + End If + + test_cell = Worksheets(ADJUSTMENT_WORKSHEET).Range(AMOUNT_IN_FUNC_COL & CStr(current_row)) + If "Number." = checkCellFormat(test_cell) Then + Debug.Print "AMOUNT_IN_FUNC_COL:check ok" + Else + Debug.Print "AMOUNT_IN_FUNC_COL:check failed" + Debug.Print checkCellFormat(test_cell) + output = False + End If + + test_cell = Worksheets(ADJUSTMENT_WORKSHEET).Range(BMF_ID_COL & CStr(current_row)) + If "Number." = checkCellFormat(test_cell) Then + Debug.Print "BMF_ID_COL:check ok" + Else + Debug.Print "BMF_ID_COL:check failed" + Debug.Print checkCellFormat(test_cell) + output = False + End If + + + test_cell = Worksheets(ADJUSTMENT_WORKSHEET).Range(ACCOUNT_COL & CStr(current_row)) + If "General." = checkCellFormat(test_cell) Then + Debug.Print "ACCOUNT_COL:check ok" + Else + Debug.Print "ACCOUNT_COL:check failed" + Debug.Print checkCellFormat(test_cell) + output = False + End If + + test_cell = Worksheets(ADJUSTMENT_WORKSHEET).Range(DEBIT_COL & CStr(current_row)) + If "General." = checkCellFormat(test_cell) Then + Debug.Print "DEBIT_COL:check ok" + Else + Debug.Print "DEBIT_COL:check failed" + Debug.Print checkCellFormat(test_cell) + output = False + End If + + test_cell = Worksheets(ADJUSTMENT_WORKSHEET).Range(CREDIT_COL & CStr(current_row)) + If "General." = checkCellFormat(test_cell) Then + Debug.Print "CREDIT_COL:check ok" + Else + Debug.Print "CREDIT_COL:check failed" + Debug.Print checkCellFormat(test_cell) + output = False + End If + + test_cell = Worksheets(ADJUSTMENT_WORKSHEET).Range(REMARKS_COL & CStr(current_row)) + If "General." = checkCellFormat(test_cell) Then + Debug.Print "REMARKS_COL:check ok" + Else + Debug.Print "REMARKS_COL:check failed" + Debug.Print checkCellFormat(test_cell) + output = False + End If + +Done: + checkCurrentRowFormatValid = output + Exit Function + +eh: + Debug.print "checkCurrentRowFormatValid:Error: " & Err.Description + + +End Function + + +Function checkCurrentRowValueValid(current_row As Integer) + On Error GoTo eh + + Dim output As Boolean + output = True + + If (checkIfGrandTotalRefNotFound(current_row) = True) Then + Debug.Print "grand total ref not found" + appendRemarks current_row, "grand total reference not found, skipping" + output = False + End If + + If (checkIfAmountInFuncRefNotFound(current_row) = True) Then + Debug.Print "amount in func ref not found" + appendRemarks current_row, "amount in func reference not found, skipping" + output = False + End If + + If (checkIfPCCORefNotFound(current_row) = True) Then + Debug.Print "PCCO ref not found" + appendRemarks current_row, "PCCO reference not found, skipping" + output = False + End If + + If output Then + + Dim grand_total_str As String + Dim amount_in_func_str As String + Dim pcco_str As String + + grand_total_str = getGrandTotal(current_row) + amount_in_func_str = getAmountInFunc(current_row) + pcco_str = getPCCO(current_row) + + ' Debug.print InStr(pcco_str, "Error") >= 0 + ' Debug.print InStr(amount_in_func_str, "N/A") >= 0 + ' Debug.print InStr(grand_total_str, "N/A") >= 0 + + If (Trim(pcco_str) = "" Or InStr(pcco_str, "N/A") > 0 Or InStr(pcco_str, "Error") > 0) Then + output = False + End If + + If (Trim(amount_in_func_str) = "" Or InStr(amount_in_func_str, "N/A") > 0 Or InStr(amount_in_func_str, "Error") > 0) Then + output = False + End If + + If (Trim(grand_total_str) = "" Or InStr(grand_total_str, "N/A") > 0 Or InStr(grand_total_str, "Error") > 0) Then + output = False + End If + + Else + Debug.Print "skipping as grand total ref not found" + End If + +Done: + checkCurrentRowValueValid = output + Exit Function + +eh: + 'MsgBox "checkCurrentRowValueValid:Error: " & Err.Description + 'Stop + appendRemarks current_row, "row value not valid" + checkCurrentRowValueValid = false + +End Function + +Function checkFullFillCasePCCOCode_P1375000Situation_1(grand_total As Currency, amount_in_func As Currency) + On Error GoTo eh + + ' ### Special case (if PCCO Code = P1375000): + ' ### Situation 1: + ' if Grand total + amount in func > 0 (missing example) + Dim output As Boolean + output = (grand_total + amount_in_func > 0) + +Done: + checkFullFillCasePCCOCode_P1375000Situation_1 = output + Exit Function + +eh: + Debug.print "checkFullFillCasePCCOCode_P1375000Situation_1:Error: " & Err.Description + + +End Function + +Function checkFullFillCasePCCOCode_P1375000Situation_2(grand_total As Currency, amount_in_func As Currency) + On Error GoTo eh + + ' ### Special case (if PCCO Code = P1375000): + ' ### Situation 2: + ' if Grand total + amount in func < 0 (row 21) + Dim output As Boolean + output = (grand_total + amount_in_func < 0) + +Done: + checkFullFillCasePCCOCode_P1375000Situation_2 = output + Exit Function + +eh: + Debug.print "checkFullFillCasePCCOCode_P1375000Situation_2:Error: " & Err.Description + + +End Function + +Function checkFullFillCasePCCOCode_P1375000Situation_3(grand_total As Currency, amount_in_func As Currency) + On Error GoTo eh + + ' ### Special case (if PCCO Code = P1375000): + ' ### Situation 3: + ' if Grand total + amount in func = 0 + ' - do nothing + Dim output As Boolean + output = (grand_total + amount_in_func = 0) + +Done: + checkFullFillCasePCCOCode_P1375000Situation_3 = output + Exit Function + +eh: + Debug.print "checkFullFillCasePCCOCode_P1375000Situation_3:Error: " & Err.Description + + +End Function + +Function checkFullFillCaseCommonSituation_1(grand_total As Currency, amount_in_func As Currency) + On Error GoTo eh + + ' ### Situation 1: + ' if Grand total + amount in func > 0 (row 8 ?) + Dim output As Boolean + output = (grand_total + amount_in_func > 0) + +Done: + checkFullFillCaseCommonSituation_1 = output + Exit Function + +eh: + Debug.print "checkFullFillCaseCommonSituation_1:Error: " & Err.Description + + +End Function + +Function checkFullFillCaseCommonSituation_2(grand_total As Currency, amount_in_func As Currency) + On Error GoTo eh + + ' ### Situation 2: + ' if Grand total + amount in func < 0 (row 8 ?)' + Dim output As Boolean + output = (grand_total + amount_in_func < 0) + +Done: + checkFullFillCaseCommonSituation_2 = output + Exit Function + +eh: + Debug.print "checkFullFillCaseCommonSituation_2:Error: " & Err.Description + + +End Function + +Function checkFullFillCaseCommonSituation_3(grand_total As Currency, amount_in_func As Currency) + On Error GoTo eh + + ' ### Situation 3: + ' if Grand total + amount in func = 0 + Dim output As Boolean + output = (grand_total + amount_in_func = 0) + +Done: + checkFullFillCaseCommonSituation_3 = output + Exit Function + +eh: + Debug.print "checkFullFillCaseCommonSituation_3:Error: " & Err.Description + +End Function + +Function checkIfReferenceNotFound(cell As Variant) + On Error GoTo eh + + Dim test_text As Variant + test_text = cell.Text + Dim output As Boolean + + output = (InStr(test_text, "#REF!") > 0) + +Done: + checkIfReferenceNotFound = output + Exit Function + +eh: + Debug.print "checkIfReferenceNotFound:Error: " & Err.Description + + +End Function + +Function checkIfGrandTotalRefNotFound(current_row As Integer) + On Error GoTo eh + + Dim test_cell As Variant + test_cell = Worksheets(ADJUSTMENT_WORKSHEET).Range(GRANDTOTAL_COL & CStr(current_row)) + +Done: + checkIfGrandTotalRefNotFound = checkIfReferenceNotFound(Worksheets(ADJUSTMENT_WORKSHEET).Range(GRANDTOTAL_COL & CStr(current_row))) + Exit Function + +eh: + Debug.print "checkIfGrandTotalRefNotFound:Error: " & Err.Description & ":" & GRANDTOTAL_COL & CStr(current_row) + + +End Function + +Function checkIfPCCORefNotFound(current_row As Integer) + On Error GoTo eh + + Dim test_cell As Variant + test_cell = Worksheets(ADJUSTMENT_WORKSHEET).Range(PCCO_COL & CStr(current_row)) + +Done: + checkIfPCCORefNotFound = checkIfReferenceNotFound(Worksheets(ADJUSTMENT_WORKSHEET).Range(PCCO_COL & CStr(current_row))) + Exit Function + +eh: + Debug.print "checkIfPCCORefNotFound:Error: " & Err.Description & ":" & PCCO_COL & CStr(current_row) + + +End Function + +Function checkIfAmountInFuncRefNotFound(current_row As Integer) + On Error GoTo eh + + Dim test_cell As Variant + test_cell = Worksheets(ADJUSTMENT_WORKSHEET).Range(AMOUNT_IN_FUNC_COL & CStr(current_row)) + +Done: + checkIfAmountInFuncRefNotFound = checkIfReferenceNotFound(Worksheets(ADJUSTMENT_WORKSHEET).Range(AMOUNT_IN_FUNC_COL & CStr(current_row))) + Exit Function + +eh: + Debug.print "checkIfAmountInFuncRefNotFound:Error: " & Err.Description & ":" & AMOUNT_IN_FUNC_COL & CStr(current_row) + +End Function + +Function applyCommonSituation_1(current_row As Integer) + On Error GoTo eh + + Dim net_var As Variant + Dim grand_total_var As Variant + Dim amount_in_func_var As Variant + + grand_total_var = CDec(getGrandTotal(current_row)) + amount_in_func_var = CDec(getAmountInFunc(current_row)) + net_var = grand_total_var + amount_in_func_var + +' current row +' - Account column: A1311, Debit column: Grand Total+amount in func + writeAccount current_row, AC_1311 + writeDebit current_row, net_var + +' - add row: +' - account:1020, +' - debit column: Grand Total+amount in func + insertNewRowBelow current_row + current_row = current_row + 1 + writeAccount current_row, AC_1020 + writeDebit current_row, net_var + +' - add row: +' - account:NA8600, +' - debit: grand total + amount in func + insertNewRowBelow current_row + current_row = current_row + 1 + writeAccount current_row, AC_8600 + writeDebit current_row, net_var + +' - add row: +' - account NA8601, +' - credit: grand total + amount in func + insertNewRowBelow current_row + current_row = current_row + 1 + writeAccount current_row, AC_8601 + writeCredit current_row, net_var + +Done: + applyCommonSituation_1 = True + Exit Function + +eh: + Debug.print "applyCommonSituation_1:Error: " & Err.Description + + +End Function + +Function applyCommonSituation_2(current_row As Integer) + On Error GoTo eh + + Dim net_var As Variant + Dim grand_total_var As Variant + Dim amount_in_func_var As Variant + + grand_total_var = CDec(getGrandTotal(current_row)) + amount_in_func_var = CDec(getAmountInFunc(current_row)) + net_var = grand_total_var + amount_in_func_var + +' if Grand total + amount in func < 0 (row 8 ?) +' - Account column: A1311, +' - Credit column: Grand Total+amount in func + writeAccount current_row, AC_1311 + writeCredit current_row, net_var + +' - add row: +' - account:1020, +' - credit column: Grand Total+amount in func + insertNewRowBelow current_row + current_row = current_row + 1 + writeAccount current_row, AC_1020 + writeCredit current_row, net_var + +' - add row: +' - account:NA8700, +' - credit: grand total + amount in func + insertNewRowBelow current_row + current_row = current_row + 1 + writeAccount current_row, AC_8700 + writeCredit current_row, net_var + +' - add row: +' - account NA8701, +' - debit: grand total + amount in func + insertNewRowBelow current_row + current_row = current_row + 1 + writeAccount current_row, AC_8701 + writeDebit current_row, net_var + +Done: + applyCommonSituation_2 = True + Exit Function + +eh: + Debug.print "applyCommonSituation_2:Error: " & Err.Description + + +End Function + +Function applyCommonSituation_3(current_row As Integer) + On Error GoTo eh + +' if Grand total + amount in func = 0 +' - do nothing + applyCommonSituation_3 = True + +Done: + applyCommonSituation_3 = True + Exit Function + +eh: + Debug.print "applyCommonSituation_3:Error: " & Err.Description + + +End Function + +Function applyPcco1375Situation_1(current_row As Integer) + On Error GoTo eh + + Dim net_var As Variant + Dim grand_total_var As Variant + Dim amount_in_func_var As Variant + + grand_total_var = CDec(getGrandTotal(current_row)) + amount_in_func_var = CDec(getAmountInFunc(current_row)) + net_var = grand_total_var + amount_in_func_var + + ' - Account + ' - column: P1375, + ' - Debit column: Grand Total+amount in func + writeAccount current_row, AC_1375 + writeDebit current_row, net_var + + ' - add row: + ' - account:2020, + ' - debit column: Grand Total+amount in func + insertNewRowBelow current_row + current_row = current_row + 1 + writeAccount current_row, AC_2020 + writeDebit current_row, net_var + + ' - add row: + ' - account:NA8600, + ' - debit: grand total + amount in func + insertNewRowBelow current_row + current_row = current_row + 1 + writeAccount current_row, AC_8600 + writeDebit current_row, net_var + + ' - add row: + ' - account NA8601, + ' - credit: grand total + amount in func + insertNewRowBelow current_row + current_row = current_row + 1 + writeAccount current_row, AC_8601 + writeCredit current_row, net_var + + applyPcco1375Situation_1 = True + +Done: + applyPcco1375Situation_1 = True + Exit Function + +eh: + Debug.print "applyPcco1375Situation_1:Error: " & Err.Description + + +End Function + +Function applyPcco1375Situation_2(current_row As Integer) + On Error GoTo eh + + Dim net_var As Variant + Dim grand_total_var As Variant + Dim amount_in_func_var As Variant + + grand_total_var = CDec(getGrandTotal(current_row)) + amount_in_func_var = CDec(getAmountInFunc(current_row)) + net_var = grand_total_var + amount_in_func_var + +' - Account +' - column: P1375, +' - Credit column: Grand Total+amount in func + writeAccount current_row, AC_1375 + writeCredit current_row, net_var + +' - add row: +' - account:2020, +' - credit column: Grand Total+amount in func + insertNewRowBelow current_row + current_row = current_row + 1 + writeAccount current_row, AC_2020 + writeCredit current_row, net_var + +' - add row: +' - account:8700, +' - credit: grand total + amount in func + insertNewRowBelow current_row + current_row = current_row + 1 + writeAccount current_row, AC_8700 + writeCredit current_row, net_var + +' - add row: +' - account 8701, +' - debit: grand total + amount in func + insertNewRowBelow current_row + current_row = current_row + 1 + writeAccount current_row, AC_8701 + writeDebit current_row, net_var + + applyPcco1375Situation_2 = True + +Done: + applyPcco1375Situation_2 = True + Exit Function + +eh: + Debug.print "applyPcco1375Situation_2:Error: " & Err.Description + + +End Function + +Function applyPcco1375Situation_3(current_row As Integer) + On Error GoTo eh + +' - do nothing + applyPcco1375Situation_3 = True + +Done: + applyPcco1375Situation_3 = True + Exit Function + +eh: + Debug.print "applyPcco1375Situation_3:Error: " & Err.Description + + +End Function + + +Sub test() + ' Debug.Assert True = isCurrentRowNeedToProcess("7") + ' Debug.Assert False = isCurrentRowNeedToProcess("180") + ' debug.assert False = isAllDone ("7") + ' debug.assert True = isAllDone ("180") + + ' debug.assert False = checkFullFillCaseCommonSituation_1(-10,1) + ' debug.assert False = checkFullFillCaseCommonSituation_1(1,-10) + ' debug.assert False = checkFullFillCaseCommonSituation_1(-10,-10) + ' debug.assert False = checkFullFillCaseCommonSituation_1(0,0) + ' debug.assert True = checkFullFillCaseCommonSituation_1(0,1) + ' debug.assert True = checkFullFillCaseCommonSituation_1(1,0) + ' debug.assert True = checkFullFillCaseCommonSituation_1(1,1) + + ' debug.assert True = checkFullFillCaseCommonSituation_2(-10,1) + ' debug.assert True = checkFullFillCaseCommonSituation_2(1,-10) + ' debug.assert True = checkFullFillCaseCommonSituation_2(-10,-10) + ' debug.assert False = checkFullFillCaseCommonSituation_2(0,0) + ' debug.assert False = checkFullFillCaseCommonSituation_2(0,1) + ' debug.assert False = checkFullFillCaseCommonSituation_2(1,0) + ' debug.assert False = checkFullFillCaseCommonSituation_2(1,1) + + ' debug.assert True = checkFullFillCaseCommonSituation_3(0,0) + ' debug.assert False = checkFullFillCaseCommonSituation_3(1,1) + ' debug.assert False = checkFullFillCaseCommonSituation_3(-10,-10) + ' debug.assert False = checkFullFillCaseCommonSituation_3(1,0) + ' debug.assert False = checkFullFillCaseCommonSituation_3(0,1) + + ' debug.print Worksheets("Adjustment_TEST").Range("G86") + + init + + current_row = 29 + ' amount_in_func_str = getAmountInFunc(current_row) + ' pcco_str = getPCCO(current_row) + + ' debug.print current_row + ' debug.print grand_total_str + ' debug.print checkIfGrandTotalRefNotFound(current_row) + Debug.Print checkCurrentRowValueValid(current_row) + + ' current_row_value_valid = False + ' current_row_value_valid = checkCurrentRowValueValid(pcco_str, amount_in_func_str, grand_total_str) + ' check_next_row_ready = False + ' check_next_row_ready = checkOutputCellReady(current_row) + +End Sub + +Function getLastCheckRow(first_row As Integer) + getLastCheckRow = first_row + 10 +End Function + +Function insertNewRowBelow(current_row As Integer) + Range("A" & current_row + 1).EntireRow.Insert +End Function + +Function isAllDone(input_row As Integer) + On Error GoTo eh + + Dim cell_value As Currency + Dim output As Boolean + Dim i As Integer + output = True + + last_check_row = getLastCheckRow(input_row) + For i = input_row To last_check_row + If (isCurrentRowNeedToProcess(i) = True) Then + output = False + Exit For + End If + Next i + + isAllDone = output + +Done: + isAllDone = output + Exit Function + +eh: + Debug.print "isAllDone:Error: " & Err.Description + + +End Function + +Function isCurrentRowNeedToProcess(input_row As Integer) + On Error GoTo eh + + Dim output As Boolean + Dim cell_value As Currency + Dim input_cell As String + input_cell = GRANDTOTAL_COL & input_row + +Done: + isCurrentRowNeedToProcess = Not (IsEmpty(Worksheets(ADJUSTMENT_WORKSHEET).Range(input_cell).Value)) + Exit Function + +eh: + Debug.print "isCurrentRowNeedToProcess:Error: " & Err.Description + + +End Function + +Sub Main() + On Error GoTo eh + + Debug.Print "start a new run" + + init + + While isAllDone(current_row) = False + ' While current_row < 9 + Debug.Print "processing row: " & current_row + + Debug.Print checkCurrentRowFormatValid(current_row) + + current_row_value_valid = False + current_row_value_valid = checkCurrentRowValueValid(current_row) + check_next_row_ready = False + check_next_row_ready = checkOutputCellReady(current_row) + check_row_format_valid = False + check_row_format_valid = checkCurrentRowFormatValid(current_row) + + If (current_row_value_valid And check_next_row_ready and check_row_format_valid) Then + ' input considered valid after this line + + Dim grand_total_str As String + Dim amount_in_func_str As String + Dim pcco_str As String + + grand_total_str = getGrandTotal(current_row) + amount_in_func_str = getAmountInFunc(current_row) + pcco_str = getPCCO(current_row) + + Debug.Print "before" + Debug.Print grand_total_str + Debug.Print "pass" + grand_total_curr = CCur(grand_total_str) + + amount_in_func_curr = CCur(amount_in_func_str) + + If (pcco_str = "P1375000") Then + If (checkFullFillCasePCCOCode_P1375000Situation_1(grand_total_curr, amount_in_func_curr) = True) Then + writeRemarks current_row, "P1375000 common sit 1" + applyPcco1375Situation_1 (current_row) + ElseIf (checkFullFillCasePCCOCode_P1375000Situation_2(grand_total_curr, amount_in_func_curr) = True) Then + writeRemarks current_row, "P1375000 common sit 2" + applyPcco1375Situation_2 (current_row) + ElseIf (checkFullFillCasePCCOCode_P1375000Situation_3(grand_total_curr, amount_in_func_curr) = True) Then + writeRemarks current_row, "P1375000 common sit 3" + applyPcco1375Situation_3 (current_row) + Else + Debug.print "missing pcco 1375 situation" + End If + + ElseIf (pcco_str = "N/A") Then + Debug.print "pcco value is N/A" + + Else + If (checkFullFillCaseCommonSituation_1(grand_total_curr, amount_in_func_curr) = True) Then + writeRemarks current_row, "common sit 1" + applyCommonSituation_1 (current_row) + ElseIf (checkFullFillCaseCommonSituation_2(grand_total_curr, amount_in_func_curr) = True) Then + writeRemarks current_row, "common sit 2" + applyCommonSituation_2 (current_row) + ElseIf (checkFullFillCaseCommonSituation_3(grand_total_curr, amount_in_func_curr) = True) Then + writeRemarks current_row, "common sit 3" + applyCommonSituation_3 (current_row) + Else + Debug.print "missing situation" + End If + End If + + Else + + if getAccount(current_row) = AC_1020 then + appendRemarks current_row, "output row" + elseif getAccount(current_row) = AC_8600 then + appendRemarks current_row, "output row" + elseif getAccount(current_row) = AC_8601 then + appendRemarks current_row, "output row" + elseif getAccount(current_row) = AC_8700 then + appendRemarks current_row, "output row" + elseif getAccount(current_row) = AC_8701 then + appendRemarks current_row, "output row" + elseif getAccount(current_row) = AC_1311 then + appendRemarks current_row, "output row" + elseif getAccount(current_row) = AC_1375 then + appendRemarks current_row, "output row" + elseif getAccount(current_row) = AC_2020 then + appendRemarks current_row, "output row" + + else + Debug.Print "input is not valid, skipping row" + appendRemarks current_row, "input is not valid, skipping row" + + If (checkOutputCellReady(current_row)) Then + If (checkCurrentRowValueValid(current_row)) Then + Else + ' appendRemarks current_row, "input is not valid" + End If + End If + end if + + End If + + current_row = current_row + 1 + Wend + + +Done: + Debug.Print "done" + Exit Sub + +eh: + writeRemarks current_row,"error found" + 'MsgBox "Main:Error: " & Err.Description + 'Stop + +End Sub + +Sub helloworld() + ' debug.print isCurrentRowNeedToProcess ("7") + ' debug.print isCurrentRowNeedToProcess ("180") + + ' debug.print isAllDone ("7") + ' debug.print isAllDone ("180") + +End Sub + +Sub ResetExcelTest() + Worksheets("Sheet1").Activate + Columns("B:Q").Copy + + Worksheets("Adjustment").Activate + Range("B1").Select + ActiveSheet.Paste + + Range("B1").Select +End Sub diff --git a/task1/_03_submit/dev.bat b/task1/_03_submit/dev.bat new file mode 100644 index 0000000..42ea370 --- /dev/null +++ b/task1/_03_submit/dev.bat @@ -0,0 +1 @@ +xlwings vba edit diff --git a/task1/_03_submit/package.json b/task1/_03_submit/package.json new file mode 100644 index 0000000..46d0fe8 --- /dev/null +++ b/task1/_03_submit/package.json @@ -0,0 +1,13 @@ +{ + "name": "adjustment", + "version": "1.0.0", + "description": "adjustment", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "gitUpdate":"git add . && git commit -m \"update, \"" + }, + "keywords": [], + "author": "", + "license": "ISC" +} diff --git a/task1/_04_submit - Copy/.gitkeep b/task1/_04_submit - Copy/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/task1/_04_submit - Copy/5u2yvU318F.mp4 b/task1/_04_submit - Copy/5u2yvU318F.mp4 new file mode 100644 index 0000000..b3835ba --- /dev/null +++ b/task1/_04_submit - Copy/5u2yvU318F.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3e69458190608ab7c2d32f956ef6ff7ef198182d0bcc6d692cb6a4387a1082c1 +size 1923256 diff --git a/task1/_04_submit - Copy/Example file updated.xlsx b/task1/_04_submit - Copy/Example file updated.xlsx new file mode 100644 index 0000000..888abd1 Binary files /dev/null and b/task1/_04_submit - Copy/Example file updated.xlsx differ diff --git a/task1/_04_submit - Copy/Example_file_working_2016_test5.xlsm b/task1/_04_submit - Copy/Example_file_working_2016_test5.xlsm new file mode 100644 index 0000000..82bd47a Binary files /dev/null and b/task1/_04_submit - Copy/Example_file_working_2016_test5.xlsm differ diff --git a/task1/_04_submit - Copy/Example_file_working_2016_test5_deliver.xlsm b/task1/_04_submit - Copy/Example_file_working_2016_test5_deliver.xlsm new file mode 100644 index 0000000..2befc08 Binary files /dev/null and b/task1/_04_submit - Copy/Example_file_working_2016_test5_deliver.xlsm differ diff --git a/task1/_04_submit - Copy/Example_file_working_2016_test6.xlsm b/task1/_04_submit - Copy/Example_file_working_2016_test6.xlsm new file mode 100644 index 0000000..caff09d Binary files /dev/null and b/task1/_04_submit - Copy/Example_file_working_2016_test6.xlsm differ diff --git a/task1/_04_submit - Copy/Example_file_working_2016_test6_deliver.xlsm b/task1/_04_submit - Copy/Example_file_working_2016_test6_deliver.xlsm new file mode 100644 index 0000000..5efe848 Binary files /dev/null and b/task1/_04_submit - Copy/Example_file_working_2016_test6_deliver.xlsm differ diff --git a/task1/_04_submit - Copy/Module1.bas b/task1/_04_submit - Copy/Module1.bas new file mode 100644 index 0000000..7d627e0 --- /dev/null +++ b/task1/_04_submit - Copy/Module1.bas @@ -0,0 +1,19 @@ +Attribute VB_Name = "Module1" +Sub Macro6() +Attribute Macro6.VB_ProcData.VB_Invoke_Func = " \n14" +' +' Macro6 Macro +' + +' + Sheets("Sheet1").Select + Columns("B:P").Select + Range("P1").Activate + Selection.Copy + Sheets("Adjustment").Select + Columns("B:P").Select + Range("P1").Activate + Sheets("Adjustment").Paste + + +End Sub diff --git a/task1/_04_submit - Copy/ThisWorkbook.cls b/task1/_04_submit - Copy/ThisWorkbook.cls new file mode 100644 index 0000000..cfcfd85 --- /dev/null +++ b/task1/_04_submit - Copy/ThisWorkbook.cls @@ -0,0 +1,1421 @@ +' change log: +' 2023-09-20, update criteria and procedure +' 2023-09-19, update error handling +' 2023-09-18, update for "################" when zoom out + +Option Explicit + +Dim first_row As Integer +Dim current_row As Integer +Dim last_check_row As Integer + +' Dim amount_in_func As String +Dim starting_cell As String + +Dim grand_total_curr As Currency +Dim grand_total_str As String + +Dim amount_in_func_curr As Currency +Dim amount_in_func_str As String + +Dim pcco_str As String + +Dim ISIN_CODE_ESTD_COL As String +Dim BOOK_COL As String +Dim BUY_COL As String +Dim SELL_COL As String +Dim GRANDTOTAL_COL As String +Dim PCCO_COL As String +Dim AMOUNT_IN_FUNC_COL As String +Dim BMF_ID_COL As String + +Dim ACCOUNT_COL As String +Dim DEBIT_COL As String +Dim CREDIT_COL As String + +Dim REMARKS_COL As String + +Dim PCEC_HEADER_CELL As String +Dim HEADER_ROW As Integer +Dim PCEC_COL As String +Dim PCEC_COL_LABEL As String + +Dim ADJUSTMENT_WORKSHEET As String +Dim ADJUSTMENT_TEST_WORKSHEET As String + +Dim AC_1020 As String +Dim AC_8600 As String +Dim AC_8601 As String +Dim AC_8700 As String +Dim AC_8701 As String +Dim AC_1311 As String +Dim AC_1375 As String +Dim AC_2020 As String + +Dim PCEC_302210 As String +Dim PCEC_921810 As String +Dim PCEC_922910 As String +Dim PCEC_921910 As String +Dim PCEC_302410 As String +Dim PCEC_922810 As String + +Dim PCCO_A1311000 As String +Dim PCCO_92100100 As String +Dim PCCO_98900100 As String +Dim PCCO_98900200 As String +Dim PCCO_P1375000 As String +Dim PCCO_92200100 As String + +Dim current_row_value_valid As Boolean +Dim check_next_row_ready As Boolean +Dim check_row_format_valid As Boolean + +Sub init() + On Error GoTo eh + + HEADER_ROW = 6 + first_row = 7 + current_row = first_row + last_check_row = getLastCheckRow(current_row) + + ' amount_in_func = "J" + ISIN_CODE_ESTD_COL = "C" + BOOK_COL = "D" + BUY_COL = "E" + SELL_COL = "F" + GRANDTOTAL_COL = "G" + PCEC_COL = "I" + + ' after insert + PCCO_COL = "J" + AMOUNT_IN_FUNC_COL = "K" + BMF_ID_COL = "L" + + ACCOUNT_COL = "N" + DEBIT_COL = "O" + CREDIT_COL = "P" + + REMARKS_COL = "R" + + PCEC_HEADER_CELL = PCEC_COL & CStr(HEADER_ROW) + + starting_cell = GRANDTOTAL_COL & first_row + + AC_1020 = "1020" + AC_8600 = "8600" + AC_8601 = "8601" + AC_8700 = "8700" + AC_8701 = "8701" + AC_1311 = "1311" + AC_1375 = "1375" + AC_2020 = "2020" + + PCEC_302210 = "302210" + PCEC_921810 = "921810" + PCEC_922810 = "922810" + PCEC_922910 = "922910" + PCEC_921910 = "921910" + PCEC_302410 = "302410" + + PCCO_A1311000 = "A1311000" + PCCO_92100100 = "92100100" + PCCO_98900100 = "98900100" + PCCO_98900200 = "98900200" + PCCO_P1375000 = "P1375000" + PCCO_92200100 = "92200100" + + + 'ADJUSTMENT_WORKSHEET = "Adjustment_TEST" + ADJUSTMENT_WORKSHEET = "Adjustment" + + PCEC_COL_LABEL = "PCEC" + +Done: + Exit Sub + +eh: + Debug.Print "init:Error: " & Err.Description + + +End Sub + +Function fillRemarksLightBlue(current_row As Integer) + On Error GoTo eh + Worksheets(ADJUSTMENT_WORKSHEET).Range(REMARKS_COL & CStr(current_row)).Interior.Color = rgb(9, 132, 227) + Worksheets(ADJUSTMENT_WORKSHEET).Range(REMARKS_COL & CStr(current_row)).Font.Color = vbWhite + +Done: + Exit Function + +eh: + Debug.Print "fillRemarksLightBlue:Error: " & Err.Description + +End Function + +Function fillRemarksLightGreen(current_row As Integer) + On Error GoTo eh + Worksheets(ADJUSTMENT_WORKSHEET).Range(REMARKS_COL & CStr(current_row)).Interior.Color = rgb(39, 174, 96) + Worksheets(ADJUSTMENT_WORKSHEET).Range(REMARKS_COL & CStr(current_row)).Font.Color = vbWhite + +Done: + Exit Function + +eh: + Debug.Print "fillRemarksLightGreen:Error: " & Err.Description + +End Function + +Function fillRemarksLightRed(current_row As Integer) + On Error GoTo eh + Worksheets(ADJUSTMENT_WORKSHEET).Range(REMARKS_COL & CStr(current_row)).Interior.Color = rgb(214, 48, 49) + Worksheets(ADJUSTMENT_WORKSHEET).Range(REMARKS_COL & CStr(current_row)).Font.Color = vbWhite + +Done: + Exit Function + +eh: + Debug.Print "fillRemarksLightRed:Error: " & Err.Description + +End Function + +Function fillRemarksLightPurple(current_row As Integer) + On Error GoTo eh + Worksheets(ADJUSTMENT_WORKSHEET).Range(REMARKS_COL & CStr(current_row)).Interior.Color = rgb(108, 92, 231) + Worksheets(ADJUSTMENT_WORKSHEET).Range(REMARKS_COL & CStr(current_row)).Font.Color = vbWhite + +Done: + Exit Function + +eh: + Debug.Print "fillRemarksLightPurple:Error: " & Err.Description + +End Function + +Function fillRemarksLightYellow(current_row As Integer) + On Error GoTo eh + Worksheets(ADJUSTMENT_WORKSHEET).Range(REMARKS_COL & CStr(current_row)).Interior.Color = rgb(253, 203, 110) + Worksheets(ADJUSTMENT_WORKSHEET).Range(REMARKS_COL & CStr(current_row)).Font.Color = vbWhite + +Done: + Exit Function + +eh: + Debug.Print "fillRemarksLightYellow:Error: " & Err.Description + +End Function + + +Function fillRemarksLightCyan(current_row As Integer) + On Error GoTo eh + Worksheets(ADJUSTMENT_WORKSHEET).Range(REMARKS_COL & CStr(current_row)).Interior.Color = rgb(0, 206, 201) + Worksheets(ADJUSTMENT_WORKSHEET).Range(REMARKS_COL & CStr(current_row)).Font.Color = vbWhite + +Done: + Exit Function + +eh: + Debug.Print "fillRemarksLightCyan:Error: " & Err.Description + +End Function + +Function fillRemarksLightPink(current_row As Integer) + On Error GoTo eh + Worksheets(ADJUSTMENT_WORKSHEET).Range(REMARKS_COL & CStr(current_row)).Interior.Color = rgb(232, 67, 147) + Worksheets(ADJUSTMENT_WORKSHEET).Range(REMARKS_COL & CStr(current_row)).Font.Color = vbWhite + +Done: + Exit Function + +eh: + Debug.Print "fillRemarksLightPink:Error: " & Err.Description + +End Function + +Function writeRemarks(current_row As Integer, remarks As String) + On Error GoTo eh + + Worksheets(ADJUSTMENT_WORKSHEET).Range(REMARKS_COL & CStr(current_row)).Value = remarks + +Done: + Exit Function + +eh: + Debug.Print "writeRemarks:Error: " & Err.Description + +End Function + +Function appendRemarks(current_row As Integer, remarks As String) + On Error GoTo eh + + Dim original_string As String + original_string = Worksheets(ADJUSTMENT_WORKSHEET).Range(REMARKS_COL & CStr(current_row)).Value + Worksheets(ADJUSTMENT_WORKSHEET).Range(REMARKS_COL & CStr(current_row)).Value = remarks & "," & original_string + +Done: + Exit Function + +eh: + Debug.Print "appendRemarks:Error: " & Err.Description + +End Function + +Function writeCredit(current_row As Integer, credit As Variant) + On Error GoTo eh + + Worksheets(ADJUSTMENT_WORKSHEET).Range(CREDIT_COL & CStr(current_row)).Value = Abs(credit) + Worksheets(ADJUSTMENT_WORKSHEET).Range(CREDIT_COL & CStr(current_row)).NumberFormat = "#,##0.00" + +Done: + Exit Function + +eh: + Debug.Print "writeCredit:Error: " & Err.Description + + +End Function + +Function writeDebit(current_row As Integer, debit As Variant) + On Error GoTo eh + + Worksheets(ADJUSTMENT_WORKSHEET).Range(DEBIT_COL & CStr(current_row)).Value = Abs(debit) + Worksheets(ADJUSTMENT_WORKSHEET).Range(DEBIT_COL & CStr(current_row)).NumberFormat = "#,##0.00" + +Done: + Exit Function + +eh: + Debug.Print "writeDebit:Error: " & Err.Description + + +End Function + +Function writePCCO(current_row As Integer, pcec As String) + On Error GoTo eh + + Worksheets(ADJUSTMENT_WORKSHEET).Range(PCCO_COL & CStr(current_row)).Value = pcec + +Done: + Exit Function + +eh: + Debug.Print "writePCCO:Error: " & Err.Description + +End Function + +Function writePCEC(current_row As Integer, pcec As String) + On Error GoTo eh + + Worksheets(ADJUSTMENT_WORKSHEET).Range(PCEC_COL & CStr(current_row)).Value = pcec + +Done: + Exit Function + +eh: + Debug.Print "writePCEC:Error: " & Err.Description + +End Function + +Function writeAccount(current_row As Integer, account As String) + On Error GoTo eh + + Worksheets(ADJUSTMENT_WORKSHEET).Range(ACCOUNT_COL & CStr(current_row)).Value = account + +Done: + Exit Function + +eh: + Debug.Print "writeAccount:Error: " & Err.Description + + +End Function + +Function getPCCO(current_row As Integer) + On Error GoTo eh + + Dim output As String + output = Worksheets(ADJUSTMENT_WORKSHEET).Range(PCCO_COL & CStr(current_row)).Value + +Done: + getPCCO = output + Exit Function + +eh: + Debug.Print "getPCCO:Error: " & Err.Description + + +End Function + + +Function getGrandTotal(current_row As Integer) + On Error GoTo eh + + Dim output As String + + output = Worksheets(ADJUSTMENT_WORKSHEET).Range(GRANDTOTAL_COL & CStr(current_row)).Text + If (InStr(output, "###") >= 0) Then + output = Worksheets(ADJUSTMENT_WORKSHEET).Range(GRANDTOTAL_COL & CStr(current_row)).Value + End If + +Done: + getGrandTotal = output + Exit Function + +eh: + Debug.Print "getGrandTotal:Error: " & Err.Description & ":" & CStr(current_row) + +End Function + +Function getAccount(current_row As Integer) + On Error GoTo eh + + Dim output As String + + output = Worksheets(ADJUSTMENT_WORKSHEET).Range(ACCOUNT_COL & CStr(current_row)).Text + If (InStr(output, "###") >= 0) Then + output = Worksheets(ADJUSTMENT_WORKSHEET).Range(ACCOUNT_COL & CStr(current_row)).Value + End If + +Done: + getAccount = output + Exit Function + +eh: + Debug.Print "getAccount:Error: " & Err.Description & ":" & CStr(current_row) + + appendRemarks current_row, "account format error, skipping" + +End Function + +Function getAmountInFunc(current_row As Integer) + On Error GoTo eh + + Dim output As String + + output = Worksheets(ADJUSTMENT_WORKSHEET).Range(AMOUNT_IN_FUNC_COL & CStr(current_row)).Text + If (InStr(output, "###") >= 0) Then + output = Worksheets(ADJUSTMENT_WORKSHEET).Range(AMOUNT_IN_FUNC_COL & CStr(current_row)).Value + End If + +Done: + getAmountInFunc = output + Exit Function + +eh: + 'MsgBox "getAmountInFunc:Error: " & Err.Description & ":" & CStr(current_row) + + appendRemarks current_row, "amount in func format error, skipping" + Err.Raise "Error in amount_in_func_format" + +End Function + +Function checkOutputCellReady(current_row As Integer) + On Error GoTo eh + + Dim output As Boolean + output = True + + Dim account_cell As Variant + account_cell = Worksheets(ADJUSTMENT_WORKSHEET).Range(ACCOUNT_COL & CStr(current_row)) + + If (IsEmpty(account_cell) = False) Then + output = False + End If + +Done: + checkOutputCellReady = output + Exit Function + +eh: + Debug.Print "checkOutputCellReady:Error: " & Err.Description + + +End Function + +Function checkCellFormat(test_cell As Variant) + On Error GoTo eh + + Dim Msg As String + + Msg = "no match" + Select Case IsEmpty(test_cell) + Case True + Msg = "General." + Case Else + Select Case IsNumeric(test_cell) + Case True + Msg = "Number." + Case Else + Select Case IsDate(test_cell) + Case True + Msg = "Date." + Case Else + Msg = "Text." + End Select + End Select + End Select + ' debug.print "checkCellFormat:" & test_cell.Address & ":" & Msg + +Done: + checkCellFormat = Msg + Exit Function + +eh: + Debug.Print "checkCellFormat:Error: " & Err.Description + + +End Function + + + +Function checkCurrentRowFormatValid(current_row As Integer) + On Error GoTo eh + + Dim test_cell As Variant + Dim output As Boolean + output = True + + test_cell = Worksheets(ADJUSTMENT_WORKSHEET).Range(ISIN_CODE_ESTD_COL & CStr(current_row)) + If "Text." = checkCellFormat(test_cell) Then + Debug.Print "ISIN_CODE_ESTD_COL:check ok" + Else + Debug.Print "ISIN_CODE_ESTD_COL:check failed" + Debug.Print checkCellFormat(test_cell) + output = False + End If + + test_cell = Worksheets(ADJUSTMENT_WORKSHEET).Range(BOOK_COL & CStr(current_row)) + If "Text." = checkCellFormat(test_cell) Then + Debug.Print "BOOK_COL:check ok" + Else + Debug.Print "BOOK_COL:check failed" + Debug.Print checkCellFormat(test_cell) + output = False + End If + + test_cell = Worksheets(ADJUSTMENT_WORKSHEET).Range(BUY_COL & CStr(current_row)) + If "Number." = checkCellFormat(test_cell) or "General." = checkCellFormat(test_cell) Then + Debug.Print "BUY_COL:check ok" + Else + Debug.Print "BUY_COL:check failed" + appendRemarks current_row, "BUY_COL:check failed" + Debug.Print checkCellFormat(test_cell) + output = False + End If + + test_cell = Worksheets(ADJUSTMENT_WORKSHEET).Range(GRANDTOTAL_COL & CStr(current_row)) + If "Number." = checkCellFormat(test_cell) Then + Debug.Print "GRANDTOTAL_COL:check ok" + Else + Debug.Print "GRANDTOTAL_COL:check failed" + Debug.Print checkCellFormat(test_cell) + output = False + End If + + test_cell = Worksheets(ADJUSTMENT_WORKSHEET).Range(PCCO_COL & CStr(current_row)) + If "Text." = checkCellFormat(test_cell) Then + Debug.Print "PCCO_COL:check ok" + Else + Debug.Print "PCCO_COL:check failed" + Debug.Print checkCellFormat(test_cell) + output = False + End If + + test_cell = Worksheets(ADJUSTMENT_WORKSHEET).Range(AMOUNT_IN_FUNC_COL & CStr(current_row)) + If "Number." = checkCellFormat(test_cell) Then + Debug.Print "AMOUNT_IN_FUNC_COL:check ok" + Else + Debug.Print "AMOUNT_IN_FUNC_COL:check failed" + appendRemarks current_row, "AMOUNT_IN_FUNC_COL:check failed" + Debug.Print checkCellFormat(test_cell) + output = False + End If + + test_cell = Worksheets(ADJUSTMENT_WORKSHEET).Range(BMF_ID_COL & CStr(current_row)) + If "Number." = checkCellFormat(test_cell) or "Text." = checkCellFormat(test_cell) Then + Debug.Print "BMF_ID_COL:check ok" + Else + Debug.Print "BMF_ID_COL:check failed" + appendRemarks current_row, "BMF_ID_COL:check failed" + Debug.Print checkCellFormat(test_cell) + output = False + End If + + + test_cell = Worksheets(ADJUSTMENT_WORKSHEET).Range(ACCOUNT_COL & CStr(current_row)) + If "General." = checkCellFormat(test_cell) Then + Debug.Print "ACCOUNT_COL:check ok" + Else + Debug.Print "ACCOUNT_COL:check failed" + Debug.Print checkCellFormat(test_cell) + output = False + End If + + test_cell = Worksheets(ADJUSTMENT_WORKSHEET).Range(DEBIT_COL & CStr(current_row)) + If "General." = checkCellFormat(test_cell) Then + Debug.Print "DEBIT_COL:check ok" + Else + Debug.Print "DEBIT_COL:check failed" + Debug.Print checkCellFormat(test_cell) + output = False + End If + + test_cell = Worksheets(ADJUSTMENT_WORKSHEET).Range(CREDIT_COL & CStr(current_row)) + If "General." = checkCellFormat(test_cell) Then + Debug.Print "CREDIT_COL:check ok" + Else + Debug.Print "CREDIT_COL:check failed" + Debug.Print checkCellFormat(test_cell) + output = False + End If + + test_cell = Worksheets(ADJUSTMENT_WORKSHEET).Range(REMARKS_COL & CStr(current_row)) + If "General." = checkCellFormat(test_cell) or "Text." = checkCellFormat(test_cell) Then + Debug.Print "REMARKS_COL:check ok" + Else + Debug.Print "REMARKS_COL:check failed" + Debug.Print checkCellFormat(test_cell) + output = False + End If + +Done: + checkCurrentRowFormatValid = output + Exit Function + +eh: + Debug.Print "checkCurrentRowFormatValid:Error: " & Err.Description + + +End Function + + +Function checkCurrentRowValueValid(current_row As Integer) + On Error GoTo eh + + Dim output As Boolean + output = True + + If (checkIfGrandTotalRefNotFound(current_row) = True) Then + Debug.Print "grand total ref not found" + appendRemarks current_row, "grand total reference not found, skipping" + output = False + End If + + If (checkIfAmountInFuncRefNotFound(current_row) = True) Then + Debug.Print "amount in func ref not found" + appendRemarks current_row, "amount in func reference not found, skipping" + output = False + End If + + If (checkIfPCCORefNotFound(current_row) = True) Then + Debug.Print "PCCO ref not found" + appendRemarks current_row, "PCCO reference not found, skipping" + output = False + End If + + If output Then + + Dim grand_total_str As String + Dim amount_in_func_str As String + Dim pcco_str As String + + grand_total_str = getGrandTotal(current_row) + amount_in_func_str = getAmountInFunc(current_row) + pcco_str = getPCCO(current_row) + + ' Debug.print InStr(pcco_str, "Error") >= 0 + ' Debug.print InStr(amount_in_func_str, "N/A") >= 0 + ' Debug.print InStr(grand_total_str, "N/A") >= 0 + + If (Trim(pcco_str) = "" Or InStr(pcco_str, "N/A") > 0 Or InStr(pcco_str, "Error") > 0) Then + output = False + End If + + If (Trim(amount_in_func_str) = "" Or InStr(amount_in_func_str, "N/A") > 0 Or InStr(amount_in_func_str, "Error") > 0) Then + output = False + End If + + If (Trim(grand_total_str) = "" Or InStr(grand_total_str, "N/A") > 0 Or InStr(grand_total_str, "Error") > 0) Then + output = False + End If + + Else + Debug.Print "skipping as grand total ref not found" + End If + +Done: + checkCurrentRowValueValid = output + Exit Function + +eh: + 'MsgBox "checkCurrentRowValueValid:Error: " & Err.Description + 'Stop + appendRemarks current_row, "row value not valid" + checkCurrentRowValueValid = False + +End Function + +Function checkFullFillCasePCCOCode_P1375000Situation_1(grand_total As Currency, amount_in_func As Currency) + On Error GoTo eh + + ' ### Special case (if PCCO Code = P1375000): + ' ### Situation 1: + ' if Grand total > 0 + Dim output As Boolean + output = (grand_total > 0) + +Done: + checkFullFillCasePCCOCode_P1375000Situation_1 = output + Exit Function + +eh: + Debug.Print "checkFullFillCasePCCOCode_P1375000Situation_1:Error: " & Err.Description + + +End Function + +Function checkFullFillCasePCCOCode_P1375000Situation_2(grand_total As Currency, amount_in_func As Currency) + On Error GoTo eh + + ' ### Special case (if PCCO Code = P1375000): + ' ### Situation 2: + ' if Grand total < 0 + Dim output As Boolean + output = (grand_total < 0) + +Done: + checkFullFillCasePCCOCode_P1375000Situation_2 = output + Exit Function + +eh: + Debug.Print "checkFullFillCasePCCOCode_P1375000Situation_2:Error: " & Err.Description + + +End Function + +Function checkFullFillCasePCCOCode_P1375000Situation_3(grand_total As Currency, amount_in_func As Currency) + On Error GoTo eh + + ' ### Special case (if PCCO Code = P1375000): + ' ### Situation 3: + ' if Grand total = 0 + ' - do nothing + Dim output As Boolean + output = (grand_total = 0) + +Done: + checkFullFillCasePCCOCode_P1375000Situation_3 = output + Exit Function + +eh: + Debug.Print "checkFullFillCasePCCOCode_P1375000Situation_3:Error: " & Err.Description + + +End Function + +Function checkFullFillCaseCommonSituation_1(grand_total As Currency, amount_in_func As Currency) + On Error GoTo eh + + ' ### Situation 1: + ' if Grand total > 0 (row 8 ?) + Dim output As Boolean + output = (grand_total > 0) + +Done: + checkFullFillCaseCommonSituation_1 = output + Exit Function + +eh: + Debug.Print "checkFullFillCaseCommonSituation_1:Error: " & Err.Description + + +End Function + +Function checkFullFillCaseCommonSituation_2(grand_total As Currency, amount_in_func As Currency) + On Error GoTo eh + + ' ### Situation 2: + ' Grand total < 0 + Dim output As Boolean + output = (grand_total < 0) + +Done: + checkFullFillCaseCommonSituation_2 = output + Exit Function + +eh: + Debug.Print "checkFullFillCaseCommonSituation_2:Error: " & Err.Description + + +End Function + +Function checkFullFillCaseCommonSituation_3(grand_total As Currency, amount_in_func As Currency) + On Error GoTo eh + + ' ### Situation 3: + ' if Grand total = 0 + Dim output As Boolean + output = (grand_total = 0) + +Done: + checkFullFillCaseCommonSituation_3 = output + Exit Function + +eh: + Debug.Print "checkFullFillCaseCommonSituation_3:Error: " & Err.Description + +End Function + +Function checkIfReferenceNotFound(cell As Variant) + On Error GoTo eh + + Dim test_text As Variant + test_text = cell.Text + Dim output As Boolean + + output = (InStr(test_text, "#REF!") > 0) + +Done: + checkIfReferenceNotFound = output + Exit Function + +eh: + Debug.Print "checkIfReferenceNotFound:Error: " & Err.Description + +End Function + +Function checkIfGrandTotalRefNotFound(current_row As Integer) + On Error GoTo eh + + Dim test_cell As Variant + test_cell = Worksheets(ADJUSTMENT_WORKSHEET).Range(GRANDTOTAL_COL & CStr(current_row)) + +Done: + checkIfGrandTotalRefNotFound = checkIfReferenceNotFound(Worksheets(ADJUSTMENT_WORKSHEET).Range(GRANDTOTAL_COL & CStr(current_row))) + Exit Function + +eh: + Debug.Print "checkIfGrandTotalRefNotFound:Error: " & Err.Description & ":" & GRANDTOTAL_COL & CStr(current_row) + + +End Function + +Function checkIfPCCORefNotFound(current_row As Integer) + On Error GoTo eh + + Dim test_cell As Variant + test_cell = Worksheets(ADJUSTMENT_WORKSHEET).Range(PCCO_COL & CStr(current_row)) + +Done: + checkIfPCCORefNotFound = checkIfReferenceNotFound(Worksheets(ADJUSTMENT_WORKSHEET).Range(PCCO_COL & CStr(current_row))) + Exit Function + +eh: + Debug.Print "checkIfPCCORefNotFound:Error: " & Err.Description & ":" & PCCO_COL & CStr(current_row) + + +End Function + +Function checkIfAmountInFuncRefNotFound(current_row As Integer) + On Error GoTo eh + + Dim test_cell As Variant + test_cell = Worksheets(ADJUSTMENT_WORKSHEET).Range(AMOUNT_IN_FUNC_COL & CStr(current_row)) + +Done: + checkIfAmountInFuncRefNotFound = checkIfReferenceNotFound(Worksheets(ADJUSTMENT_WORKSHEET).Range(AMOUNT_IN_FUNC_COL & CStr(current_row))) + Exit Function + +eh: + Debug.Print "checkIfAmountInFuncRefNotFound:Error: " & Err.Description & ":" & AMOUNT_IN_FUNC_COL & CStr(current_row) + +End Function + +Function applyCommonSituation_1(current_row As Integer) + On Error GoTo eh + + Dim net_var As Variant + Dim grand_total_var As Variant + Dim amount_in_func_var As Variant + + grand_total_var = CDec(getGrandTotal(current_row)) + amount_in_func_var = CDec(getAmountInFunc(current_row)) + net_var = grand_total_var + amount_in_func_var + +' current row +' - PCEC(Column I): 302210, PCCO: A1311000, Account column: 1020, debit column: Grand Total + writePCEC current_row, PCEC_302210 + writePCCO current_row, PCCO_A1311000 + writeAccount current_row, AC_1020 + writeDebit current_row, grand_total_var + +' - add row: + insertNewRowBelow current_row + current_row = current_row + 1 + ' - PCEC: 921810, + ' - PCCO: 92100100 + ' - account:8600, + ' - debit: grand total + writePCEC current_row, PCEC_921810 + writePCCO current_row, PCCO_92100100 + writeAccount current_row, AC_8600 + writeDebit current_row, grand_total_var + +' - add row: + insertNewRowBelow current_row + current_row = current_row + 1 + ' - PCEC: 922910, + ' - PCCO: 98900100 + ' - account:8601, + ' - Credit: grand total + writePCEC current_row, PCEC_922910 + writePCCO current_row, PCCO_98900100 + writeAccount current_row, AC_8601 + writeCredit current_row, grand_total_var + +' - add row: +' - account NA8601, +' - credit: grand total + amount in func +' insertNewRowBelow current_row +' current_row = current_row + 1 +' writeAccount current_row, AC_8601 +' writeCredit current_row, net_var + +Done: + applyCommonSituation_1 = True + Exit Function + +eh: + Debug.Print "applyCommonSituation_1:Error: " & Err.Description + + +End Function + +Function applyCommonSituation_2(current_row As Integer) + On Error GoTo eh + + Dim net_var As Variant + Dim grand_total_var As Variant + Dim amount_in_func_var As Variant + + grand_total_var = CDec(getGrandTotal(current_row)) + amount_in_func_var = CDec(getAmountInFunc(current_row)) + net_var = grand_total_var + amount_in_func_var + +' - current_row: +' - PCEC(Column I): 302210, +' - PCCO: A1311000, +' - Account column: 1020, +' - credit column: Grand Total + writePCEC current_row, PCEC_302210 + writePCCO current_row, PCCO_A1311000 + writeAccount current_row, AC_1020 + writeCredit current_row, grand_total_var + +' - add row: + insertNewRowBelow current_row + current_row = current_row + 1 +' - PCEC: 922810, +' - PCCO: 92200100, +' - account:8700, +' - credit: grand total + writePCEC current_row, PCEC_921810 + writePCCO current_row, PCCO_92100100 + writeAccount current_row, AC_8700 + writeCredit current_row, grand_total_var + +' - add row: + insertNewRowBelow current_row + current_row = current_row + 1 +' - PCEC: 921910, +' - PCCO: 98900200, +' - account:8701, +' - debit: grand total + writePCEC current_row, PCEC_921910 + writePCCO current_row, PCCO_98900200 + writeAccount current_row, AC_8701 + writeDebit current_row, grand_total_var + +' ' - add row: +' ' - account NA8701, +' ' - debit: grand total + amount in func +' insertNewRowBelow current_row +' current_row = current_row + 1 +' writeAccount current_row, AC_8701 +' writeDebit current_row, net_var + +Done: + applyCommonSituation_2 = True + Exit Function + +eh: + Debug.Print "applyCommonSituation_2:Error: " & Err.Description + + +End Function + +Function applyCommonSituation_3(current_row As Integer) + On Error GoTo eh + +' if Grand total + amount in func = 0 +' - do nothing + applyCommonSituation_3 = True + +Done: + applyCommonSituation_3 = True + Exit Function + +eh: + Debug.Print "applyCommonSituation_3:Error: " & Err.Description + + +End Function + +Function applyPcco1375Situation_1(current_row As Integer) + On Error GoTo eh + + Dim net_var As Variant + Dim grand_total_var As Variant + Dim amount_in_func_var As Variant + + grand_total_var = CDec(getGrandTotal(current_row)) + amount_in_func_var = CDec(getAmountInFunc(current_row)) + net_var = grand_total_var + amount_in_func_var + +' - current row +' - PCEC(Column I): 302410, +' - PCCO: P1375000, +' - Account column: 2020, +' - debit column: Grand Total + writePCEC current_row, PCEC_302210 + writePCCO current_row, PCCO_P1375000 + writeAccount current_row, AC_2020 + writeDebit current_row, grand_total_var + +' - add row: + insertNewRowBelow current_row + current_row = current_row + 1 +' - PCEC: 921810, +' - PCCO: 92100100, +' - account:8600, +' - debit: grand total + writePCEC current_row, PCEC_921810 + writePCCO current_row, PCCO_92100100 + writeAccount current_row, AC_8600 + writeDebit current_row, grand_total_var + +' - add row: + insertNewRowBelow current_row + current_row = current_row + 1 +' - PCEC: 922910, +' - PCCO: 98900100, +' - account:8601, +' - credit: grand total + writePCEC current_row, PCEC_922910 + writePCCO current_row, PCCO_98900100 + writeAccount current_row, AC_8601 + writeCredit current_row, grand_total_var + + ' ' - add row: + ' ' - account NA8601, + ' ' - credit: grand total + amount in func + ' insertNewRowBelow current_row + ' current_row = current_row + 1 + ' writeAccount current_row, AC_8601 + ' writeCredit current_row, net_var + + applyPcco1375Situation_1 = True + +Done: + applyPcco1375Situation_1 = True + Exit Function + +eh: + Debug.Print "applyPcco1375Situation_1:Error: " & Err.Description + + +End Function + +Function applyPcco1375Situation_2(current_row As Integer) + On Error GoTo eh + + Dim net_var As Variant + Dim grand_total_var As Variant + Dim amount_in_func_var As Variant + + grand_total_var = CDec(getGrandTotal(current_row)) + amount_in_func_var = CDec(getAmountInFunc(current_row)) + net_var = grand_total_var + amount_in_func_var + +' - Account +' - PCEC(Column I): 302410, +' - PCCO: P1375000, +' - Account column: 2020, +' - credit column: Grand Total + writePCEC current_row, PCEC_302410 + writePCCO current_row, PCCO_P1375000 + writeAccount current_row, AC_2020 + writeCredit current_row, grand_total_var + +' - add row: + insertNewRowBelow current_row + current_row = current_row + 1 +' - PCEC: 922810, +' - PCCO: 92200100, +' - account:8700, +' - credit: grand total + writePCEC current_row, PCEC_922810 + writePCCO current_row, PCCO_92200100 + writeAccount current_row, AC_8700 + writeCredit current_row, grand_total_var + +' - add row: + insertNewRowBelow current_row + current_row = current_row + 1 +' - PCEC: 921910, +' - PCCO: 98900200, +' - account:8701, +' - debit: grand total + writePCEC current_row, PCEC_921910 + writePCCO current_row, PCCO_98900200 + writeAccount current_row, AC_8701 + writeDebit current_row, grand_total_var + +' ' - add row: +' ' - account 8701, +' ' - debit: grand total + amount in func +' insertNewRowBelow current_row +' current_row = current_row + 1 +' writeAccount current_row, AC_8701 +' writeDebit current_row, net_var + + applyPcco1375Situation_2 = True + +Done: + applyPcco1375Situation_2 = True + Exit Function + +eh: + Debug.Print "applyPcco1375Situation_2:Error: " & Err.Description + + +End Function + +Function applyPcco1375Situation_3(current_row As Integer) + On Error GoTo eh + +' - do nothing + applyPcco1375Situation_3 = True + +Done: + applyPcco1375Situation_3 = True + Exit Function + +eh: + Debug.Print "applyPcco1375Situation_3:Error: " & Err.Description + + +End Function + + +Sub test() + ' Debug.Assert True = isCurrentRowNeedToProcess("7") + ' Debug.Assert False = isCurrentRowNeedToProcess("180") + ' debug.assert False = isAllDone ("7") + ' debug.assert True = isAllDone ("180") + + ' debug.assert False = checkFullFillCaseCommonSituation_1(-10,1) + ' debug.assert False = checkFullFillCaseCommonSituation_1(1,-10) + ' debug.assert False = checkFullFillCaseCommonSituation_1(-10,-10) + ' debug.assert False = checkFullFillCaseCommonSituation_1(0,0) + ' debug.assert True = checkFullFillCaseCommonSituation_1(0,1) + ' debug.assert True = checkFullFillCaseCommonSituation_1(1,0) + ' debug.assert True = checkFullFillCaseCommonSituation_1(1,1) + + ' debug.assert True = checkFullFillCaseCommonSituation_2(-10,1) + ' debug.assert True = checkFullFillCaseCommonSituation_2(1,-10) + ' debug.assert True = checkFullFillCaseCommonSituation_2(-10,-10) + ' debug.assert False = checkFullFillCaseCommonSituation_2(0,0) + ' debug.assert False = checkFullFillCaseCommonSituation_2(0,1) + ' debug.assert False = checkFullFillCaseCommonSituation_2(1,0) + ' debug.assert False = checkFullFillCaseCommonSituation_2(1,1) + + ' debug.assert True = checkFullFillCaseCommonSituation_3(0,0) + ' debug.assert False = checkFullFillCaseCommonSituation_3(1,1) + ' debug.assert False = checkFullFillCaseCommonSituation_3(-10,-10) + ' debug.assert False = checkFullFillCaseCommonSituation_3(1,0) + ' debug.assert False = checkFullFillCaseCommonSituation_3(0,1) + + ' debug.print Worksheets("Adjustment_TEST").Range("G86") + + init + + current_row = 29 + ' amount_in_func_str = getAmountInFunc(current_row) + ' pcco_str = getPCCO(current_row) + + ' debug.print current_row + ' debug.print grand_total_str + ' debug.print checkIfGrandTotalRefNotFound(current_row) + Debug.Print checkCurrentRowValueValid(current_row) + + ' current_row_value_valid = False + ' current_row_value_valid = checkCurrentRowValueValid(pcco_str, amount_in_func_str, grand_total_str) + ' check_next_row_ready = False + ' check_next_row_ready = checkOutputCellReady(current_row) + +End Sub + +Function getLastCheckRow(first_row As Integer) + getLastCheckRow = first_row + 10 +End Function + +Function insertNewRowBelow(current_row As Integer) + Range("A" & current_row + 1).EntireRow.Insert +End Function + +Function isAllDone(input_row As Integer) + On Error GoTo eh + + Dim cell_value As Currency + Dim output As Boolean + Dim i As Integer + output = True + + last_check_row = getLastCheckRow(input_row) + For i = input_row To last_check_row + If (isCurrentRowNeedToProcess(i) = True) Then + output = False + Exit For + End If + Next i + + isAllDone = output + +Done: + isAllDone = output + Exit Function + +eh: + Debug.Print "isAllDone:Error: " & Err.Description + + +End Function + +Function isCurrentRowNeedToProcess(input_row As Integer) + On Error GoTo eh + + Dim output As Boolean + Dim cell_value As Currency + Dim input_cell As String + input_cell = GRANDTOTAL_COL & input_row + +Done: + isCurrentRowNeedToProcess = Not (IsEmpty(Worksheets(ADJUSTMENT_WORKSHEET).Range(input_cell).Value)) + Exit Function + +eh: + Debug.Print "isCurrentRowNeedToProcess:Error: " & Err.Description + + +End Function + +Sub Main() + On Error GoTo eh + + Debug.Print "start a new run" + + init + + If (checkPCECColumnExist) Then + writeRemarks HEADER_ROW, "PCEC col exist" + Else + createPCECCol "hello" + writeRemarks HEADER_ROW, "PCEC col created" + End If + + While isAllDone(current_row) = False + ' While current_row < 9 + Debug.Print "processing row: " & current_row + + Debug.Print checkCurrentRowFormatValid(current_row) + + current_row_value_valid = False + current_row_value_valid = checkCurrentRowValueValid(current_row) + check_next_row_ready = False + check_next_row_ready = checkOutputCellReady(current_row) + check_row_format_valid = False + check_row_format_valid = checkCurrentRowFormatValid(current_row) + + If (current_row_value_valid And check_next_row_ready And check_row_format_valid) Then + ' input considered valid after this line + + Dim grand_total_str As String + Dim amount_in_func_str As String + Dim pcco_str As String + + grand_total_str = getGrandTotal(current_row) + amount_in_func_str = getAmountInFunc(current_row) + pcco_str = getPCCO(current_row) + + Debug.Print "before" + Debug.Print grand_total_str + Debug.Print "pass" + grand_total_curr = CCur(grand_total_str) + + amount_in_func_curr = CCur(amount_in_func_str) + + If (pcco_str = "P1375000") Then + If (checkFullFillCasePCCOCode_P1375000Situation_1(grand_total_curr, amount_in_func_curr) = True) Then + writeRemarks current_row, "P1375000 common sit 1" + fillRemarksLightPurple current_row + applyPcco1375Situation_1 (current_row) + ElseIf (checkFullFillCasePCCOCode_P1375000Situation_2(grand_total_curr, amount_in_func_curr) = True) Then + writeRemarks current_row, "P1375000 common sit 2" + fillRemarksLightYellow current_row + applyPcco1375Situation_2 (current_row) + ElseIf (checkFullFillCasePCCOCode_P1375000Situation_3(grand_total_curr, amount_in_func_curr) = True) Then + writeRemarks current_row, "P1375000 common sit 3" + fillRemarksLightCyan current_row + applyPcco1375Situation_3 (current_row) + Else + Debug.Print "missing pcco 1375 situation" + End If + + ElseIf (pcco_str = "N/A") Then + Debug.Print "pcco value is N/A" + + Else + If (checkFullFillCaseCommonSituation_1(grand_total_curr, amount_in_func_curr) = True) Then + writeRemarks current_row, "common sit 1" + fillRemarksLightBlue current_row + applyCommonSituation_1 (current_row) + ElseIf (checkFullFillCaseCommonSituation_2(grand_total_curr, amount_in_func_curr) = True) Then + writeRemarks current_row, "common sit 2" + fillRemarksLightGreen current_row + applyCommonSituation_2 (current_row) + ElseIf (checkFullFillCaseCommonSituation_3(grand_total_curr, amount_in_func_curr) = True) Then + writeRemarks current_row, "common sit 3" + fillRemarksLightPink current_row + applyCommonSituation_3 (current_row) + Else + Debug.Print "missing situation" + End If + End If + + Else + + If getAccount(current_row) = AC_1020 Then + appendRemarks current_row, "output row" + ElseIf getAccount(current_row) = AC_8600 Then + appendRemarks current_row, "output row" + ElseIf getAccount(current_row) = AC_8601 Then + appendRemarks current_row, "output row" + ElseIf getAccount(current_row) = AC_8700 Then + appendRemarks current_row, "output row" + ElseIf getAccount(current_row) = AC_8701 Then + appendRemarks current_row, "output row" + ElseIf getAccount(current_row) = AC_1311 Then + appendRemarks current_row, "output row" + ElseIf getAccount(current_row) = AC_1375 Then + appendRemarks current_row, "output row" + ElseIf getAccount(current_row) = AC_2020 Then + appendRemarks current_row, "output row" + + Else + Debug.Print "input is not valid, skipping row" + fillRemarksLightRed current_row + appendRemarks current_row, "input is not valid, skipping row" + + If (checkOutputCellReady(current_row)) Then + If (checkCurrentRowValueValid(current_row)) Then + Else + ' appendRemarks current_row, "input is not valid" + End If + End If + End If + + End If + + current_row = current_row + 1 + Wend + + +Done: + Debug.Print "done" + Exit Sub + +eh: + writeRemarks current_row, "error found" + 'MsgBox "Main:Error: " & Err.Description + 'Stop + +End Sub + +Function createPCECCol(test) + On Error GoTo eh + Dim temp As String + + 'temp = Worksheets(ADJUSTMENT_WORKSHEET).Range(PCEC_HEADER_CELL).Text + Worksheets(ADJUSTMENT_WORKSHEET).Range(PCEC_COL & ":" & PCEC_COL).EntireColumn.Insert + Worksheets(ADJUSTMENT_WORKSHEET).Range(PCEC_HEADER_CELL).Value = PCEC_COL_LABEL + +Done: + writeRemarks HEADER_ROW, "PCEC col created" + Debug.Print "createPCECCol:done" + Exit Function + +eh: + writeRemarks 1, "createPCECCol:error found" + 'MsgBox "Main:Error: " & Err.Description + 'Stop + +End Function + +Function checkPCECColumnExist() + On Error GoTo eh + Dim temp As String + Dim output As Boolean + + temp = Worksheets(ADJUSTMENT_WORKSHEET).Range(PCEC_HEADER_CELL).Text + + output = False + If (temp = "PCEC") Then + output = True + End If + + checkPCECColumnExist = output +Done: + Debug.Print "checkPCECColumnExist:done" + Exit Function + +eh: + writeRemarks 1, "checkPCECColumnExist:error found" + 'MsgBox "Main:Error: " & Err.Description + 'Stop + + +End Function + +Sub helloworld() + ' debug.print isCurrentRowNeedToProcess ("7") + ' debug.print isCurrentRowNeedToProcess ("180") + + ' debug.print isAllDone ("7") + ' debug.print isAllDone ("180") + +End Sub + +Sub ResetExcelTest() + Worksheets("Sheet1").Activate + Columns("B:Q").Copy + + Worksheets("Adjustment").Activate + Range("B1").Select + ActiveSheet.Paste + + Range("B1").Select + + Range("R:Z").Delete +End Sub + + diff --git a/task1/_04_submit/.gitkeep b/task1/_04_submit/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/task1/_04_submit/Example file updated.xlsx b/task1/_04_submit/Example file updated.xlsx new file mode 100644 index 0000000..888abd1 Binary files /dev/null and b/task1/_04_submit/Example file updated.xlsx differ diff --git a/task1/_04_submit/Example_file_working_2016_test5.xlsm b/task1/_04_submit/Example_file_working_2016_test5.xlsm new file mode 100644 index 0000000..82bd47a Binary files /dev/null and b/task1/_04_submit/Example_file_working_2016_test5.xlsm differ diff --git a/task1/_04_submit/Example_file_working_2016_test5_deliver.xlsm b/task1/_04_submit/Example_file_working_2016_test5_deliver.xlsm new file mode 100644 index 0000000..2befc08 Binary files /dev/null and b/task1/_04_submit/Example_file_working_2016_test5_deliver.xlsm differ diff --git a/task1/_04_submit/Example_file_working_2016_test6.xlsm b/task1/_04_submit/Example_file_working_2016_test6.xlsm new file mode 100644 index 0000000..caff09d Binary files /dev/null and b/task1/_04_submit/Example_file_working_2016_test6.xlsm differ diff --git a/task1/_04_submit/Example_file_working_2016_test6_deliver.xlsm b/task1/_04_submit/Example_file_working_2016_test6_deliver.xlsm new file mode 100644 index 0000000..5efe848 Binary files /dev/null and b/task1/_04_submit/Example_file_working_2016_test6_deliver.xlsm differ diff --git a/task1/_04_submit/Module1.bas b/task1/_04_submit/Module1.bas new file mode 100644 index 0000000..7d627e0 --- /dev/null +++ b/task1/_04_submit/Module1.bas @@ -0,0 +1,19 @@ +Attribute VB_Name = "Module1" +Sub Macro6() +Attribute Macro6.VB_ProcData.VB_Invoke_Func = " \n14" +' +' Macro6 Macro +' + +' + Sheets("Sheet1").Select + Columns("B:P").Select + Range("P1").Activate + Selection.Copy + Sheets("Adjustment").Select + Columns("B:P").Select + Range("P1").Activate + Sheets("Adjustment").Paste + + +End Sub diff --git a/task1/_04_submit/ThisWorkbook.cls b/task1/_04_submit/ThisWorkbook.cls new file mode 100644 index 0000000..cfcfd85 --- /dev/null +++ b/task1/_04_submit/ThisWorkbook.cls @@ -0,0 +1,1421 @@ +' change log: +' 2023-09-20, update criteria and procedure +' 2023-09-19, update error handling +' 2023-09-18, update for "################" when zoom out + +Option Explicit + +Dim first_row As Integer +Dim current_row As Integer +Dim last_check_row As Integer + +' Dim amount_in_func As String +Dim starting_cell As String + +Dim grand_total_curr As Currency +Dim grand_total_str As String + +Dim amount_in_func_curr As Currency +Dim amount_in_func_str As String + +Dim pcco_str As String + +Dim ISIN_CODE_ESTD_COL As String +Dim BOOK_COL As String +Dim BUY_COL As String +Dim SELL_COL As String +Dim GRANDTOTAL_COL As String +Dim PCCO_COL As String +Dim AMOUNT_IN_FUNC_COL As String +Dim BMF_ID_COL As String + +Dim ACCOUNT_COL As String +Dim DEBIT_COL As String +Dim CREDIT_COL As String + +Dim REMARKS_COL As String + +Dim PCEC_HEADER_CELL As String +Dim HEADER_ROW As Integer +Dim PCEC_COL As String +Dim PCEC_COL_LABEL As String + +Dim ADJUSTMENT_WORKSHEET As String +Dim ADJUSTMENT_TEST_WORKSHEET As String + +Dim AC_1020 As String +Dim AC_8600 As String +Dim AC_8601 As String +Dim AC_8700 As String +Dim AC_8701 As String +Dim AC_1311 As String +Dim AC_1375 As String +Dim AC_2020 As String + +Dim PCEC_302210 As String +Dim PCEC_921810 As String +Dim PCEC_922910 As String +Dim PCEC_921910 As String +Dim PCEC_302410 As String +Dim PCEC_922810 As String + +Dim PCCO_A1311000 As String +Dim PCCO_92100100 As String +Dim PCCO_98900100 As String +Dim PCCO_98900200 As String +Dim PCCO_P1375000 As String +Dim PCCO_92200100 As String + +Dim current_row_value_valid As Boolean +Dim check_next_row_ready As Boolean +Dim check_row_format_valid As Boolean + +Sub init() + On Error GoTo eh + + HEADER_ROW = 6 + first_row = 7 + current_row = first_row + last_check_row = getLastCheckRow(current_row) + + ' amount_in_func = "J" + ISIN_CODE_ESTD_COL = "C" + BOOK_COL = "D" + BUY_COL = "E" + SELL_COL = "F" + GRANDTOTAL_COL = "G" + PCEC_COL = "I" + + ' after insert + PCCO_COL = "J" + AMOUNT_IN_FUNC_COL = "K" + BMF_ID_COL = "L" + + ACCOUNT_COL = "N" + DEBIT_COL = "O" + CREDIT_COL = "P" + + REMARKS_COL = "R" + + PCEC_HEADER_CELL = PCEC_COL & CStr(HEADER_ROW) + + starting_cell = GRANDTOTAL_COL & first_row + + AC_1020 = "1020" + AC_8600 = "8600" + AC_8601 = "8601" + AC_8700 = "8700" + AC_8701 = "8701" + AC_1311 = "1311" + AC_1375 = "1375" + AC_2020 = "2020" + + PCEC_302210 = "302210" + PCEC_921810 = "921810" + PCEC_922810 = "922810" + PCEC_922910 = "922910" + PCEC_921910 = "921910" + PCEC_302410 = "302410" + + PCCO_A1311000 = "A1311000" + PCCO_92100100 = "92100100" + PCCO_98900100 = "98900100" + PCCO_98900200 = "98900200" + PCCO_P1375000 = "P1375000" + PCCO_92200100 = "92200100" + + + 'ADJUSTMENT_WORKSHEET = "Adjustment_TEST" + ADJUSTMENT_WORKSHEET = "Adjustment" + + PCEC_COL_LABEL = "PCEC" + +Done: + Exit Sub + +eh: + Debug.Print "init:Error: " & Err.Description + + +End Sub + +Function fillRemarksLightBlue(current_row As Integer) + On Error GoTo eh + Worksheets(ADJUSTMENT_WORKSHEET).Range(REMARKS_COL & CStr(current_row)).Interior.Color = rgb(9, 132, 227) + Worksheets(ADJUSTMENT_WORKSHEET).Range(REMARKS_COL & CStr(current_row)).Font.Color = vbWhite + +Done: + Exit Function + +eh: + Debug.Print "fillRemarksLightBlue:Error: " & Err.Description + +End Function + +Function fillRemarksLightGreen(current_row As Integer) + On Error GoTo eh + Worksheets(ADJUSTMENT_WORKSHEET).Range(REMARKS_COL & CStr(current_row)).Interior.Color = rgb(39, 174, 96) + Worksheets(ADJUSTMENT_WORKSHEET).Range(REMARKS_COL & CStr(current_row)).Font.Color = vbWhite + +Done: + Exit Function + +eh: + Debug.Print "fillRemarksLightGreen:Error: " & Err.Description + +End Function + +Function fillRemarksLightRed(current_row As Integer) + On Error GoTo eh + Worksheets(ADJUSTMENT_WORKSHEET).Range(REMARKS_COL & CStr(current_row)).Interior.Color = rgb(214, 48, 49) + Worksheets(ADJUSTMENT_WORKSHEET).Range(REMARKS_COL & CStr(current_row)).Font.Color = vbWhite + +Done: + Exit Function + +eh: + Debug.Print "fillRemarksLightRed:Error: " & Err.Description + +End Function + +Function fillRemarksLightPurple(current_row As Integer) + On Error GoTo eh + Worksheets(ADJUSTMENT_WORKSHEET).Range(REMARKS_COL & CStr(current_row)).Interior.Color = rgb(108, 92, 231) + Worksheets(ADJUSTMENT_WORKSHEET).Range(REMARKS_COL & CStr(current_row)).Font.Color = vbWhite + +Done: + Exit Function + +eh: + Debug.Print "fillRemarksLightPurple:Error: " & Err.Description + +End Function + +Function fillRemarksLightYellow(current_row As Integer) + On Error GoTo eh + Worksheets(ADJUSTMENT_WORKSHEET).Range(REMARKS_COL & CStr(current_row)).Interior.Color = rgb(253, 203, 110) + Worksheets(ADJUSTMENT_WORKSHEET).Range(REMARKS_COL & CStr(current_row)).Font.Color = vbWhite + +Done: + Exit Function + +eh: + Debug.Print "fillRemarksLightYellow:Error: " & Err.Description + +End Function + + +Function fillRemarksLightCyan(current_row As Integer) + On Error GoTo eh + Worksheets(ADJUSTMENT_WORKSHEET).Range(REMARKS_COL & CStr(current_row)).Interior.Color = rgb(0, 206, 201) + Worksheets(ADJUSTMENT_WORKSHEET).Range(REMARKS_COL & CStr(current_row)).Font.Color = vbWhite + +Done: + Exit Function + +eh: + Debug.Print "fillRemarksLightCyan:Error: " & Err.Description + +End Function + +Function fillRemarksLightPink(current_row As Integer) + On Error GoTo eh + Worksheets(ADJUSTMENT_WORKSHEET).Range(REMARKS_COL & CStr(current_row)).Interior.Color = rgb(232, 67, 147) + Worksheets(ADJUSTMENT_WORKSHEET).Range(REMARKS_COL & CStr(current_row)).Font.Color = vbWhite + +Done: + Exit Function + +eh: + Debug.Print "fillRemarksLightPink:Error: " & Err.Description + +End Function + +Function writeRemarks(current_row As Integer, remarks As String) + On Error GoTo eh + + Worksheets(ADJUSTMENT_WORKSHEET).Range(REMARKS_COL & CStr(current_row)).Value = remarks + +Done: + Exit Function + +eh: + Debug.Print "writeRemarks:Error: " & Err.Description + +End Function + +Function appendRemarks(current_row As Integer, remarks As String) + On Error GoTo eh + + Dim original_string As String + original_string = Worksheets(ADJUSTMENT_WORKSHEET).Range(REMARKS_COL & CStr(current_row)).Value + Worksheets(ADJUSTMENT_WORKSHEET).Range(REMARKS_COL & CStr(current_row)).Value = remarks & "," & original_string + +Done: + Exit Function + +eh: + Debug.Print "appendRemarks:Error: " & Err.Description + +End Function + +Function writeCredit(current_row As Integer, credit As Variant) + On Error GoTo eh + + Worksheets(ADJUSTMENT_WORKSHEET).Range(CREDIT_COL & CStr(current_row)).Value = Abs(credit) + Worksheets(ADJUSTMENT_WORKSHEET).Range(CREDIT_COL & CStr(current_row)).NumberFormat = "#,##0.00" + +Done: + Exit Function + +eh: + Debug.Print "writeCredit:Error: " & Err.Description + + +End Function + +Function writeDebit(current_row As Integer, debit As Variant) + On Error GoTo eh + + Worksheets(ADJUSTMENT_WORKSHEET).Range(DEBIT_COL & CStr(current_row)).Value = Abs(debit) + Worksheets(ADJUSTMENT_WORKSHEET).Range(DEBIT_COL & CStr(current_row)).NumberFormat = "#,##0.00" + +Done: + Exit Function + +eh: + Debug.Print "writeDebit:Error: " & Err.Description + + +End Function + +Function writePCCO(current_row As Integer, pcec As String) + On Error GoTo eh + + Worksheets(ADJUSTMENT_WORKSHEET).Range(PCCO_COL & CStr(current_row)).Value = pcec + +Done: + Exit Function + +eh: + Debug.Print "writePCCO:Error: " & Err.Description + +End Function + +Function writePCEC(current_row As Integer, pcec As String) + On Error GoTo eh + + Worksheets(ADJUSTMENT_WORKSHEET).Range(PCEC_COL & CStr(current_row)).Value = pcec + +Done: + Exit Function + +eh: + Debug.Print "writePCEC:Error: " & Err.Description + +End Function + +Function writeAccount(current_row As Integer, account As String) + On Error GoTo eh + + Worksheets(ADJUSTMENT_WORKSHEET).Range(ACCOUNT_COL & CStr(current_row)).Value = account + +Done: + Exit Function + +eh: + Debug.Print "writeAccount:Error: " & Err.Description + + +End Function + +Function getPCCO(current_row As Integer) + On Error GoTo eh + + Dim output As String + output = Worksheets(ADJUSTMENT_WORKSHEET).Range(PCCO_COL & CStr(current_row)).Value + +Done: + getPCCO = output + Exit Function + +eh: + Debug.Print "getPCCO:Error: " & Err.Description + + +End Function + + +Function getGrandTotal(current_row As Integer) + On Error GoTo eh + + Dim output As String + + output = Worksheets(ADJUSTMENT_WORKSHEET).Range(GRANDTOTAL_COL & CStr(current_row)).Text + If (InStr(output, "###") >= 0) Then + output = Worksheets(ADJUSTMENT_WORKSHEET).Range(GRANDTOTAL_COL & CStr(current_row)).Value + End If + +Done: + getGrandTotal = output + Exit Function + +eh: + Debug.Print "getGrandTotal:Error: " & Err.Description & ":" & CStr(current_row) + +End Function + +Function getAccount(current_row As Integer) + On Error GoTo eh + + Dim output As String + + output = Worksheets(ADJUSTMENT_WORKSHEET).Range(ACCOUNT_COL & CStr(current_row)).Text + If (InStr(output, "###") >= 0) Then + output = Worksheets(ADJUSTMENT_WORKSHEET).Range(ACCOUNT_COL & CStr(current_row)).Value + End If + +Done: + getAccount = output + Exit Function + +eh: + Debug.Print "getAccount:Error: " & Err.Description & ":" & CStr(current_row) + + appendRemarks current_row, "account format error, skipping" + +End Function + +Function getAmountInFunc(current_row As Integer) + On Error GoTo eh + + Dim output As String + + output = Worksheets(ADJUSTMENT_WORKSHEET).Range(AMOUNT_IN_FUNC_COL & CStr(current_row)).Text + If (InStr(output, "###") >= 0) Then + output = Worksheets(ADJUSTMENT_WORKSHEET).Range(AMOUNT_IN_FUNC_COL & CStr(current_row)).Value + End If + +Done: + getAmountInFunc = output + Exit Function + +eh: + 'MsgBox "getAmountInFunc:Error: " & Err.Description & ":" & CStr(current_row) + + appendRemarks current_row, "amount in func format error, skipping" + Err.Raise "Error in amount_in_func_format" + +End Function + +Function checkOutputCellReady(current_row As Integer) + On Error GoTo eh + + Dim output As Boolean + output = True + + Dim account_cell As Variant + account_cell = Worksheets(ADJUSTMENT_WORKSHEET).Range(ACCOUNT_COL & CStr(current_row)) + + If (IsEmpty(account_cell) = False) Then + output = False + End If + +Done: + checkOutputCellReady = output + Exit Function + +eh: + Debug.Print "checkOutputCellReady:Error: " & Err.Description + + +End Function + +Function checkCellFormat(test_cell As Variant) + On Error GoTo eh + + Dim Msg As String + + Msg = "no match" + Select Case IsEmpty(test_cell) + Case True + Msg = "General." + Case Else + Select Case IsNumeric(test_cell) + Case True + Msg = "Number." + Case Else + Select Case IsDate(test_cell) + Case True + Msg = "Date." + Case Else + Msg = "Text." + End Select + End Select + End Select + ' debug.print "checkCellFormat:" & test_cell.Address & ":" & Msg + +Done: + checkCellFormat = Msg + Exit Function + +eh: + Debug.Print "checkCellFormat:Error: " & Err.Description + + +End Function + + + +Function checkCurrentRowFormatValid(current_row As Integer) + On Error GoTo eh + + Dim test_cell As Variant + Dim output As Boolean + output = True + + test_cell = Worksheets(ADJUSTMENT_WORKSHEET).Range(ISIN_CODE_ESTD_COL & CStr(current_row)) + If "Text." = checkCellFormat(test_cell) Then + Debug.Print "ISIN_CODE_ESTD_COL:check ok" + Else + Debug.Print "ISIN_CODE_ESTD_COL:check failed" + Debug.Print checkCellFormat(test_cell) + output = False + End If + + test_cell = Worksheets(ADJUSTMENT_WORKSHEET).Range(BOOK_COL & CStr(current_row)) + If "Text." = checkCellFormat(test_cell) Then + Debug.Print "BOOK_COL:check ok" + Else + Debug.Print "BOOK_COL:check failed" + Debug.Print checkCellFormat(test_cell) + output = False + End If + + test_cell = Worksheets(ADJUSTMENT_WORKSHEET).Range(BUY_COL & CStr(current_row)) + If "Number." = checkCellFormat(test_cell) or "General." = checkCellFormat(test_cell) Then + Debug.Print "BUY_COL:check ok" + Else + Debug.Print "BUY_COL:check failed" + appendRemarks current_row, "BUY_COL:check failed" + Debug.Print checkCellFormat(test_cell) + output = False + End If + + test_cell = Worksheets(ADJUSTMENT_WORKSHEET).Range(GRANDTOTAL_COL & CStr(current_row)) + If "Number." = checkCellFormat(test_cell) Then + Debug.Print "GRANDTOTAL_COL:check ok" + Else + Debug.Print "GRANDTOTAL_COL:check failed" + Debug.Print checkCellFormat(test_cell) + output = False + End If + + test_cell = Worksheets(ADJUSTMENT_WORKSHEET).Range(PCCO_COL & CStr(current_row)) + If "Text." = checkCellFormat(test_cell) Then + Debug.Print "PCCO_COL:check ok" + Else + Debug.Print "PCCO_COL:check failed" + Debug.Print checkCellFormat(test_cell) + output = False + End If + + test_cell = Worksheets(ADJUSTMENT_WORKSHEET).Range(AMOUNT_IN_FUNC_COL & CStr(current_row)) + If "Number." = checkCellFormat(test_cell) Then + Debug.Print "AMOUNT_IN_FUNC_COL:check ok" + Else + Debug.Print "AMOUNT_IN_FUNC_COL:check failed" + appendRemarks current_row, "AMOUNT_IN_FUNC_COL:check failed" + Debug.Print checkCellFormat(test_cell) + output = False + End If + + test_cell = Worksheets(ADJUSTMENT_WORKSHEET).Range(BMF_ID_COL & CStr(current_row)) + If "Number." = checkCellFormat(test_cell) or "Text." = checkCellFormat(test_cell) Then + Debug.Print "BMF_ID_COL:check ok" + Else + Debug.Print "BMF_ID_COL:check failed" + appendRemarks current_row, "BMF_ID_COL:check failed" + Debug.Print checkCellFormat(test_cell) + output = False + End If + + + test_cell = Worksheets(ADJUSTMENT_WORKSHEET).Range(ACCOUNT_COL & CStr(current_row)) + If "General." = checkCellFormat(test_cell) Then + Debug.Print "ACCOUNT_COL:check ok" + Else + Debug.Print "ACCOUNT_COL:check failed" + Debug.Print checkCellFormat(test_cell) + output = False + End If + + test_cell = Worksheets(ADJUSTMENT_WORKSHEET).Range(DEBIT_COL & CStr(current_row)) + If "General." = checkCellFormat(test_cell) Then + Debug.Print "DEBIT_COL:check ok" + Else + Debug.Print "DEBIT_COL:check failed" + Debug.Print checkCellFormat(test_cell) + output = False + End If + + test_cell = Worksheets(ADJUSTMENT_WORKSHEET).Range(CREDIT_COL & CStr(current_row)) + If "General." = checkCellFormat(test_cell) Then + Debug.Print "CREDIT_COL:check ok" + Else + Debug.Print "CREDIT_COL:check failed" + Debug.Print checkCellFormat(test_cell) + output = False + End If + + test_cell = Worksheets(ADJUSTMENT_WORKSHEET).Range(REMARKS_COL & CStr(current_row)) + If "General." = checkCellFormat(test_cell) or "Text." = checkCellFormat(test_cell) Then + Debug.Print "REMARKS_COL:check ok" + Else + Debug.Print "REMARKS_COL:check failed" + Debug.Print checkCellFormat(test_cell) + output = False + End If + +Done: + checkCurrentRowFormatValid = output + Exit Function + +eh: + Debug.Print "checkCurrentRowFormatValid:Error: " & Err.Description + + +End Function + + +Function checkCurrentRowValueValid(current_row As Integer) + On Error GoTo eh + + Dim output As Boolean + output = True + + If (checkIfGrandTotalRefNotFound(current_row) = True) Then + Debug.Print "grand total ref not found" + appendRemarks current_row, "grand total reference not found, skipping" + output = False + End If + + If (checkIfAmountInFuncRefNotFound(current_row) = True) Then + Debug.Print "amount in func ref not found" + appendRemarks current_row, "amount in func reference not found, skipping" + output = False + End If + + If (checkIfPCCORefNotFound(current_row) = True) Then + Debug.Print "PCCO ref not found" + appendRemarks current_row, "PCCO reference not found, skipping" + output = False + End If + + If output Then + + Dim grand_total_str As String + Dim amount_in_func_str As String + Dim pcco_str As String + + grand_total_str = getGrandTotal(current_row) + amount_in_func_str = getAmountInFunc(current_row) + pcco_str = getPCCO(current_row) + + ' Debug.print InStr(pcco_str, "Error") >= 0 + ' Debug.print InStr(amount_in_func_str, "N/A") >= 0 + ' Debug.print InStr(grand_total_str, "N/A") >= 0 + + If (Trim(pcco_str) = "" Or InStr(pcco_str, "N/A") > 0 Or InStr(pcco_str, "Error") > 0) Then + output = False + End If + + If (Trim(amount_in_func_str) = "" Or InStr(amount_in_func_str, "N/A") > 0 Or InStr(amount_in_func_str, "Error") > 0) Then + output = False + End If + + If (Trim(grand_total_str) = "" Or InStr(grand_total_str, "N/A") > 0 Or InStr(grand_total_str, "Error") > 0) Then + output = False + End If + + Else + Debug.Print "skipping as grand total ref not found" + End If + +Done: + checkCurrentRowValueValid = output + Exit Function + +eh: + 'MsgBox "checkCurrentRowValueValid:Error: " & Err.Description + 'Stop + appendRemarks current_row, "row value not valid" + checkCurrentRowValueValid = False + +End Function + +Function checkFullFillCasePCCOCode_P1375000Situation_1(grand_total As Currency, amount_in_func As Currency) + On Error GoTo eh + + ' ### Special case (if PCCO Code = P1375000): + ' ### Situation 1: + ' if Grand total > 0 + Dim output As Boolean + output = (grand_total > 0) + +Done: + checkFullFillCasePCCOCode_P1375000Situation_1 = output + Exit Function + +eh: + Debug.Print "checkFullFillCasePCCOCode_P1375000Situation_1:Error: " & Err.Description + + +End Function + +Function checkFullFillCasePCCOCode_P1375000Situation_2(grand_total As Currency, amount_in_func As Currency) + On Error GoTo eh + + ' ### Special case (if PCCO Code = P1375000): + ' ### Situation 2: + ' if Grand total < 0 + Dim output As Boolean + output = (grand_total < 0) + +Done: + checkFullFillCasePCCOCode_P1375000Situation_2 = output + Exit Function + +eh: + Debug.Print "checkFullFillCasePCCOCode_P1375000Situation_2:Error: " & Err.Description + + +End Function + +Function checkFullFillCasePCCOCode_P1375000Situation_3(grand_total As Currency, amount_in_func As Currency) + On Error GoTo eh + + ' ### Special case (if PCCO Code = P1375000): + ' ### Situation 3: + ' if Grand total = 0 + ' - do nothing + Dim output As Boolean + output = (grand_total = 0) + +Done: + checkFullFillCasePCCOCode_P1375000Situation_3 = output + Exit Function + +eh: + Debug.Print "checkFullFillCasePCCOCode_P1375000Situation_3:Error: " & Err.Description + + +End Function + +Function checkFullFillCaseCommonSituation_1(grand_total As Currency, amount_in_func As Currency) + On Error GoTo eh + + ' ### Situation 1: + ' if Grand total > 0 (row 8 ?) + Dim output As Boolean + output = (grand_total > 0) + +Done: + checkFullFillCaseCommonSituation_1 = output + Exit Function + +eh: + Debug.Print "checkFullFillCaseCommonSituation_1:Error: " & Err.Description + + +End Function + +Function checkFullFillCaseCommonSituation_2(grand_total As Currency, amount_in_func As Currency) + On Error GoTo eh + + ' ### Situation 2: + ' Grand total < 0 + Dim output As Boolean + output = (grand_total < 0) + +Done: + checkFullFillCaseCommonSituation_2 = output + Exit Function + +eh: + Debug.Print "checkFullFillCaseCommonSituation_2:Error: " & Err.Description + + +End Function + +Function checkFullFillCaseCommonSituation_3(grand_total As Currency, amount_in_func As Currency) + On Error GoTo eh + + ' ### Situation 3: + ' if Grand total = 0 + Dim output As Boolean + output = (grand_total = 0) + +Done: + checkFullFillCaseCommonSituation_3 = output + Exit Function + +eh: + Debug.Print "checkFullFillCaseCommonSituation_3:Error: " & Err.Description + +End Function + +Function checkIfReferenceNotFound(cell As Variant) + On Error GoTo eh + + Dim test_text As Variant + test_text = cell.Text + Dim output As Boolean + + output = (InStr(test_text, "#REF!") > 0) + +Done: + checkIfReferenceNotFound = output + Exit Function + +eh: + Debug.Print "checkIfReferenceNotFound:Error: " & Err.Description + +End Function + +Function checkIfGrandTotalRefNotFound(current_row As Integer) + On Error GoTo eh + + Dim test_cell As Variant + test_cell = Worksheets(ADJUSTMENT_WORKSHEET).Range(GRANDTOTAL_COL & CStr(current_row)) + +Done: + checkIfGrandTotalRefNotFound = checkIfReferenceNotFound(Worksheets(ADJUSTMENT_WORKSHEET).Range(GRANDTOTAL_COL & CStr(current_row))) + Exit Function + +eh: + Debug.Print "checkIfGrandTotalRefNotFound:Error: " & Err.Description & ":" & GRANDTOTAL_COL & CStr(current_row) + + +End Function + +Function checkIfPCCORefNotFound(current_row As Integer) + On Error GoTo eh + + Dim test_cell As Variant + test_cell = Worksheets(ADJUSTMENT_WORKSHEET).Range(PCCO_COL & CStr(current_row)) + +Done: + checkIfPCCORefNotFound = checkIfReferenceNotFound(Worksheets(ADJUSTMENT_WORKSHEET).Range(PCCO_COL & CStr(current_row))) + Exit Function + +eh: + Debug.Print "checkIfPCCORefNotFound:Error: " & Err.Description & ":" & PCCO_COL & CStr(current_row) + + +End Function + +Function checkIfAmountInFuncRefNotFound(current_row As Integer) + On Error GoTo eh + + Dim test_cell As Variant + test_cell = Worksheets(ADJUSTMENT_WORKSHEET).Range(AMOUNT_IN_FUNC_COL & CStr(current_row)) + +Done: + checkIfAmountInFuncRefNotFound = checkIfReferenceNotFound(Worksheets(ADJUSTMENT_WORKSHEET).Range(AMOUNT_IN_FUNC_COL & CStr(current_row))) + Exit Function + +eh: + Debug.Print "checkIfAmountInFuncRefNotFound:Error: " & Err.Description & ":" & AMOUNT_IN_FUNC_COL & CStr(current_row) + +End Function + +Function applyCommonSituation_1(current_row As Integer) + On Error GoTo eh + + Dim net_var As Variant + Dim grand_total_var As Variant + Dim amount_in_func_var As Variant + + grand_total_var = CDec(getGrandTotal(current_row)) + amount_in_func_var = CDec(getAmountInFunc(current_row)) + net_var = grand_total_var + amount_in_func_var + +' current row +' - PCEC(Column I): 302210, PCCO: A1311000, Account column: 1020, debit column: Grand Total + writePCEC current_row, PCEC_302210 + writePCCO current_row, PCCO_A1311000 + writeAccount current_row, AC_1020 + writeDebit current_row, grand_total_var + +' - add row: + insertNewRowBelow current_row + current_row = current_row + 1 + ' - PCEC: 921810, + ' - PCCO: 92100100 + ' - account:8600, + ' - debit: grand total + writePCEC current_row, PCEC_921810 + writePCCO current_row, PCCO_92100100 + writeAccount current_row, AC_8600 + writeDebit current_row, grand_total_var + +' - add row: + insertNewRowBelow current_row + current_row = current_row + 1 + ' - PCEC: 922910, + ' - PCCO: 98900100 + ' - account:8601, + ' - Credit: grand total + writePCEC current_row, PCEC_922910 + writePCCO current_row, PCCO_98900100 + writeAccount current_row, AC_8601 + writeCredit current_row, grand_total_var + +' - add row: +' - account NA8601, +' - credit: grand total + amount in func +' insertNewRowBelow current_row +' current_row = current_row + 1 +' writeAccount current_row, AC_8601 +' writeCredit current_row, net_var + +Done: + applyCommonSituation_1 = True + Exit Function + +eh: + Debug.Print "applyCommonSituation_1:Error: " & Err.Description + + +End Function + +Function applyCommonSituation_2(current_row As Integer) + On Error GoTo eh + + Dim net_var As Variant + Dim grand_total_var As Variant + Dim amount_in_func_var As Variant + + grand_total_var = CDec(getGrandTotal(current_row)) + amount_in_func_var = CDec(getAmountInFunc(current_row)) + net_var = grand_total_var + amount_in_func_var + +' - current_row: +' - PCEC(Column I): 302210, +' - PCCO: A1311000, +' - Account column: 1020, +' - credit column: Grand Total + writePCEC current_row, PCEC_302210 + writePCCO current_row, PCCO_A1311000 + writeAccount current_row, AC_1020 + writeCredit current_row, grand_total_var + +' - add row: + insertNewRowBelow current_row + current_row = current_row + 1 +' - PCEC: 922810, +' - PCCO: 92200100, +' - account:8700, +' - credit: grand total + writePCEC current_row, PCEC_921810 + writePCCO current_row, PCCO_92100100 + writeAccount current_row, AC_8700 + writeCredit current_row, grand_total_var + +' - add row: + insertNewRowBelow current_row + current_row = current_row + 1 +' - PCEC: 921910, +' - PCCO: 98900200, +' - account:8701, +' - debit: grand total + writePCEC current_row, PCEC_921910 + writePCCO current_row, PCCO_98900200 + writeAccount current_row, AC_8701 + writeDebit current_row, grand_total_var + +' ' - add row: +' ' - account NA8701, +' ' - debit: grand total + amount in func +' insertNewRowBelow current_row +' current_row = current_row + 1 +' writeAccount current_row, AC_8701 +' writeDebit current_row, net_var + +Done: + applyCommonSituation_2 = True + Exit Function + +eh: + Debug.Print "applyCommonSituation_2:Error: " & Err.Description + + +End Function + +Function applyCommonSituation_3(current_row As Integer) + On Error GoTo eh + +' if Grand total + amount in func = 0 +' - do nothing + applyCommonSituation_3 = True + +Done: + applyCommonSituation_3 = True + Exit Function + +eh: + Debug.Print "applyCommonSituation_3:Error: " & Err.Description + + +End Function + +Function applyPcco1375Situation_1(current_row As Integer) + On Error GoTo eh + + Dim net_var As Variant + Dim grand_total_var As Variant + Dim amount_in_func_var As Variant + + grand_total_var = CDec(getGrandTotal(current_row)) + amount_in_func_var = CDec(getAmountInFunc(current_row)) + net_var = grand_total_var + amount_in_func_var + +' - current row +' - PCEC(Column I): 302410, +' - PCCO: P1375000, +' - Account column: 2020, +' - debit column: Grand Total + writePCEC current_row, PCEC_302210 + writePCCO current_row, PCCO_P1375000 + writeAccount current_row, AC_2020 + writeDebit current_row, grand_total_var + +' - add row: + insertNewRowBelow current_row + current_row = current_row + 1 +' - PCEC: 921810, +' - PCCO: 92100100, +' - account:8600, +' - debit: grand total + writePCEC current_row, PCEC_921810 + writePCCO current_row, PCCO_92100100 + writeAccount current_row, AC_8600 + writeDebit current_row, grand_total_var + +' - add row: + insertNewRowBelow current_row + current_row = current_row + 1 +' - PCEC: 922910, +' - PCCO: 98900100, +' - account:8601, +' - credit: grand total + writePCEC current_row, PCEC_922910 + writePCCO current_row, PCCO_98900100 + writeAccount current_row, AC_8601 + writeCredit current_row, grand_total_var + + ' ' - add row: + ' ' - account NA8601, + ' ' - credit: grand total + amount in func + ' insertNewRowBelow current_row + ' current_row = current_row + 1 + ' writeAccount current_row, AC_8601 + ' writeCredit current_row, net_var + + applyPcco1375Situation_1 = True + +Done: + applyPcco1375Situation_1 = True + Exit Function + +eh: + Debug.Print "applyPcco1375Situation_1:Error: " & Err.Description + + +End Function + +Function applyPcco1375Situation_2(current_row As Integer) + On Error GoTo eh + + Dim net_var As Variant + Dim grand_total_var As Variant + Dim amount_in_func_var As Variant + + grand_total_var = CDec(getGrandTotal(current_row)) + amount_in_func_var = CDec(getAmountInFunc(current_row)) + net_var = grand_total_var + amount_in_func_var + +' - Account +' - PCEC(Column I): 302410, +' - PCCO: P1375000, +' - Account column: 2020, +' - credit column: Grand Total + writePCEC current_row, PCEC_302410 + writePCCO current_row, PCCO_P1375000 + writeAccount current_row, AC_2020 + writeCredit current_row, grand_total_var + +' - add row: + insertNewRowBelow current_row + current_row = current_row + 1 +' - PCEC: 922810, +' - PCCO: 92200100, +' - account:8700, +' - credit: grand total + writePCEC current_row, PCEC_922810 + writePCCO current_row, PCCO_92200100 + writeAccount current_row, AC_8700 + writeCredit current_row, grand_total_var + +' - add row: + insertNewRowBelow current_row + current_row = current_row + 1 +' - PCEC: 921910, +' - PCCO: 98900200, +' - account:8701, +' - debit: grand total + writePCEC current_row, PCEC_921910 + writePCCO current_row, PCCO_98900200 + writeAccount current_row, AC_8701 + writeDebit current_row, grand_total_var + +' ' - add row: +' ' - account 8701, +' ' - debit: grand total + amount in func +' insertNewRowBelow current_row +' current_row = current_row + 1 +' writeAccount current_row, AC_8701 +' writeDebit current_row, net_var + + applyPcco1375Situation_2 = True + +Done: + applyPcco1375Situation_2 = True + Exit Function + +eh: + Debug.Print "applyPcco1375Situation_2:Error: " & Err.Description + + +End Function + +Function applyPcco1375Situation_3(current_row As Integer) + On Error GoTo eh + +' - do nothing + applyPcco1375Situation_3 = True + +Done: + applyPcco1375Situation_3 = True + Exit Function + +eh: + Debug.Print "applyPcco1375Situation_3:Error: " & Err.Description + + +End Function + + +Sub test() + ' Debug.Assert True = isCurrentRowNeedToProcess("7") + ' Debug.Assert False = isCurrentRowNeedToProcess("180") + ' debug.assert False = isAllDone ("7") + ' debug.assert True = isAllDone ("180") + + ' debug.assert False = checkFullFillCaseCommonSituation_1(-10,1) + ' debug.assert False = checkFullFillCaseCommonSituation_1(1,-10) + ' debug.assert False = checkFullFillCaseCommonSituation_1(-10,-10) + ' debug.assert False = checkFullFillCaseCommonSituation_1(0,0) + ' debug.assert True = checkFullFillCaseCommonSituation_1(0,1) + ' debug.assert True = checkFullFillCaseCommonSituation_1(1,0) + ' debug.assert True = checkFullFillCaseCommonSituation_1(1,1) + + ' debug.assert True = checkFullFillCaseCommonSituation_2(-10,1) + ' debug.assert True = checkFullFillCaseCommonSituation_2(1,-10) + ' debug.assert True = checkFullFillCaseCommonSituation_2(-10,-10) + ' debug.assert False = checkFullFillCaseCommonSituation_2(0,0) + ' debug.assert False = checkFullFillCaseCommonSituation_2(0,1) + ' debug.assert False = checkFullFillCaseCommonSituation_2(1,0) + ' debug.assert False = checkFullFillCaseCommonSituation_2(1,1) + + ' debug.assert True = checkFullFillCaseCommonSituation_3(0,0) + ' debug.assert False = checkFullFillCaseCommonSituation_3(1,1) + ' debug.assert False = checkFullFillCaseCommonSituation_3(-10,-10) + ' debug.assert False = checkFullFillCaseCommonSituation_3(1,0) + ' debug.assert False = checkFullFillCaseCommonSituation_3(0,1) + + ' debug.print Worksheets("Adjustment_TEST").Range("G86") + + init + + current_row = 29 + ' amount_in_func_str = getAmountInFunc(current_row) + ' pcco_str = getPCCO(current_row) + + ' debug.print current_row + ' debug.print grand_total_str + ' debug.print checkIfGrandTotalRefNotFound(current_row) + Debug.Print checkCurrentRowValueValid(current_row) + + ' current_row_value_valid = False + ' current_row_value_valid = checkCurrentRowValueValid(pcco_str, amount_in_func_str, grand_total_str) + ' check_next_row_ready = False + ' check_next_row_ready = checkOutputCellReady(current_row) + +End Sub + +Function getLastCheckRow(first_row As Integer) + getLastCheckRow = first_row + 10 +End Function + +Function insertNewRowBelow(current_row As Integer) + Range("A" & current_row + 1).EntireRow.Insert +End Function + +Function isAllDone(input_row As Integer) + On Error GoTo eh + + Dim cell_value As Currency + Dim output As Boolean + Dim i As Integer + output = True + + last_check_row = getLastCheckRow(input_row) + For i = input_row To last_check_row + If (isCurrentRowNeedToProcess(i) = True) Then + output = False + Exit For + End If + Next i + + isAllDone = output + +Done: + isAllDone = output + Exit Function + +eh: + Debug.Print "isAllDone:Error: " & Err.Description + + +End Function + +Function isCurrentRowNeedToProcess(input_row As Integer) + On Error GoTo eh + + Dim output As Boolean + Dim cell_value As Currency + Dim input_cell As String + input_cell = GRANDTOTAL_COL & input_row + +Done: + isCurrentRowNeedToProcess = Not (IsEmpty(Worksheets(ADJUSTMENT_WORKSHEET).Range(input_cell).Value)) + Exit Function + +eh: + Debug.Print "isCurrentRowNeedToProcess:Error: " & Err.Description + + +End Function + +Sub Main() + On Error GoTo eh + + Debug.Print "start a new run" + + init + + If (checkPCECColumnExist) Then + writeRemarks HEADER_ROW, "PCEC col exist" + Else + createPCECCol "hello" + writeRemarks HEADER_ROW, "PCEC col created" + End If + + While isAllDone(current_row) = False + ' While current_row < 9 + Debug.Print "processing row: " & current_row + + Debug.Print checkCurrentRowFormatValid(current_row) + + current_row_value_valid = False + current_row_value_valid = checkCurrentRowValueValid(current_row) + check_next_row_ready = False + check_next_row_ready = checkOutputCellReady(current_row) + check_row_format_valid = False + check_row_format_valid = checkCurrentRowFormatValid(current_row) + + If (current_row_value_valid And check_next_row_ready And check_row_format_valid) Then + ' input considered valid after this line + + Dim grand_total_str As String + Dim amount_in_func_str As String + Dim pcco_str As String + + grand_total_str = getGrandTotal(current_row) + amount_in_func_str = getAmountInFunc(current_row) + pcco_str = getPCCO(current_row) + + Debug.Print "before" + Debug.Print grand_total_str + Debug.Print "pass" + grand_total_curr = CCur(grand_total_str) + + amount_in_func_curr = CCur(amount_in_func_str) + + If (pcco_str = "P1375000") Then + If (checkFullFillCasePCCOCode_P1375000Situation_1(grand_total_curr, amount_in_func_curr) = True) Then + writeRemarks current_row, "P1375000 common sit 1" + fillRemarksLightPurple current_row + applyPcco1375Situation_1 (current_row) + ElseIf (checkFullFillCasePCCOCode_P1375000Situation_2(grand_total_curr, amount_in_func_curr) = True) Then + writeRemarks current_row, "P1375000 common sit 2" + fillRemarksLightYellow current_row + applyPcco1375Situation_2 (current_row) + ElseIf (checkFullFillCasePCCOCode_P1375000Situation_3(grand_total_curr, amount_in_func_curr) = True) Then + writeRemarks current_row, "P1375000 common sit 3" + fillRemarksLightCyan current_row + applyPcco1375Situation_3 (current_row) + Else + Debug.Print "missing pcco 1375 situation" + End If + + ElseIf (pcco_str = "N/A") Then + Debug.Print "pcco value is N/A" + + Else + If (checkFullFillCaseCommonSituation_1(grand_total_curr, amount_in_func_curr) = True) Then + writeRemarks current_row, "common sit 1" + fillRemarksLightBlue current_row + applyCommonSituation_1 (current_row) + ElseIf (checkFullFillCaseCommonSituation_2(grand_total_curr, amount_in_func_curr) = True) Then + writeRemarks current_row, "common sit 2" + fillRemarksLightGreen current_row + applyCommonSituation_2 (current_row) + ElseIf (checkFullFillCaseCommonSituation_3(grand_total_curr, amount_in_func_curr) = True) Then + writeRemarks current_row, "common sit 3" + fillRemarksLightPink current_row + applyCommonSituation_3 (current_row) + Else + Debug.Print "missing situation" + End If + End If + + Else + + If getAccount(current_row) = AC_1020 Then + appendRemarks current_row, "output row" + ElseIf getAccount(current_row) = AC_8600 Then + appendRemarks current_row, "output row" + ElseIf getAccount(current_row) = AC_8601 Then + appendRemarks current_row, "output row" + ElseIf getAccount(current_row) = AC_8700 Then + appendRemarks current_row, "output row" + ElseIf getAccount(current_row) = AC_8701 Then + appendRemarks current_row, "output row" + ElseIf getAccount(current_row) = AC_1311 Then + appendRemarks current_row, "output row" + ElseIf getAccount(current_row) = AC_1375 Then + appendRemarks current_row, "output row" + ElseIf getAccount(current_row) = AC_2020 Then + appendRemarks current_row, "output row" + + Else + Debug.Print "input is not valid, skipping row" + fillRemarksLightRed current_row + appendRemarks current_row, "input is not valid, skipping row" + + If (checkOutputCellReady(current_row)) Then + If (checkCurrentRowValueValid(current_row)) Then + Else + ' appendRemarks current_row, "input is not valid" + End If + End If + End If + + End If + + current_row = current_row + 1 + Wend + + +Done: + Debug.Print "done" + Exit Sub + +eh: + writeRemarks current_row, "error found" + 'MsgBox "Main:Error: " & Err.Description + 'Stop + +End Sub + +Function createPCECCol(test) + On Error GoTo eh + Dim temp As String + + 'temp = Worksheets(ADJUSTMENT_WORKSHEET).Range(PCEC_HEADER_CELL).Text + Worksheets(ADJUSTMENT_WORKSHEET).Range(PCEC_COL & ":" & PCEC_COL).EntireColumn.Insert + Worksheets(ADJUSTMENT_WORKSHEET).Range(PCEC_HEADER_CELL).Value = PCEC_COL_LABEL + +Done: + writeRemarks HEADER_ROW, "PCEC col created" + Debug.Print "createPCECCol:done" + Exit Function + +eh: + writeRemarks 1, "createPCECCol:error found" + 'MsgBox "Main:Error: " & Err.Description + 'Stop + +End Function + +Function checkPCECColumnExist() + On Error GoTo eh + Dim temp As String + Dim output As Boolean + + temp = Worksheets(ADJUSTMENT_WORKSHEET).Range(PCEC_HEADER_CELL).Text + + output = False + If (temp = "PCEC") Then + output = True + End If + + checkPCECColumnExist = output +Done: + Debug.Print "checkPCECColumnExist:done" + Exit Function + +eh: + writeRemarks 1, "checkPCECColumnExist:error found" + 'MsgBox "Main:Error: " & Err.Description + 'Stop + + +End Function + +Sub helloworld() + ' debug.print isCurrentRowNeedToProcess ("7") + ' debug.print isCurrentRowNeedToProcess ("180") + + ' debug.print isAllDone ("7") + ' debug.print isAllDone ("180") + +End Sub + +Sub ResetExcelTest() + Worksheets("Sheet1").Activate + Columns("B:Q").Copy + + Worksheets("Adjustment").Activate + Range("B1").Select + ActiveSheet.Paste + + Range("B1").Select + + Range("R:Z").Delete +End Sub + + diff --git a/task1/_incoming/Example_file.xlsx b/task1/_incoming/Example_file.xlsx new file mode 100644 index 0000000..ce3910f Binary files /dev/null and b/task1/_incoming/Example_file.xlsx differ diff --git a/task1/_incoming/IMG_9450.jpeg b/task1/_incoming/IMG_9450.jpeg new file mode 100644 index 0000000..7a5032d Binary files /dev/null and b/task1/_incoming/IMG_9450.jpeg differ diff --git a/task1/_incoming/IMG_9459.jpeg b/task1/_incoming/IMG_9459.jpeg new file mode 100644 index 0000000..af86857 Binary files /dev/null and b/task1/_incoming/IMG_9459.jpeg differ diff --git a/task1/package.json b/task1/package.json new file mode 100644 index 0000000..47d7a42 --- /dev/null +++ b/task1/package.json @@ -0,0 +1,13 @@ +{ + "name": "natalie0312", + "version": "1.0.0", + "description": "excel adjustment", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "gitUpdate":"git add . && git commit -m\"update natalie0312,\"" + }, + "keywords": [], + "author": "", + "license": "ISC" +} diff --git a/task2/Copy and Paste.xlsm b/task2/Copy and Paste.xlsm new file mode 100644 index 0000000..2e69948 Binary files /dev/null and b/task2/Copy and Paste.xlsm differ diff --git a/task2/d7a3b2ca-8184-4874-8f1b-21e77189936a_progressive.jpg b/task2/d7a3b2ca-8184-4874-8f1b-21e77189936a_progressive.jpg new file mode 100644 index 0000000..435db3d --- /dev/null +++ b/task2/d7a3b2ca-8184-4874-8f1b-21e77189936a_progressive.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6af2f9426cb7dc157ecbe2c83b2f19ba411b4198ca9d2faecdbe3262927967fb +size 588359 diff --git a/task2/draft1/Copy and Paste_draft.xlsm b/task2/draft1/Copy and Paste_draft.xlsm new file mode 100644 index 0000000..6635a7d Binary files /dev/null and b/task2/draft1/Copy and Paste_draft.xlsm differ diff --git a/task2/draft1/ThisWorkbook.cls b/task2/draft1/ThisWorkbook.cls new file mode 100644 index 0000000..c067959 --- /dev/null +++ b/task2/draft1/ThisWorkbook.cls @@ -0,0 +1,454 @@ +' change log: + +Option explicit + +Dim first_row As Integer +Dim current_row As Integer +Dim last_check_row As Integer + +Dim ADJUSTMENT_WORKSHEET as string +Dim BMF_ADJUSTMENT_WORKSHEET as string + +' BALANCE_SHEET +Dim COL_BALANCE_SHEET_NA_1 as string +Dim COL_BALANCE_SHEET_PCCO_1 as string +Dim COL_BALANCE_SHEET_AMOUNT_TO_ADJ_1 as string + +Dim COL_BALANCE_SHEET_NA_2 as string +Dim COL_BALANCE_SHEET_PCCO_2 as string +Dim COL_BALANCE_SHEET_AMOUNT_TO_ADJ_2 as string + +' OFF_BALANCE_SHEET +Dim COL_OFF_BALANCE_SHEET_NA_1 as string +Dim COL_OFF_BALANCE_SHEET_PCCO_1 as string +Dim COL_OFF_BALANCE_SHEET_AMOUNT_TO_ADJ_1 as string + +Dim COL_OFF_BALANCE_SHEET_NA_2 as string +Dim COL_OFF_BALANCE_SHEET_PCCO_2 as string +Dim COL_OFF_BALANCE_SHEET_AMOUNT_TO_ADJ_2 as string + +Dim COL_FINAL_BMF_ID as string + +Dim COL_BMF_ADJUSTMENT_SHEET_BMF_REFERENCE_ID as string +Dim COL_BMF_ADJUSTMENT_SHEET_LINE_TYPE as string +Dim COL_BMF_ADJUSTMENT_SHEET_ADJUSTMENT_ID as string +Dim COL_BMF_ADJUSTMENT_SHEET_ADJUSTMENT_TYPE as string +Dim COL_BMF_ADJUSTMENT_SHEET_COMMENT as string +Dim COL_BMF_ADJUSTMENT_SHEET_REPORTING_ENTITY as string +Dim COL_BMF_ADJUSTMENT_SHEET_PCCO as string +Dim COL_BMF_ADJUSTMENT_SHEET_PCEC as string +Dim COL_BMF_ADJUSTMENT_SHEET_ACCOUNTING_BALANCE_CURRENCY as string +Dim COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_ACCT_BALANCE as string +Dim COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_FUNT as string +Dim COL_BMF_ADJUSTMENT_SHEET_FAIR_VALUE as string +Dim COL_BMF_ADJUSTMENT_SHEET_ECONOMIC_AGENT as string +Dim COL_BMF_ADJUSTMENT_SHEET_OPAQUE_REPORTING_ENTITY as string +Dim COL_BMF_ADJUSTMENT_SHEET_REMAINING_MATURITY as string +Dim COL_BMF_ADJUSTMENT_SHEET_IFRS13 as string +Dim COL_BMF_ADJUSTMENT_SHEET_COUNTRY as string +Dim COL_BMF_ADJUSTMENT_SHEET_LOCAL_OPERATIONAL_ACCOUNT as string + + +Sub init() + On Error GoTo eh + + ' HEADER_ROW = 6 + first_row = 6 + current_row = first_row + last_check_row = 9999 + + ' ADJUSTMENT_SHEET + ADJUSTMENT_WORKSHEET = "Adjustment" + + ' BALANCE_SHEET + COL_BALANCE_SHEET_NA_1 = "Q" + COL_BALANCE_SHEET_PCCO_1 = "R" + COL_BALANCE_SHEET_AMOUNT_TO_ADJ_1 = "S" + + COL_BALANCE_SHEET_NA_2 = "T" + COL_BALANCE_SHEET_PCCO_2 = "U" + COL_BALANCE_SHEET_AMOUNT_TO_ADJ_2 = "V" + + ' OFF_BALANCE_SHEET + COL_OFF_BALANCE_SHEET_NA_1 = "X" + COL_OFF_BALANCE_SHEET_PCCO_1 = "Y" + COL_OFF_BALANCE_SHEET_AMOUNT_TO_ADJ_1 = "Z" + + COL_OFF_BALANCE_SHEET_NA_2 = "AA" + COL_OFF_BALANCE_SHEET_PCCO_2 = "AB" + COL_OFF_BALANCE_SHEET_AMOUNT_TO_ADJ_2 = "AC" + + COL_FINAL_BMF_ID = "AI" + + ' BMF_ADJUSTMENT_SHEET + BMF_ADJUSTMENT_WORKSHEET = "BMF Adjustment result" + COL_BMF_ADJUSTMENT_SHEET_BMF_REFERENCE_ID = "A" + COL_BMF_ADJUSTMENT_SHEET_LINE_TYPE = "B" + COL_BMF_ADJUSTMENT_SHEET_ADJUSTMENT_ID = "C" + COL_BMF_ADJUSTMENT_SHEET_ADJUSTMENT_TYPE = "D" + COL_BMF_ADJUSTMENT_SHEET_COMMENT = "E" + COL_BMF_ADJUSTMENT_SHEET_REPORTING_ENTITY = "F" + COL_BMF_ADJUSTMENT_SHEET_PCCO = "G" + COL_BMF_ADJUSTMENT_SHEET_PCEC = "H" + COL_BMF_ADJUSTMENT_SHEET_ACCOUNTING_BALANCE_CURRENCY = "I" + COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_ACCT_BALANCE = "J" + COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_FUNT = "K" + COL_BMF_ADJUSTMENT_SHEET_FAIR_VALUE = "BH" + COL_BMF_ADJUSTMENT_SHEET_ECONOMIC_AGENT = "BI" + COL_BMF_ADJUSTMENT_SHEET_OPAQUE_REPORTING_ENTITY = "BJ" + COL_BMF_ADJUSTMENT_SHEET_REMAINING_MATURITY = "BK" + COL_BMF_ADJUSTMENT_SHEET_IFRS13 = "BL" + COL_BMF_ADJUSTMENT_SHEET_COUNTRY = "BM" + COL_BMF_ADJUSTMENT_SHEET_LOCAL_OPERATIONAL_ACCOUNT = "BN" + +Done: + Exit Sub + +eh: + Debug.Print "init:Error: " & Err.Description + + +End Sub + + +Function CheckIfBalanceSheetAmountToAdjust2IsZero(current_row As Integer) + On Error GoTo eh + Dim output as boolean + output = false + Dim temp as string + temp = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_BALANCE_SHEET_AMOUNT_TO_ADJ_2 & CStr(current_row)).Value + + if (temp = "0") then + output = true + end if + + CheckIfBalanceSheetAmountToAdjust2IsZero = output + +Done: + Exit Function + +eh: + Debug.Print "CheckIfBalanceSheetAmountToAdjust2IsZero:Error: " & Err.Description + +End Function + + + +Function CheckIfBalanceSheetNa2Exist(current_row As Integer) + On Error GoTo eh + Dim output as boolean + output = false + Dim temp as string + temp = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_BALANCE_SHEET_NA_2 & CStr(current_row)).Value + + if (temp <> "") then + output = true + end if + + CheckIfBalanceSheetNa2Exist = output + +Done: + Exit Function + +eh: + Debug.Print "CheckIfBalanceSheetNa2Exist:Error: " & Err.Description + +End Function + +Function CheckIfBalanceSheetPcco2Exist(current_row As Integer) + On Error GoTo eh + + Dim output as boolean + output = false + Dim temp as string + temp = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_BALANCE_SHEET_PCCO_2 & CStr(current_row)).Value + + if (temp <> "") then + output = true + end if + + CheckIfBalanceSheetPcco2Exist = output + +Done: + Exit Function + +eh: + Debug.Print "CheckIfBalanceSheetPcco2Exist:Error: " & Err.Description + +End Function + +Function CheckIfBalanceSheetAmountToAdjust2Exist(current_row As Integer) + On Error GoTo eh + + Dim output as boolean + output = false + Dim temp as string + temp = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_BALANCE_SHEET_AMOUNT_TO_ADJ_2 & CStr(current_row)).Value + + if (temp <> "") then + output = true + end if + + CheckIfBalanceSheetAmountToAdjust2Exist = output + +Done: + Exit Function + +eh: + Debug.Print "CheckIfBalanceSheetAmountToAdjust2Exist:Error: " & Err.Description + +End Function + +Function isCurrentRowNeedToProcess(input_row As Integer) + On Error GoTo eh + + Dim output As Boolean + Dim cell_value As Currency + Dim input_cell As String + input_cell = GRANDTOTAL_COL & input_row + +Done: + isCurrentRowNeedToProcess = Not (IsEmpty(Worksheets(ADJUSTMENT_WORKSHEET).Range(input_cell).Value)) + Exit Function + +eh: + Debug.Print "isCurrentRowNeedToProcess:Error: " & Err.Description + +End Function + +Function getLastCheckRow(first_row As Integer) + On Error GoTo eh + getLastCheckRow = first_row + 10 + +Done: + Exit Function + +eh: + Debug.Print "getLastCheckRow:Error: " & Err.Description + +End Function + +function checkAdjustmentSheetLastRow(current_row as integer) + On Error GoTo eh + Dim output as boolean + output = True + + dim j as integer + Dim temp as string + + For j = current_row to getLastCheckRow(current_row) + temp = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_FINAL_BMF_ID & CStr(current_row)).Value + if (temp <> "") then + output = False + end if + next j + + checkAdjustmentSheetLastRow = output + +Done: + Exit Function + +eh: + Debug.Print "checkAdjustmentSheetLastRow:Error: " & Err.Description + +end function + +function checkBmfAdjustmentSheetLastRow(current_row as integer) + On Error GoTo eh + Dim output as boolean + output = True + + dim j as integer + Dim temp as string + + For j = current_row to getLastCheckRow(current_row) + temp = Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_BMF_REFERENCE_ID & CStr(current_row)).Value + if (temp <> "") then + output = False + end if + next j + + checkBmfAdjustmentSheetLastRow = output + +Done: + Exit Function + +eh: + Debug.Print "checkBmfAdjustmentSheetLastRow:Error: " & Err.Description + +end function + +Function checkIfAlreadyExistInBmfAdjustmentResult(adj_bmf_id as string, adj_pcco as string) + On Error GoTo eh + + Dim i as integer + Dim bmf_adjustment_sheet_last_row as integer + Dim found as boolean + found = false + Dim temp_value as string + Dim bmf_adj_bmf_id as string + Dim bmf_adj_pcco as string + + bmf_adjustment_sheet_last_row = getBMFAdjustmentResultListEnd(1) + + For i = 1 to bmf_adjustment_sheet_last_row + bmf_adj_bmf_id = Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_BMF_REFERENCE_ID & CStr(i)).Value + bmf_adj_pcco = Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PCCO & CStr(i)).Value + debug.print adj_bmf_id + debug.print adj_pcco + if (bmf_adj_bmf_id = adj_bmf_id and bmf_adj_pcco = adj_pcco ) then + found = true + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_BMF_REFERENCE_ID & CStr(i)).Interior.Color = rgb(214, 48, 49) + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PCCO & CStr(i)).Interior.Color = rgb(214, 48, 49) + exit for + end if + next i + + checkIfAlreadyExistInBmfAdjustmentResult = found + +Done: + Exit Function + +eh: + Debug.Print "checkIfAlreadyExistInBmfAdjustmentResult:Error: " & Err.Description + +End Function + +Function getBMFAdjustmentResultListEnd(start_row as integer) + On Error GoTo eh + + Dim i as integer + + Dim last_row as boolean + Dim last_row_found as boolean + last_row_found = false + last_row = True + current_row = start_row + + For i = start_row To 9999 + current_row = i + last_row_found = checkBmfAdjustmentSheetLastRow(current_row) + + if (last_row_found = true) then + exit for + end if + Next i + + getBMFAdjustmentResultListEnd = current_row -1 + +Done: + Exit Function + +eh: + Debug.Print "getBMFAdjustmentResultListEnd:Error: " & Err.Description + +End Function + +Function getAdjustmentSheetListEnd(start_row as integer) + On Error GoTo eh + + Dim i as integer + + Dim last_row as boolean + Dim last_row_found as boolean + last_row_found = false + last_row = True + current_row = start_row + + For i = start_row To 9999 + current_row = i + last_row_found = checkAdjustmentSheetLastRow(current_row) + + if (last_row_found = true) then + exit for + end if + Next i + + getAdjustmentSheetListEnd = current_row -1 + +Done: + Exit Function + +eh: + Debug.Print "getAdjustmentSheetListEnd:Error: " & Err.Description + +End Function + + +Sub helloworld() + On Error GoTo eh + Dim need_to_copy as boolean + + Dim adjustment_sheet_last_row as integer + Dim adjustment_sheet_current_row as integer + + Dim bmf_adjustment_sheet_last_row as integer + Dim bmf_adjustment_sheet_current_row as integer + + init + 'MsgBox "helloworld" + adjustment_sheet_last_row= getAdjustmentSheetListEnd(first_row) + + For adjustment_sheet_current_row = 6 To adjustment_sheet_last_row + need_to_copy = false + + Dim bmf_id as string + Dim pcco as string + bmf_id = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_FINAL_BMF_ID & CStr(adjustment_sheet_current_row)).Value + pcco=Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_BALANCE_SHEET_PCCO_2 & CStr(adjustment_sheet_current_row)).Value + + if (CheckIfBalanceSheetAmountToAdjust2Exist(adjustment_sheet_current_row) and CheckIfBalanceSheetNa2Exist(adjustment_sheet_current_row) and CheckIfBalanceSheetPcco2Exist(adjustment_sheet_current_row)) then + if (CheckIfBalanceSheetAmountToAdjust2IsZero(adjustment_sheet_current_row)) then + debug.print Cstr(adjustment_sheet_current_row) & " no need to copy as zero" + + elseif (checkIfAlreadyExistInBmfAdjustmentResult(bmf_id, pcco)) then + debug.print "already exist in bmf table, skipping" + else + need_to_copy = True + end if + end if + + ' helloworld + if (need_to_copy = true) then + debug.print adjustment_sheet_current_row & " need to copy" + bmf_adjustment_sheet_last_row = getBMFAdjustmentResultListEnd(1) + bmf_adjustment_sheet_current_row = bmf_adjustment_sheet_last_row + 1 + + Dim temp_value as string + + + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_REPORTING_ENTITY & CStr(bmf_adjustment_sheet_current_row)).Value = "14004" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_OPAQUE_REPORTING_ENTITY & CStr(bmf_adjustment_sheet_current_row)).Value = "N" + + temp_value = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_BALANCE_SHEET_NA_2 & CStr(adjustment_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_LOCAL_OPERATIONAL_ACCOUNT & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value & " 15130" + + temp_value = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_BALANCE_SHEET_PCCO_2 & CStr(adjustment_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PCCO & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + + temp_value = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_BALANCE_SHEET_AMOUNT_TO_ADJ_2 & CStr(adjustment_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_ACCT_BALANCE & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_FUNT & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + + temp_value = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_FINAL_BMF_ID & CStr(adjustment_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_BMF_REFERENCE_ID & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + + ' update formatting + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_ACCT_BALANCE & CStr(bmf_adjustment_sheet_current_row)).NumberFormat = "#,##_);[Red](#,##)" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_FUNT & CStr(bmf_adjustment_sheet_current_row)).NumberFormat = "#,##_);[Red](#,##)" + + + else + debug.print adjustment_sheet_current_row & " no need to copy" + end if + + + Next adjustment_sheet_current_row + +Done: + Exit Sub + +eh: + Debug.Print "helloworld:Error: " & Err.Description + +End Sub diff --git a/task2/draft2/Copy and Paste.xlsm b/task2/draft2/Copy and Paste.xlsm new file mode 100644 index 0000000..d0abd97 Binary files /dev/null and b/task2/draft2/Copy and Paste.xlsm differ diff --git a/task2/draft2/Copy and Paste.xlsx b/task2/draft2/Copy and Paste.xlsx new file mode 100644 index 0000000..5a62f73 Binary files /dev/null and b/task2/draft2/Copy and Paste.xlsx differ diff --git a/task2/draft2/ThisWorkbook.cls b/task2/draft2/ThisWorkbook.cls new file mode 100644 index 0000000..a472641 --- /dev/null +++ b/task2/draft2/ThisWorkbook.cls @@ -0,0 +1,727 @@ +' change log: + +Option Explicit + +Dim first_row As Integer +Dim current_row As Integer +Dim last_check_row As Integer + +Dim ADJUSTMENT_WORKSHEET As String +Dim BMF_ADJUSTMENT_WORKSHEET As String + +' BALANCE_SHEET +Dim COL_BALANCE_SHEET_NA_1 As String +Dim COL_BALANCE_SHEET_PCCO_1 As String +Dim COL_BALANCE_SHEET_AMOUNT_TO_ADJ_1 As String + +Dim COL_BALANCE_SHEET_NA_2 As String +Dim COL_BALANCE_SHEET_PCCO_2 As String +Dim COL_BALANCE_SHEET_AMOUNT_TO_ADJ_2 As String + +' OFF_BALANCE_SHEET +Dim COL_OFF_BALANCE_SHEET_NA_1 As String +Dim COL_OFF_BALANCE_SHEET_PCCO_1 As String +Dim COL_OFF_BALANCE_SHEET_AMOUNT_TO_ADJ_1 As String + +Dim COL_OFF_BALANCE_SHEET_NA_2 As String +Dim COL_OFF_BALANCE_SHEET_PCCO_2 As String +Dim COL_OFF_BALANCE_SHEET_AMOUNT_TO_ADJ_2 As String + +Dim COL_FINAL_BMF_ID As String + +Dim COL_BMF_ADJUSTMENT_SHEET_BMF_REFERENCE_ID As String +Dim COL_BMF_ADJUSTMENT_SHEET_LINE_TYPE As String +Dim COL_BMF_ADJUSTMENT_SHEET_ADJUSTMENT_ID As String +Dim COL_BMF_ADJUSTMENT_SHEET_ADJUSTMENT_TYPE As String +Dim COL_BMF_ADJUSTMENT_SHEET_COMMENT As String +Dim COL_BMF_ADJUSTMENT_SHEET_REPORTING_ENTITY As String +Dim COL_BMF_ADJUSTMENT_SHEET_PCCO As String +Dim COL_BMF_ADJUSTMENT_SHEET_PCEC As String +Dim COL_BMF_ADJUSTMENT_SHEET_ACCOUNTING_BALANCE_CURRENCY As String +Dim COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_ACCT_BALANCE As String +Dim COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_FUNT As String +Dim COL_BMF_ADJUSTMENT_SHEET_FAIR_VALUE As String +Dim COL_BMF_ADJUSTMENT_SHEET_ECONOMIC_AGENT As String +Dim COL_BMF_ADJUSTMENT_SHEET_OPAQUE_REPORTING_ENTITY As String +Dim COL_BMF_ADJUSTMENT_SHEET_REMAINING_MATURITY As String +Dim COL_BMF_ADJUSTMENT_SHEET_IFRS13 As String +Dim COL_BMF_ADJUSTMENT_SHEET_COUNTRY As String +Dim COL_BMF_ADJUSTMENT_SHEET_LOCAL_OPERATIONAL_ACCOUNT As String + +Dim RED_THOUSAND_SEP_NUMBER_FORMAT as string + +Sub init() + On Error GoTo eh + + RED_THOUSAND_SEP_NUMBER_FORMAT = "#,##0_);[Red](#,##0)" + + ' HEADER_ROW = 6 + first_row = 6 + current_row = first_row + last_check_row = 9999 + + ' ADJUSTMENT_SHEET + ADJUSTMENT_WORKSHEET = "Adjustment" + + ' BALANCE_SHEET + COL_BALANCE_SHEET_NA_1 = "Q" + COL_BALANCE_SHEET_PCCO_1 = "R" + COL_BALANCE_SHEET_AMOUNT_TO_ADJ_1 = "S" + + COL_BALANCE_SHEET_NA_2 = "T" + COL_BALANCE_SHEET_PCCO_2 = "U" + COL_BALANCE_SHEET_AMOUNT_TO_ADJ_2 = "V" + + ' OFF_BALANCE_SHEET + COL_OFF_BALANCE_SHEET_NA_1 = "X" + COL_OFF_BALANCE_SHEET_PCCO_1 = "Y" + COL_OFF_BALANCE_SHEET_AMOUNT_TO_ADJ_1 = "Z" + + COL_OFF_BALANCE_SHEET_NA_2 = "AA" + COL_OFF_BALANCE_SHEET_PCCO_2 = "AB" + COL_OFF_BALANCE_SHEET_AMOUNT_TO_ADJ_2 = "AC" + + COL_FINAL_BMF_ID = "AI" + + ' BMF_ADJUSTMENT_SHEET + BMF_ADJUSTMENT_WORKSHEET = "BMF Adjustment" + COL_BMF_ADJUSTMENT_SHEET_BMF_REFERENCE_ID = "A" + COL_BMF_ADJUSTMENT_SHEET_LINE_TYPE = "B" + COL_BMF_ADJUSTMENT_SHEET_ADJUSTMENT_ID = "C" + COL_BMF_ADJUSTMENT_SHEET_ADJUSTMENT_TYPE = "D" + COL_BMF_ADJUSTMENT_SHEET_COMMENT = "E" + COL_BMF_ADJUSTMENT_SHEET_REPORTING_ENTITY = "F" + COL_BMF_ADJUSTMENT_SHEET_PCCO = "G" + COL_BMF_ADJUSTMENT_SHEET_PCEC = "H" + COL_BMF_ADJUSTMENT_SHEET_ACCOUNTING_BALANCE_CURRENCY = "I" + COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_ACCT_BALANCE = "J" + COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_FUNT = "K" + COL_BMF_ADJUSTMENT_SHEET_FAIR_VALUE = "BH" + COL_BMF_ADJUSTMENT_SHEET_ECONOMIC_AGENT = "BI" + COL_BMF_ADJUSTMENT_SHEET_OPAQUE_REPORTING_ENTITY = "BJ" + COL_BMF_ADJUSTMENT_SHEET_REMAINING_MATURITY = "BK" + COL_BMF_ADJUSTMENT_SHEET_IFRS13 = "BL" + COL_BMF_ADJUSTMENT_SHEET_COUNTRY = "BM" + COL_BMF_ADJUSTMENT_SHEET_LOCAL_OPERATIONAL_ACCOUNT = "BN" + +Done: + Debug.Print "init done" + Exit Sub + +eh: + Debug.Print "init:Error: " & Err.Description + + +End Sub + +function paintYellow(cell as variant) + cell.Interior.Color = rgb(246, 229, 141) + paintYellow = True +end function + +function paintRed(cell as variant) + cell.Interior.Color = rgb(255, 121, 121) + paintRed = True +end function + +Function CheckIfOffBalanceSheetAmountToAdjust1NoNeedCopy(current_row As Integer, bmf_id As String, pcco As String) + On Error GoTo eh + Dim output As Boolean + output = False + Dim temp As String + temp = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_OFF_BALANCE_SHEET_AMOUNT_TO_ADJ_1 & CStr(current_row)).Value + + If ( temp = "") Then + output = True + ElseIf (temp = "0") Then + paintYellow(Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_OFF_BALANCE_SHEET_AMOUNT_TO_ADJ_1 & CStr(current_row))) + output = True + ElseIf (checkIfAlreadyExistInBmfAdjustmentResult(bmf_id, pcco, current_row)) Then + paintRed(Worksheets(ADJUSTMENT_WORKSHEET).Range("AI" & CStr(current_row))) + paintRed(Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_OFF_BALANCE_SHEET_PCCO_1 & CStr(current_row))) + + output = True + End If + + + CheckIfOffBalanceSheetAmountToAdjust1NoNeedCopy = output + +Done: + Exit Function + +eh: + Debug.Print "CheckIfOffBalanceSheetAmountToAdjust1NoNeedCopy:Error: " & Err.Description + +End Function + +Function CheckIfAdjustmentSheetBmfIdValid(current_row As Integer) + On Error GoTo eh + Dim output As Boolean + output = False + Dim temp As String + temp = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_FINAL_BMF_ID & CStr(current_row)).Value + + If (temp <> "") Then + output = True + End If + + CheckIfAdjustmentSheetBmfIdValid = output + +Done: + Exit Function + +eh: + Debug.Print "CheckIfAdjustmentSheetBmfIdValid:Error: " & Err.Description + +End Function + + + +Function CheckIfOffBalanceSheetAmountToAdjust2NoNeedCopy(current_row As Integer, bmf_id As String, pcco As String) + On Error GoTo eh + Dim output As Boolean + output = False + Dim temp As String + temp = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_OFF_BALANCE_SHEET_AMOUNT_TO_ADJ_2 & CStr(current_row)).Value + + If ( temp = "") Then + output = True + ElseIf (temp = "0") Then + paintYellow(Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_OFF_BALANCE_SHEET_AMOUNT_TO_ADJ_2 & CStr(current_row))) + output = True + ElseIf (checkIfAlreadyExistInBmfAdjustmentResult(bmf_id, pcco, current_row)) Then + paintRed(Worksheets(ADJUSTMENT_WORKSHEET).Range("AI" & CStr(current_row))) + paintRed(Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_OFF_BALANCE_SHEET_PCCO_2 & CStr(current_row))) + output = True + End If + + + CheckIfOffBalanceSheetAmountToAdjust2NoNeedCopy = output + +Done: + Exit Function + +eh: + Debug.Print "CheckIfOffBalanceSheetAmountToAdjust2NoNeedCopy:Error: " & Err.Description + +End Function + + +Function CheckIfBalanceSheetAmountToAdjust1NoNeedCopy(current_row As Integer, bmf_id As String, pcco As String) + On Error GoTo eh + Dim output As Boolean + output = False + + Dim temp As String + + temp = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_BALANCE_SHEET_AMOUNT_TO_ADJ_1 & CStr(current_row)).Value + Debug.Print "CheckIfBalanceSheetAmountToAdjust1NoNeedCopy:" & temp = "0" + + If ( temp = "") Then + output = True + ElseIf (temp = "0") Then + paintYellow(Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_BALANCE_SHEET_AMOUNT_TO_ADJ_1 & CStr(current_row))) + output = True + ElseIf (checkIfAlreadyExistInBmfAdjustmentResult(bmf_id, pcco, current_row)) Then + paintRed(Worksheets(ADJUSTMENT_WORKSHEET).Range("AI" & CStr(current_row))) + paintRed(Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_BALANCE_SHEET_PCCO_1 & CStr(current_row))) + output = True + End If + + CheckIfBalanceSheetAmountToAdjust1NoNeedCopy = output + +Done: + Exit Function + +eh: + Debug.Print "CheckIfBalanceSheetAmountToAdjust1NoNeedCopy:Error: " & Err.Description + +End Function + +Function CheckIfBalanceSheetAmountToAdjust2NoNeedCopy(current_row As Integer, bmf_id As String, pcco As String) + On Error GoTo eh + Dim output As Boolean + output = False + Dim temp As String + temp = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_BALANCE_SHEET_AMOUNT_TO_ADJ_2 & CStr(current_row)).Value + + If ( temp = "") Then + output = True + ElseIf (temp = "0") Then + paintYellow(Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_BALANCE_SHEET_AMOUNT_TO_ADJ_2 & CStr(current_row))) + output = True + ElseIf (checkIfAlreadyExistInBmfAdjustmentResult(bmf_id, pcco, current_row)) Then + paintRed(Worksheets(ADJUSTMENT_WORKSHEET).Range("AI" & CStr(current_row))) + paintRed(Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_BALANCE_SHEET_PCCO_2 & CStr(current_row))) + output = True + End If + + + CheckIfBalanceSheetAmountToAdjust2NoNeedCopy = output + +Done: + Exit Function + +eh: + Debug.Print "CheckIfBalanceSheetAmountToAdjust2NoNeedCopy:Error: " & Err.Description + +End Function + + + +Function CheckIfBalanceSheetNa2Exist(current_row As Integer) + On Error GoTo eh + Dim output As Boolean + output = False + Dim temp As String + temp = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_BALANCE_SHEET_NA_2 & CStr(current_row)).Value + + If (temp <> "") Then + output = True + End If + + CheckIfBalanceSheetNa2Exist = output + +Done: + Exit Function + +eh: + Debug.Print "CheckIfBalanceSheetNa2Exist:Error: " & Err.Description + +End Function + +Function CheckIfBalanceSheetPcco2Exist(current_row As Integer) + On Error GoTo eh + + Dim output As Boolean + output = False + Dim temp As String + temp = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_BALANCE_SHEET_PCCO_2 & CStr(current_row)).Value + + If (temp <> "") Then + output = True + End If + + CheckIfBalanceSheetPcco2Exist = output + +Done: + Exit Function + +eh: + Debug.Print "CheckIfBalanceSheetPcco2Exist:Error: " & Err.Description + +End Function + +Function CheckIfBalanceSheetAmountToAdjust2Exist(current_row As Integer) + On Error GoTo eh + + Dim output As Boolean + output = False + Dim temp As String + temp = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_BALANCE_SHEET_AMOUNT_TO_ADJ_2 & CStr(current_row)).Value + + If (temp <> "") Then + output = True + End If + + CheckIfBalanceSheetAmountToAdjust2Exist = output + +Done: + Exit Function + +eh: + Debug.Print "CheckIfBalanceSheetAmountToAdjust2Exist:Error: " & Err.Description + +End Function + +Function isCurrentRowNeedToProcess(input_row As Integer) + On Error GoTo eh + + Dim output As Boolean + Dim cell_value As Currency + Dim input_cell As String + input_cell = GRANDTOTAL_COL & input_row + +Done: + isCurrentRowNeedToProcess = Not (IsEmpty(Worksheets(ADJUSTMENT_WORKSHEET).Range(input_cell).Value)) + Exit Function + +eh: + Debug.Print "isCurrentRowNeedToProcess:Error: " & Err.Description + +End Function + +Function getLastCheckRow(first_row As Integer) + On Error GoTo eh + getLastCheckRow = first_row + 10 + +Done: + Exit Function + +eh: + Debug.Print "getLastCheckRow:Error: " & Err.Description + +End Function + +Function checkAdjustmentSheetLastRow(current_row As Integer) + On Error GoTo eh + Dim output As Boolean + output = True + + Dim j As Integer + Dim temp As String + + For j = current_row To getLastCheckRow(current_row) + temp = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_FINAL_BMF_ID & CStr(current_row)).Value + If (temp <> "") Then + output = False + End If + Next j + + checkAdjustmentSheetLastRow = output + +Done: + Exit Function + +eh: + Debug.Print "checkAdjustmentSheetLastRow:Error: " & Err.Description + +End Function + +Function checkBmfAdjustmentSheetLastRow(current_row As Integer) + On Error GoTo eh + Dim output As Boolean + output = True + + Dim j As Integer + Dim temp As String + + For j = current_row To getLastCheckRow(current_row) + temp = Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_BMF_REFERENCE_ID & CStr(current_row)).Value + If (temp <> "") Then + output = False + End If + Next j + + checkBmfAdjustmentSheetLastRow = output + +Done: + Exit Function + +eh: + Debug.Print "checkBmfAdjustmentSheetLastRow:Error: " & Err.Description + +End Function + +Function checkIfAlreadyExistInBmfAdjustmentResult(adj_bmf_id As String, adj_pcco As String, adj_sheet_row As Integer) + On Error GoTo eh + + Dim i As Integer + Dim bmf_adjustment_sheet_last_row As Integer + Dim found As Boolean + found = False + Dim temp_value As String + Dim bmf_adj_bmf_id As String + Dim bmf_adj_pcco As String + + Application.ScreenUpdating = False + + + bmf_adjustment_sheet_last_row = getBMFAdjustmentResultListEnd(1) + + For i = 1 To bmf_adjustment_sheet_last_row + bmf_adj_bmf_id = Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_BMF_REFERENCE_ID & CStr(i)).Value + bmf_adj_pcco = Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PCCO & CStr(i)).Value + + ' debug.print bmf_adj_bmf_id + ' debug.print bmf_adj_pcco + ' debug.print adj_bmf_id + ' debug.print adj_pcco + ' debug.print bmf_adj_bmf_id = adj_bmf_id And bmf_adj_pcco = adj_pcco + + + If (bmf_adj_bmf_id = adj_bmf_id And bmf_adj_pcco = adj_pcco) Then + + ' Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range("B"&cstr(i)).value = Cstr(bmf_adj_bmf_id = adj_bmf_id) + ' Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range("B"&cstr(i)).value = Cstr(bmf_adj_pcco = adj_pcco) + + 'Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_BMF_REFERENCE_ID & CStr(i)).Interior.Color = RGB(214, 48, 49) + paintRed(Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_BMF_REFERENCE_ID & CStr(i))) + ' Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PCCO & CStr(i)).Interior.Color = RGB(214, 48, 49) + paintred(Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PCCO & CStr(i))) + + ' adj_sheet_row + + + found = True + + Exit For + End If + Next i + + checkIfAlreadyExistInBmfAdjustmentResult = found + + Application.ScreenUpdating = True + +Done: + Exit Function + +eh: + Application.ScreenUpdating = True + + Debug.Print "checkIfAlreadyExistInBmfAdjustmentResult:Error: " & Err.Description + +End Function + +Function getBMFAdjustmentResultListEnd(start_row As Integer) + On Error GoTo eh + + Dim i As Integer + + Dim last_row As Boolean + Dim last_row_found As Boolean + last_row_found = False + last_row = True + current_row = start_row + + For i = start_row To 9999 + current_row = i + last_row_found = checkBmfAdjustmentSheetLastRow(current_row) + + If (last_row_found = True) Then + Exit For + End If + Next i + + getBMFAdjustmentResultListEnd = current_row - 1 + +Done: + Exit Function + +eh: + Debug.Print "getBMFAdjustmentResultListEnd:Error: " & Err.Description + +End Function + +Function getAdjustmentSheetListEnd(start_row As Integer) + On Error GoTo eh + + Dim i As Integer + + Dim last_row As Boolean + Dim last_row_found As Boolean + last_row_found = False + last_row = True + current_row = start_row + + For i = start_row To 9999 + current_row = i + last_row_found = checkAdjustmentSheetLastRow(current_row) + + If (last_row_found = True) Then + Exit For + End If + Next i + + getAdjustmentSheetListEnd = current_row - 1 + +Done: + Exit Function + +eh: + Debug.Print "getAdjustmentSheetListEnd:Error: " & Err.Description + +End Function + + +Sub resetBmfAdjustmentSheet() + init + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range("A4:BN9999").Clear + +end sub + +Sub helloworld() + On Error GoTo eh + Dim need_to_copy As Boolean + + Dim adjustment_sheet_first_row As Integer + Dim adjustment_sheet_last_row As Integer + Dim adjustment_sheet_current_row As Integer + + Dim bmf_adjustment_sheet_last_row As Integer + Dim bmf_adjustment_sheet_current_row As Integer + + Dim temp_value As String + + adjustment_sheet_first_row = 7 + + init + ' MsgBox "helloworld" + adjustment_sheet_last_row = getAdjustmentSheetListEnd(adjustment_sheet_first_row) + Debug.Print adjustment_sheet_last_row + + For adjustment_sheet_current_row = adjustment_sheet_first_row To adjustment_sheet_last_row + Debug.Print "processing adjustment_sheet_current_row: " & adjustment_sheet_current_row + + ' if (CheckIfBalanceSheetAmountToAdjust2Exist(adjustment_sheet_current_row) and CheckIfBalanceSheetNa2Exist(adjustment_sheet_current_row) and CheckIfBalanceSheetPcco2Exist(adjustment_sheet_current_row)) then + If (CheckIfAdjustmentSheetBmfIdValid(adjustment_sheet_current_row)) Then + Debug.Print "processing row: " & adjustment_sheet_current_row + + Dim bmf_id As String + bmf_id = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_FINAL_BMF_ID & CStr(adjustment_sheet_current_row)).Value + + Dim bal_pcco_1 As String + bal_pcco_1 = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_BALANCE_SHEET_PCCO_1 & CStr(adjustment_sheet_current_row)).Value + + Dim bal_pcco_2 As String + bal_pcco_2 = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_BALANCE_SHEET_PCCO_2 & CStr(adjustment_sheet_current_row)).Value + + Dim off_bal_pcco_1 As String + off_bal_pcco_1 = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_OFF_BALANCE_SHEET_PCCO_1 & CStr(adjustment_sheet_current_row)).Value + + Dim off_bal_pcco_2 As String + off_bal_pcco_2 = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_OFF_BALANCE_SHEET_PCCO_2 & CStr(adjustment_sheet_current_row)).Value + + ' balance sheet 1 + ' check need to copy ? see amount to adjust <> 0 ? + If (CheckIfBalanceSheetAmountToAdjust1NoNeedCopy(adjustment_sheet_current_row, bmf_id, bal_pcco_1) = True) Then + ' do skip + Debug.Print "skip balance sheet 1" + Else + ' do copy + bmf_adjustment_sheet_last_row = getBMFAdjustmentResultListEnd(1) + bmf_adjustment_sheet_current_row = bmf_adjustment_sheet_last_row + 1 + Debug.Print "bmf_adjustment_sheet_current_row:" & bmf_adjustment_sheet_current_row + + temp_value = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_FINAL_BMF_ID & CStr(adjustment_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_BMF_REFERENCE_ID & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_REPORTING_ENTITY & CStr(bmf_adjustment_sheet_current_row)).Value = "14004" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_OPAQUE_REPORTING_ENTITY & CStr(bmf_adjustment_sheet_current_row)).Value = "N" + + temp_value = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_BALANCE_SHEET_PCCO_1 & CStr(adjustment_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PCCO & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + + temp_value = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_BALANCE_SHEET_AMOUNT_TO_ADJ_1 & CStr(adjustment_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_ACCT_BALANCE & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_FUNT & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + + temp_value = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_BALANCE_SHEET_NA_1 & CStr(adjustment_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_LOCAL_OPERATIONAL_ACCOUNT & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value & " " & "15130" + + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range("A" & bmf_adjustment_sheet_current_row & ":" & "BN" & bmf_adjustment_sheet_current_row).NumberFormat = "@" + ' Selection.NumberFormat = RED_THOUSAND_SEP_NUMBER_FORMAT + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_ACCT_BALANCE & bmf_adjustment_sheet_current_row).NumberFormat = RED_THOUSAND_SEP_NUMBER_FORMAT + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_FUNT & bmf_adjustment_sheet_current_row).NumberFormat = RED_THOUSAND_SEP_NUMBER_FORMAT + + + + End If + + ' balance sheet 2 + ' check need to copy ? see amount to adjust <> 0 ? + debug.print bal_pcco_2 + If (CheckIfBalanceSheetAmountToAdjust2NoNeedCopy(adjustment_sheet_current_row, bmf_id, bal_pcco_2)) Then + ' do skip + Debug.Print "skip balance sheet 2" + Else + ' do copy + bmf_adjustment_sheet_last_row = getBMFAdjustmentResultListEnd(1) + bmf_adjustment_sheet_current_row = bmf_adjustment_sheet_last_row + 1 + temp_value = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_FINAL_BMF_ID & CStr(adjustment_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_BMF_REFERENCE_ID & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_REPORTING_ENTITY & CStr(bmf_adjustment_sheet_current_row)).Value = "14004" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_OPAQUE_REPORTING_ENTITY & CStr(bmf_adjustment_sheet_current_row)).Value = "N" + + + temp_value = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_BALANCE_SHEET_PCCO_2 & CStr(adjustment_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PCCO & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + + temp_value = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_BALANCE_SHEET_AMOUNT_TO_ADJ_2 & CStr(adjustment_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_ACCT_BALANCE & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_FUNT & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + + temp_value = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_BALANCE_SHEET_NA_2 & CStr(adjustment_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_LOCAL_OPERATIONAL_ACCOUNT & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value & " " & "15130" + + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range("A" & bmf_adjustment_sheet_current_row & ":" & "BN" & bmf_adjustment_sheet_current_row).NumberFormat = "@" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_ACCT_BALANCE & bmf_adjustment_sheet_current_row).NumberFormat = RED_THOUSAND_SEP_NUMBER_FORMAT + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_FUNT & bmf_adjustment_sheet_current_row).NumberFormat = RED_THOUSAND_SEP_NUMBER_FORMAT + + End If + + ' off-balance sheet 1 + ' check need to copy ? see amount to adjust <> 0 ? + If (CheckIfOffBalanceSheetAmountToAdjust1NoNeedCopy(adjustment_sheet_current_row, bmf_id, off_bal_pcco_1)) Then + ' do skip + Debug.Print "skip off-balance sheet 1" + Else + ' do copy + bmf_adjustment_sheet_last_row = getBMFAdjustmentResultListEnd(1) + bmf_adjustment_sheet_current_row = bmf_adjustment_sheet_last_row + 1 + temp_value = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_FINAL_BMF_ID & CStr(adjustment_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_BMF_REFERENCE_ID & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_REPORTING_ENTITY & CStr(bmf_adjustment_sheet_current_row)).Value = "14004" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_OPAQUE_REPORTING_ENTITY & CStr(bmf_adjustment_sheet_current_row)).Value = "N" + + + temp_value = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_OFF_BALANCE_SHEET_PCCO_1 & CStr(adjustment_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PCCO & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + + temp_value = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_OFF_BALANCE_SHEET_AMOUNT_TO_ADJ_1 & CStr(adjustment_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_ACCT_BALANCE & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_FUNT & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + + temp_value = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_OFF_BALANCE_SHEET_NA_1 & CStr(adjustment_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_LOCAL_OPERATIONAL_ACCOUNT & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value & " " & "15130" + + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range("A" & bmf_adjustment_sheet_current_row & ":" & "BN" & bmf_adjustment_sheet_current_row).NumberFormat = "@" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_ACCT_BALANCE & bmf_adjustment_sheet_current_row).NumberFormat = RED_THOUSAND_SEP_NUMBER_FORMAT + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_FUNT & bmf_adjustment_sheet_current_row).NumberFormat = RED_THOUSAND_SEP_NUMBER_FORMAT + + End If + + ' off-balance sheet 2 + ' check need to copy ? see amount to adjust <> 0 ? + If (CheckIfOffBalanceSheetAmountToAdjust2NoNeedCopy(adjustment_sheet_current_row, bmf_id, off_bal_pcco_2)) Then + ' do skip + Debug.Print "skip off-balance sheet 2" + Else + ' do copy + bmf_adjustment_sheet_last_row = getBMFAdjustmentResultListEnd(1) + bmf_adjustment_sheet_current_row = bmf_adjustment_sheet_last_row + 1 + temp_value = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_FINAL_BMF_ID & CStr(adjustment_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_BMF_REFERENCE_ID & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_REPORTING_ENTITY & CStr(bmf_adjustment_sheet_current_row)).Value = "14004" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_OPAQUE_REPORTING_ENTITY & CStr(bmf_adjustment_sheet_current_row)).Value = "N" + + temp_value = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_OFF_BALANCE_SHEET_PCCO_2 & CStr(adjustment_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PCCO & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + + temp_value = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_OFF_BALANCE_SHEET_AMOUNT_TO_ADJ_2 & CStr(adjustment_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_ACCT_BALANCE & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_FUNT & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + + temp_value = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_OFF_BALANCE_SHEET_NA_2 & CStr(adjustment_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_LOCAL_OPERATIONAL_ACCOUNT & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value & " " & "15130" + + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range("A" & bmf_adjustment_sheet_current_row & ":" & "BN" & bmf_adjustment_sheet_current_row).NumberFormat = "@" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_ACCT_BALANCE & bmf_adjustment_sheet_current_row).NumberFormat = RED_THOUSAND_SEP_NUMBER_FORMAT + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_FUNT & bmf_adjustment_sheet_current_row).NumberFormat = RED_THOUSAND_SEP_NUMBER_FORMAT + + End If + + Else + Debug.Print adjustment_sheet_current_row & " skipping copy as bmfid is empty" + End If + + + Next adjustment_sheet_current_row + +Done: + Exit Sub + +eh: + Debug.Print "helloworld:Error: " & Err.Description + +End Sub + diff --git a/task2/notes.md b/task2/notes.md new file mode 100644 index 0000000..078eeb7 --- /dev/null +++ b/task2/notes.md @@ -0,0 +1,24 @@ +ttps://share-staging.louislabs.com/g/u-5_gKrQtGa + +Q: 我見你個 screen capture 係 mac , 我想問下你會係 mac 定 window 度行? +A: Window行的🙆🏻‍♀️🙆🏻‍♀️ 同上次一樣 + +# 我今次想做嘅野係將 adjustment 嘅資料 copy and paste 去到 BMF Adjustment 到 + +![](./d7a3b2ca-8184-4874-8f1b-21e77189936a_progressive.jpg) + +係 adjustment tab,你見到我圈咗4樣野分別寫咗1, 2, 3, 4 + +1. 每一行 copy 嘅 data 要連埋 AI column 嘅 BMF ID +1. 第 2 個圈住嘅 data 唔係次次都會有,所以想有 value 先 copy and paste 上去 + - check if BalanceSheet_NA2 exist + - check if BalanceSheet_PCCO2 exist + - check if BalanceSheet_Amount_TO_ADJUST2 exist +1. 如果 amount to adj 係 0, 就唔洗 copy and paste +1. 係 BMF Adjustment tab 到, + - 如果copy and paste咗過去,"reporting entity" columns 填 14004 + - 如果copy and paste咗過去,"Opaque reporting entity" columns 填 N +1. 係BMF Adjustment tab到, + - 個 "local operational Account" 就係 Adjustment tab 入面嘅 "NA" 加返 "15130" + +我share 咗個sample file俾你 你幫我睇睇大概要幾錢🙇🏻‍♀️ diff --git a/task2/package.json b/task2/package.json new file mode 100644 index 0000000..4dcc419 --- /dev/null +++ b/task2/package.json @@ -0,0 +1,13 @@ +{ + "name": "task2", + "version": "1.0.0", + "description": "excel adjustment", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "gitUpdate":"git add . && git commit -m\"update natalie0312,\"" + }, + "keywords": [], + "author": "", + "license": "ISC" +} diff --git a/task3/Copy and Paste 2.xlsm b/task3/Copy and Paste 2.xlsm new file mode 100644 index 0000000..55da9da Binary files /dev/null and b/task3/Copy and Paste 2.xlsm differ diff --git a/task3/Module1.bas b/task3/Module1.bas new file mode 100644 index 0000000..67224a9 --- /dev/null +++ b/task3/Module1.bas @@ -0,0 +1,15 @@ +Attribute VB_Name = "Module1" +Sub Macro1() +Attribute Macro1.VB_ProcData.VB_Invoke_Func = " \n14" +' +' Macro1 Macro +' + +' + Sheets("BMF Adjustment").Select + Rows("4:4").Select + ActiveWindow.SmallScroll Down:=104 + Rows("4:124").Select + Selection.Delete Shift:=xlUp + Sheets("Raw Data").Select +End Sub diff --git a/task3/ThisWorkbook.cls b/task3/ThisWorkbook.cls new file mode 100644 index 0000000..f87adb1 --- /dev/null +++ b/task3/ThisWorkbook.cls @@ -0,0 +1,1107 @@ +' change log: + +Option Explicit + +Dim first_row As Integer +Dim current_row As Integer +Dim last_check_row As Integer + +Dim ADJUSTMENT_WORKSHEET As String +Dim RAW_DATA_WORKSHEET as String +Dim BMF_ADJUSTMENT_WORKSHEET As String +dim BMF_1690_2690_WORKSHEET as String + +' bmf_1690_2690 sheet +Dim COL_BMF_1690_2690_BMF_ID as String +Dim COL_BMF_1690_2690_CLOSING_DATE as String +Dim COL_BMF_1690_2690_IFRS as String +Dim COL_BMF_1690_2690_BMF_REFERENCE_ID as String +Dim COL_BMF_1690_2690_PCCO as String +Dim COL_BMF_1690_2690_PCEC as String +Dim COL_BMF_1690_2690_LOCAL_DESK as String +Dim COL_BMF_1690_2690_NA as String +Dim COL_BMF_1690_2690_FISE as String +Dim COL_BMF_1690_2690_LOCAL_OPERATIONAL as String +Dim COL_BMF_1690_2690_LINE_TYPE as String +Dim COL_BMF_1690_2690_CONTRACT_REFERENCE_ID as String +Dim COL_BMF_1690_2690_AMOUNT_IN_ACCT as String +Dim COL_BMF_1690_2690_AMOUNT_IN_FUNCT as String + + +' Raw Data BALANCE_SHEET +Dim COL_BALANCE_SHEET_NA_1 As String +Dim COL_BALANCE_SHEET_PCCO_1 As String +Dim COL_BALANCE_SHEET_PCEC_1 As String +Dim COL_BALANCE_SHEET_AMOUNT_TO_ADJ_1 As String + +Dim COL_BALANCE_SHEET_NA_2 As String +Dim COL_BALANCE_SHEET_PCCO_2 As String +Dim COL_BALANCE_SHEET_PCEC_2 As String +Dim COL_BALANCE_SHEET_AMOUNT_TO_ADJ_2 As String + +' Raw Data OFF_BALANCE_SHEET +Dim COL_OFF_BALANCE_SHEET_NA_1 As String +Dim COL_OFF_BALANCE_SHEET_PCCO_1 As String +Dim COL_OFF_BALANCE_SHEET_PCEC_1 As String +Dim COL_OFF_BALANCE_SHEET_AMOUNT_TO_ADJ_1 As String + +Dim COL_OFF_BALANCE_SHEET_NA_2 As String +Dim COL_OFF_BALANCE_SHEET_PCCO_2 As String +Dim COL_OFF_BALANCE_SHEET_PCEC_2 As String +Dim COL_OFF_BALANCE_SHEET_AMOUNT_TO_ADJ_2 As String + +Dim COL_FINAL_BMF_ID As String + +'BMF 1690 2690 +Dim COL_BMF16902690_SHEET_BMF_REFERENCE_ID As String 'Column C +Dim COL_BMF16902690_SHEET_PCCO_CODE As String 'Column E +Dim COL_BMF16902690_SHEET_PCEC_CODE As String 'Column F +Dim COL_BMF16902690_SHEET_NA As String 'Column H +Dim COL_BMF16902690_SHEET_AMOUNT_TO_ADJ As String 'Column M + +'BMF Adjustment +Dim COL_BMF_ADJUSTMENT_SHEET_BMF_REFERENCE_ID As String 'Column A +Dim COL_BMF_ADJUSTMENT_SHEET_LINE_TYPE As String 'Column B +Dim COL_BMF_ADJUSTMENT_SHEET_ADJUSTMENT_TYPE As String 'Column D +Dim COL_BMF_ADJUSTMENT_SHEET_COMMENT As String 'Column E +Dim COL_BMF_ADJUSTMENT_SHEET_REPORTING_ENTITY As String 'Column F +Dim COL_BMF_ADJUSTMENT_SHEET_PCCO As String 'Column G +Dim COL_BMF_ADJUSTMENT_SHEET_PCEC As String 'Column H +Dim COL_BMF_ADJUSTMENT_SHEET_ACCOUNTING_BALANCE_CURRENCY As String 'Column I +Dim COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_ACCT_BALANCE As String 'Column J +Dim COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_FUNT As String 'Column K +Dim COL_BMF_ADJUSTMENT_SHEET_INTERNAL_EXTERNAL_CODE As String 'Column M +Dim COL_BMF_ADJUSTMENT_SHEET_IFRS_NORM_FLAG As String 'Column N +Dim COL_BMF_ADJUSTMENT_SHEET_FRENCH_GAAP_NORM_FLAG As String 'Column O +Dim COL_BMF_ADJUSTMENT_SHEET_PROCESS_IMPACTED_LIQ As String 'Column P +Dim COL_BMF_ADJUSTMENT_SHEET_PROCESS_IMPACTED_STT As String 'Column Q +Dim COL_BMF_ADJUSTMENT_SHEET_PROCESS_IMPACTED_YLD As String 'Column R +Dim COL_BMF_ADJUSTMENT_SHEET_AMOUNT_TYPE_CODE As String 'Column S +Dim COL_BMF_ADJUSTMENT_SHEET_OPAQUE_REPORTING_ENTITY As String 'Column BJ +Dim COL_BMF_ADJUSTMENT_SHEET_LOCAL_OPERATIONAL_ACCOUNT As String 'Column BN + +Dim RED_THOUSAND_SEP_NUMBER_FORMAT As String + +Function highlightBmfAdjustmentBmfId(current_row As Integer) + On Error GoTo eh + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_BMF_REFERENCE_ID & CStr(current_row)).Interior.Color = rgb(253, 203, 110) + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_BMF_REFERENCE_ID & CStr(current_row)).Font.Color = vbBlack + +Done: + Exit Function + +eh: + Debug.Print "highlightBmfAdjustmentBmfId:Error: " & Err.Description + +End Function + + +Sub initBmf16902690() + COL_BMF_1690_2690_BMF_ID = "C" + COL_BMF_1690_2690_CLOSING_DATE ="A" + COL_BMF_1690_2690_IFRS ="B" + COL_BMF_1690_2690_BMF_REFERENCE_ID ="D" + COL_BMF_1690_2690_PCCO ="E" + COL_BMF_1690_2690_PCEC ="F" + COL_BMF_1690_2690_LOCAL_DESK ="G" + COL_BMF_1690_2690_NA ="H" + COL_BMF_1690_2690_FISE ="I" + COL_BMF_1690_2690_LOCAL_OPERATIONAL ="J" + COL_BMF_1690_2690_LINE_TYPE ="K" + COL_BMF_1690_2690_CONTRACT_REFERENCE_ID ="L" + COL_BMF_1690_2690_AMOUNT_IN_ACCT ="M" + COL_BMF_1690_2690_AMOUNT_IN_FUNCT ="N" + +end sub + +Sub init() + On Error GoTo eh + + RED_THOUSAND_SEP_NUMBER_FORMAT = "#,##0_);[Red](#,##0)" + + ' HEADER_ROW = 6 + first_row = 6 + current_row = first_row + last_check_row = 9999 + + ' ADJUSTMENT_SHEET + ADJUSTMENT_WORKSHEET = "Raw Data" + RAW_DATA_WORKSHEET = "Raw Data" + BMF_1690_2690_WORKSHEET = "BMF 1690 2690" + + ' BALANCE_SHEET + COL_BALANCE_SHEET_NA_1 = "Q" + COL_BALANCE_SHEET_PCCO_1 = "R" + COL_BALANCE_SHEET_PCEC_1 = "S" + COL_BALANCE_SHEET_AMOUNT_TO_ADJ_1 = "T" + + COL_BALANCE_SHEET_NA_2 = "U" + COL_BALANCE_SHEET_PCCO_2 = "V" + COL_BALANCE_SHEET_PCEC_2 = "W" + COL_BALANCE_SHEET_AMOUNT_TO_ADJ_2 = "X" + + ' OFF_BALANCE_SHEET + COL_OFF_BALANCE_SHEET_NA_1 = "Z" + COL_OFF_BALANCE_SHEET_PCCO_1 = "AA" + COL_OFF_BALANCE_SHEET_PCEC_1 = "AB" + COL_OFF_BALANCE_SHEET_AMOUNT_TO_ADJ_1 = "AC" + + COL_OFF_BALANCE_SHEET_NA_2 = "AD" + COL_OFF_BALANCE_SHEET_PCCO_2 = "AE" + COL_OFF_BALANCE_SHEET_PCEC_2 = "AF" + COL_OFF_BALANCE_SHEET_AMOUNT_TO_ADJ_2 = "AG" + + COL_FINAL_BMF_ID = "AM" + + ' BMF_ADJUSTMENT_SHEET + BMF_ADJUSTMENT_WORKSHEET = "BMF Adjustment" + COL_BMF_ADJUSTMENT_SHEET_BMF_REFERENCE_ID = "A" + COL_BMF_ADJUSTMENT_SHEET_LINE_TYPE = "B" + COL_BMF_ADJUSTMENT_SHEET_ADJUSTMENT_TYPE = "D" + COL_BMF_ADJUSTMENT_SHEET_COMMENT = "E" + COL_BMF_ADJUSTMENT_SHEET_REPORTING_ENTITY = "F" + COL_BMF_ADJUSTMENT_SHEET_PCCO = "G" + COL_BMF_ADJUSTMENT_SHEET_PCEC = "H" + COL_BMF_ADJUSTMENT_SHEET_ACCOUNTING_BALANCE_CURRENCY = "I" + COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_ACCT_BALANCE = "J" + COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_FUNT = "K" + COL_BMF_ADJUSTMENT_SHEET_INTERNAL_EXTERNAL_CODE = "M" + COL_BMF_ADJUSTMENT_SHEET_IFRS_NORM_FLAG = "N" + COL_BMF_ADJUSTMENT_SHEET_FRENCH_GAAP_NORM_FLAG = "O" + COL_BMF_ADJUSTMENT_SHEET_PROCESS_IMPACTED_LIQ = "P" + COL_BMF_ADJUSTMENT_SHEET_PROCESS_IMPACTED_STT = "Q" + COL_BMF_ADJUSTMENT_SHEET_PROCESS_IMPACTED_YLD = "R" + COL_BMF_ADJUSTMENT_SHEET_AMOUNT_TYPE_CODE = "S" + COL_BMF_ADJUSTMENT_SHEET_OPAQUE_REPORTING_ENTITY = "BJ" + COL_BMF_ADJUSTMENT_SHEET_LOCAL_OPERATIONAL_ACCOUNT = "BN" + + +Done: + Debug.Print "init done" + Exit Sub + +eh: + Debug.Print "init:Error: " & Err.Description + + +End Sub + +Function paintYellow(cell As Variant) + cell.Interior.Color = RGB(246, 229, 141) + paintYellow = True +End Function + +Function paintRed(cell As Variant) + cell.Interior.Color = RGB(255, 121, 121) + paintRed = True +End Function + +Function CheckIfOffBalanceSheetAmountToAdjust1NoNeedCopy(current_row As Integer, bmf_id As String, pcco As String) + On Error GoTo eh + Dim output As Boolean + output = False + Dim temp As String + temp = Worksheets(RAW_DATA_WORKSHEET).Range(COL_OFF_BALANCE_SHEET_AMOUNT_TO_ADJ_1 & CStr(current_row)).Value + + If (temp = "") Then + output = True + ElseIf (temp = "0") Then + paintYellow (Worksheets(RAW_DATA_WORKSHEET).Range(COL_OFF_BALANCE_SHEET_AMOUNT_TO_ADJ_1 & CStr(current_row))) + output = True + ElseIf (checkIfAlreadyExistInBmfAdjustmentResult(bmf_id, pcco, current_row)) Then + paintRed (Worksheets(RAW_DATA_WORKSHEET).Range("AI" & CStr(current_row))) + paintRed (Worksheets(RAW_DATA_WORKSHEET).Range(COL_OFF_BALANCE_SHEET_PCCO_1 & CStr(current_row))) + + output = True + End If + + + CheckIfOffBalanceSheetAmountToAdjust1NoNeedCopy = output + +Done: + Exit Function + +eh: + Debug.Print "CheckIfOffBalanceSheetAmountToAdjust1NoNeedCopy:Error: " & Err.Description + +End Function + +Function CheckIfAdjustmentSheetBmfIdValid(current_row As Integer) + On Error GoTo eh + Dim output As Boolean + output = False + Dim temp As String + temp = Worksheets(RAW_DATA_WORKSHEET).Range(COL_FINAL_BMF_ID & CStr(current_row)).Value + + If (temp <> "") Then + output = True + End If + + CheckIfAdjustmentSheetBmfIdValid = output + +Done: + Exit Function + +eh: + Debug.Print "CheckIfAdjustmentSheetBmfIdValid:Error: " & Err.Description + +End Function + +Function CheckIfOffBalanceSheetAmountToAdjust2NoNeedCopy(current_row As Integer, bmf_id As String, pcco As String) + On Error GoTo eh + Dim output As Boolean + output = False + Dim temp As String + temp = Worksheets(RAW_DATA_WORKSHEET).Range(COL_OFF_BALANCE_SHEET_AMOUNT_TO_ADJ_2 & CStr(current_row)).Value + + If (temp = "") Then + output = True + ElseIf (temp = "0") Then + paintYellow (Worksheets(RAW_DATA_WORKSHEET).Range(COL_OFF_BALANCE_SHEET_AMOUNT_TO_ADJ_2 & CStr(current_row))) + output = True + ElseIf (checkIfAlreadyExistInBmfAdjustmentResult(bmf_id, pcco, current_row)) Then + paintRed (Worksheets(RAW_DATA_WORKSHEET).Range("AI" & CStr(current_row))) + paintRed (Worksheets(RAW_DATA_WORKSHEET).Range(COL_OFF_BALANCE_SHEET_PCCO_2 & CStr(current_row))) + output = True + End If + + + CheckIfOffBalanceSheetAmountToAdjust2NoNeedCopy = output + +Done: + Exit Function + +eh: + Debug.Print "CheckIfOffBalanceSheetAmountToAdjust2NoNeedCopy:Error: " & Err.Description + +End Function + +Function CheckIfBalanceSheetAmountToAdjust1NoNeedCopy(current_row As Integer, bmf_id As String, pcco As String) + On Error GoTo eh + Dim output As Boolean + output = False + + Dim temp As String + + temp = Worksheets(RAW_DATA_WORKSHEET).Range(COL_BALANCE_SHEET_AMOUNT_TO_ADJ_1 & CStr(current_row)).Value + Debug.Print "CheckIfBalanceSheetAmountToAdjust1NoNeedCopy:" & temp = "0" + + If (temp = "") Then + output = True + ElseIf (temp = "0") Then + paintYellow (Worksheets(RAW_DATA_WORKSHEET).Range(COL_BALANCE_SHEET_AMOUNT_TO_ADJ_1 & CStr(current_row))) + output = True + ElseIf (checkIfAlreadyExistInBmfAdjustmentResult(bmf_id, pcco, current_row)) Then + paintRed (Worksheets(RAW_DATA_WORKSHEET).Range("AI" & CStr(current_row))) + paintRed (Worksheets(RAW_DATA_WORKSHEET).Range(COL_BALANCE_SHEET_PCCO_1 & CStr(current_row))) + output = True + End If + + CheckIfBalanceSheetAmountToAdjust1NoNeedCopy = output + +Done: + Exit Function + +eh: + Debug.Print "CheckIfBalanceSheetAmountToAdjust1NoNeedCopy:Error: " & Err.Description + +End Function + +Function CheckIfBalanceSheetAmountToAdjust2NoNeedCopy(current_row As Integer, bmf_id As String, pcco As String) + On Error GoTo eh + Dim output As Boolean + output = False + Dim temp As String + temp = Worksheets(RAW_DATA_WORKSHEET).Range(COL_BALANCE_SHEET_AMOUNT_TO_ADJ_2 & CStr(current_row)).Value + + If (temp = "") Then + output = True + ElseIf (temp = "0") Then + paintYellow (Worksheets(RAW_DATA_WORKSHEET).Range(COL_BALANCE_SHEET_AMOUNT_TO_ADJ_2 & CStr(current_row))) + output = True + ElseIf (checkIfAlreadyExistInBmfAdjustmentResult(bmf_id, pcco, current_row)) Then + paintRed (Worksheets(RAW_DATA_WORKSHEET).Range("AI" & CStr(current_row))) + paintRed (Worksheets(RAW_DATA_WORKSHEET).Range(COL_BALANCE_SHEET_PCCO_2 & CStr(current_row))) + output = True + End If + + + CheckIfBalanceSheetAmountToAdjust2NoNeedCopy = output + +Done: + Exit Function + +eh: + Debug.Print "CheckIfBalanceSheetAmountToAdjust2NoNeedCopy:Error: " & Err.Description + +End Function + +Function CheckIfBalanceSheetNa2Exist(current_row As Integer) + On Error GoTo eh + Dim output As Boolean + output = False + Dim temp As String + temp = Worksheets(RAW_DATA_WORKSHEET).Range(COL_BALANCE_SHEET_NA_2 & CStr(current_row)).Value + + If (temp <> "") Then + output = True + End If + + CheckIfBalanceSheetNa2Exist = output + +Done: + Exit Function + +eh: + Debug.Print "CheckIfBalanceSheetNa2Exist:Error: " & Err.Description + +End Function + +Function CheckIfBalanceSheetPcco2Exist(current_row As Integer) + On Error GoTo eh + + Dim output As Boolean + output = False + Dim temp As String + temp = Worksheets(RAW_DATA_WORKSHEET).Range(COL_BALANCE_SHEET_PCCO_2 & CStr(current_row)).Value + + If (temp <> "") Then + output = True + End If + + CheckIfBalanceSheetPcco2Exist = output + +Done: + Exit Function + +eh: + Debug.Print "CheckIfBalanceSheetPcco2Exist:Error: " & Err.Description + +End Function +Function CheckIfBalanceSheetPcec2Exist(current_row As Integer) + On Error GoTo eh + + Dim output As Boolean + output = False + Dim temp As String + temp = Worksheets(RAW_DATA_WORKSHEET).Range(COL_BALANCE_SHEET_PCEC_2 & CStr(current_row)).Value + + If (temp <> "") Then + output = True + End If + + CheckIfBalanceSheetPcco2Exist = output + +Done: + Exit Function + +eh: + Debug.Print "CheckIfBalanceSheetPcco2Exist:Error: " & Err.Description + +End Function + + +Function CheckIfBalanceSheetAmountToAdjust2Exist(current_row As Integer) + On Error GoTo eh + + Dim output As Boolean + output = False + Dim temp As String + temp = Worksheets(RAW_DATA_WORKSHEET).Range(COL_BALANCE_SHEET_AMOUNT_TO_ADJ_2 & CStr(current_row)).Value + + If (temp <> "") Then + output = True + End If + + CheckIfBalanceSheetAmountToAdjust2Exist = output + +Done: + Exit Function + +eh: + Debug.Print "CheckIfBalanceSheetAmountToAdjust2Exist:Error: " & Err.Description + +End Function + +Function isCurrentRowNeedToProcess(input_row As Integer) + On Error GoTo eh + + Dim output As Boolean + Dim cell_value As Currency + Dim input_cell As String + input_cell = GRANDTOTAL_COL & input_row + +Done: + isCurrentRowNeedToProcess = Not (IsEmpty(Worksheets(RAW_DATA_WORKSHEET).Range(input_cell).Value)) + Exit Function + +eh: + Debug.Print "isCurrentRowNeedToProcess:Error: " & Err.Description + +End Function + +Function getLastCheckRow(first_row As Integer) + On Error GoTo eh + getLastCheckRow = first_row + 10 + +Done: + Exit Function + +eh: + Debug.Print "getLastCheckRow:Error: " & Err.Description + +End Function + +Function checkAdjustmentSheetLastRow(current_row As Integer) + On Error GoTo eh + Dim output As Boolean + output = True + + Dim j As Integer + Dim temp As String + + For j = current_row To getLastCheckRow(current_row) + temp = Worksheets(RAW_DATA_WORKSHEET).Range(COL_FINAL_BMF_ID & CStr(current_row)).Value + If (temp <> "") Then + output = False + End If + Next j + + checkAdjustmentSheetLastRow = output + +Done: + Exit Function + +eh: + Debug.Print "checkAdjustmentSheetLastRow:Error: " & Err.Description + +End Function + +Function checkBmfAdjustmentSheetLastRow(current_row As Integer) + On Error GoTo eh + Dim output As Boolean + output = True + + Dim j As Integer + Dim temp As String + + For j = current_row To getLastCheckRow(current_row) + temp = Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_BMF_REFERENCE_ID & CStr(current_row)).Value + If (temp <> "") Then + output = False + End If + Next j + + checkBmfAdjustmentSheetLastRow = output + +Done: + Exit Function + +eh: + Debug.Print "checkBmfAdjustmentSheetLastRow:Error: " & Err.Description + +End Function + +Function checkIfAlreadyExistInBmfAdjustmentResult(adj_bmf_id As String, adj_pcco As String, adj_sheet_row As Integer) + On Error GoTo eh + + Dim i As Integer + Dim bmf_adjustment_sheet_last_row As Integer + Dim found As Boolean + found = False + Dim temp_value As String + Dim bmf_adj_bmf_id As String + Dim bmf_adj_pcco As String + Dim bmf_adj_pcec As String + + Application.ScreenUpdating = False + + + bmf_adjustment_sheet_last_row = getBMFAdjustmentResultListEnd(1) + + For i = 1 To bmf_adjustment_sheet_last_row + bmf_adj_bmf_id = Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_BMF_REFERENCE_ID & CStr(i)).Value + bmf_adj_pcco = Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PCCO & CStr(i)).Value + bmf_adj_pcec = Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PCEC & CStr(i)).Value + + ' debug.print bmf_adj_bmf_id + ' debug.print bmf_adj_pcco + ' debug.print adj_bmf_id + ' debug.print adj_pcco + ' debug.print bmf_adj_bmf_id = adj_bmf_id And bmf_adj_pcco = adj_pcco + + + If (bmf_adj_bmf_id = adj_bmf_id And bmf_adj_pcco = adj_pcco) Then + + ' Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range("B"&cstr(i)).value = Cstr(bmf_adj_bmf_id = adj_bmf_id) + ' Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range("B"&cstr(i)).value = Cstr(bmf_adj_pcco = adj_pcco) + + 'Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_BMF_REFERENCE_ID & CStr(i)).Interior.Color = RGB(214, 48, 49) + paintRed (Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_BMF_REFERENCE_ID & CStr(i))) + ' Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PCCO & CStr(i)).Interior.Color = RGB(214, 48, 49) + paintRed (Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PCCO & CStr(i))) + paintRed (Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PCEC & CStr(i))) + + ' adj_sheet_row + + + found = True + + Exit For + End If + Next i + + checkIfAlreadyExistInBmfAdjustmentResult = found + + Application.ScreenUpdating = True + +Done: + Exit Function + +eh: + Application.ScreenUpdating = True + + Debug.Print "checkIfAlreadyExistInBmfAdjustmentResult:Error: " & Err.Description + +End Function + +Function getBMFAdjustmentResultListEnd(start_row As Integer) + On Error GoTo eh + + Dim i As Integer + + Dim last_row As Boolean + Dim last_row_found As Boolean + last_row_found = False + last_row = True + current_row = start_row + + For i = start_row To 9999 + current_row = i + last_row_found = checkBmfAdjustmentSheetLastRow(current_row) + + If (last_row_found = True) Then + Exit For + End If + Next i + + getBMFAdjustmentResultListEnd = current_row - 1 + +Done: + Exit Function + +eh: + Debug.Print "getBMFAdjustmentResultListEnd:Error: " & Err.Description + +End Function + +Function getAdjustmentSheetListEnd(start_row As Integer) + On Error GoTo eh + + Dim i As Integer + + Dim last_row As Boolean + Dim last_row_found As Boolean + last_row_found = False + last_row = True + current_row = start_row + + For i = start_row To 9999 + current_row = i + last_row_found = checkAdjustmentSheetLastRow(current_row) + + If (last_row_found = True) Then + Exit For + End If + Next i + + getAdjustmentSheetListEnd = current_row - 1 + +Done: + Exit Function + +eh: + Debug.Print "getAdjustmentSheetListEnd:Error: " & Err.Description + +End Function + +Function checkBmf16902690SheetLastRow(current_row As Integer) + On Error GoTo eh + Dim output As Boolean + output = True + + Dim j As Integer + Dim temp As String + + For j = current_row To getLastCheckRow(current_row) + temp = Worksheets(BMF_1690_2690_WORKSHEET).Range(COL_BMF_1690_2690_BMF_ID & CStr(current_row)).Value + If (temp <> "") Then + output = False + End If + Next j + + checkBmf16902690SheetLastRow = output + +Done: + Exit Function + +eh: + Debug.Print "checkBmf16902690SheetLastRow:Error: " & Err.Description + +End Function + +Function getBmf16902690SheetListEnd(start_row As Integer) + On Error GoTo eh + + Dim i As Integer + + Dim last_row As Boolean + Dim last_row_found As Boolean + last_row_found = False + last_row = True + current_row = start_row + + For i = start_row To 9999 + current_row = i + last_row_found = checkBmf16902690SheetLastRow(current_row) + + If (last_row_found = True) Then + Exit For + End If + Next i + + getBmf16902690SheetListEnd = current_row - 1 + +Done: + Exit Function + +eh: + Debug.Print "getBmf16902690SheetListEnd:Error: " & Err.Description + +End Function + + + +Sub resetBmfAdjustmentSheet() + init + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range("A4:BN9999").Clear + +End Sub + +Sub ProcessRawData() + On Error GoTo eh + Dim need_to_copy As Boolean + + Dim adjustment_sheet_first_row As Integer + Dim adjustment_sheet_last_row As Integer + Dim adjustment_sheet_current_row As Integer + + Dim bmf_adjustment_sheet_last_row As Integer + Dim bmf_adjustment_sheet_current_row As Integer + + Dim temp_value As String + + adjustment_sheet_first_row = 7 + + init + ' MsgBox "helloworld" + adjustment_sheet_last_row = getAdjustmentSheetListEnd(adjustment_sheet_first_row) + Debug.Print adjustment_sheet_last_row + + For adjustment_sheet_current_row = adjustment_sheet_first_row To adjustment_sheet_last_row + Debug.Print "processing adjustment_sheet_current_row: " & adjustment_sheet_current_row + + ' if (CheckIfBalanceSheetAmountToAdjust2Exist(adjustment_sheet_current_row) and CheckIfBalanceSheetNa2Exist(adjustment_sheet_current_row) and CheckIfBalanceSheetPcco2Exist(adjustment_sheet_current_row)) then + If (CheckIfAdjustmentSheetBmfIdValid(adjustment_sheet_current_row)) Then + Debug.Print "processing row: " & adjustment_sheet_current_row + + Dim bmf_id As String + bmf_id = Worksheets(RAW_DATA_WORKSHEET).Range(COL_FINAL_BMF_ID & CStr(adjustment_sheet_current_row)).Value + + Dim bal_pcco_1 As String + bal_pcco_1 = Worksheets(RAW_DATA_WORKSHEET).Range(COL_BALANCE_SHEET_PCCO_1 & CStr(adjustment_sheet_current_row)).Value + + Dim bal_pcco_2 As String + bal_pcco_2 = Worksheets(RAW_DATA_WORKSHEET).Range(COL_BALANCE_SHEET_PCCO_2 & CStr(adjustment_sheet_current_row)).Value + + Dim off_bal_pcco_1 As String + off_bal_pcco_1 = Worksheets(RAW_DATA_WORKSHEET).Range(COL_OFF_BALANCE_SHEET_PCCO_1 & CStr(adjustment_sheet_current_row)).Value + + Dim off_bal_pcco_2 As String + off_bal_pcco_2 = Worksheets(RAW_DATA_WORKSHEET).Range(COL_OFF_BALANCE_SHEET_PCCO_2 & CStr(adjustment_sheet_current_row)).Value + + Dim bal_pcec_1 As String + bal_pcec_1 = Worksheets(RAW_DATA_WORKSHEET).Range(COL_BALANCE_SHEET_PCEC_1 & CStr(adjustment_sheet_current_row)).Value + + Dim bal_pcec_2 As String + bal_pcec_2 = Worksheets(RAW_DATA_WORKSHEET).Range(COL_BALANCE_SHEET_PCEC_2 & CStr(adjustment_sheet_current_row)).Value + + Dim off_bal_pcec_1 As String + off_bal_pcec_1 = Worksheets(RAW_DATA_WORKSHEET).Range(COL_OFF_BALANCE_SHEET_PCEC_1 & CStr(adjustment_sheet_current_row)).Value + + Dim off_bal_pcec_2 As String + off_bal_pcec_2 = Worksheets(RAW_DATA_WORKSHEET).Range(COL_OFF_BALANCE_SHEET_PCEC_2 & CStr(adjustment_sheet_current_row)).Value + + ' balance sheet 1 + ' check need to copy ? see amount to adjust <> 0 ? + If (CheckIfBalanceSheetAmountToAdjust1NoNeedCopy(adjustment_sheet_current_row, bmf_id, bal_pcco_1) = True) Then + ' do skip + Debug.Print "skip balance sheet 1" + Else + ' do copy + bmf_adjustment_sheet_last_row = getBMFAdjustmentResultListEnd(1) + bmf_adjustment_sheet_current_row = bmf_adjustment_sheet_last_row + 1 + Debug.Print "bmf_adjustment_sheet_current_row:" & bmf_adjustment_sheet_current_row + + temp_value = Worksheets(RAW_DATA_WORKSHEET).Range(COL_FINAL_BMF_ID & CStr(adjustment_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_BMF_REFERENCE_ID & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_REPORTING_ENTITY & CStr(bmf_adjustment_sheet_current_row)).Value = "14004" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_OPAQUE_REPORTING_ENTITY & CStr(bmf_adjustment_sheet_current_row)).Value = "N" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_INTERNAL_EXTERNAL_CODE & CStr(bmf_adjustment_sheet_current_row)).Value = "E" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_IFRS_NORM_FLAG & CStr(bmf_adjustment_sheet_current_row)).Value = "Y" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_FRENCH_GAAP_NORM_FLAG & CStr(bmf_adjustment_sheet_current_row)).Value = "Y" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PROCESS_IMPACTED_LIQ & CStr(bmf_adjustment_sheet_current_row)).Value = "1" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PROCESS_IMPACTED_STT & CStr(bmf_adjustment_sheet_current_row)).Value = "1" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PROCESS_IMPACTED_YLD & CStr(bmf_adjustment_sheet_current_row)).Value = "1" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_TYPE_CODE & CStr(bmf_adjustment_sheet_current_row)).Value = "01" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_ADJUSTMENT_TYPE & CStr(bmf_adjustment_sheet_current_row)).Value = "DQ" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_COMMENT & CStr(bmf_adjustment_sheet_current_row)).Value = "Unsettled bond adjustment for RWA purpose" + + temp_value = Worksheets(RAW_DATA_WORKSHEET).Range(COL_BALANCE_SHEET_PCCO_1 & CStr(adjustment_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PCCO & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + + temp_value = Worksheets(RAW_DATA_WORKSHEET).Range(COL_BALANCE_SHEET_PCEC_1 & CStr(adjustment_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PCEC & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + + temp_value = Worksheets(RAW_DATA_WORKSHEET).Range(COL_BALANCE_SHEET_AMOUNT_TO_ADJ_1 & CStr(adjustment_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_ACCT_BALANCE & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_FUNT & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + + temp_value = Worksheets(RAW_DATA_WORKSHEET).Range(COL_BALANCE_SHEET_NA_1 & CStr(adjustment_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_LOCAL_OPERATIONAL_ACCOUNT & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value & " " & "15130" + + 'If "Raw Data" tab "NA" is 1020/2020/8601/8701 > "Line type" fill Creation + if ("1020" = temp_value or "2020" = temp_value or "8601" = temp_value or "8701" = temp_value) then + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_LINE_TYPE & bmf_adjustment_sheet_current_row).Value = "Creation" + end if + if ("1690" = temp_value or "2690" = temp_value) then + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_LINE_TYPE & bmf_adjustment_sheet_current_row).Value = "Reversing" + end if + + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range("A" & bmf_adjustment_sheet_current_row & ":" & "BN" & bmf_adjustment_sheet_current_row).NumberFormat = "@" + ' Selection.NumberFormat = RED_THOUSAND_SEP_NUMBER_FORMAT + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_ACCT_BALANCE & bmf_adjustment_sheet_current_row).NumberFormat = RED_THOUSAND_SEP_NUMBER_FORMAT + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_FUNT & bmf_adjustment_sheet_current_row).NumberFormat = RED_THOUSAND_SEP_NUMBER_FORMAT + + End If + + ' balance sheet 2 + ' check need to copy ? see amount to adjust <> 0 ? + Debug.Print bal_pcco_2 + If (CheckIfBalanceSheetAmountToAdjust2NoNeedCopy(adjustment_sheet_current_row, bmf_id, bal_pcco_2)) Then + ' do skip + Debug.Print "skip balance sheet 2" + Else + ' do copy + bmf_adjustment_sheet_last_row = getBMFAdjustmentResultListEnd(1) + bmf_adjustment_sheet_current_row = bmf_adjustment_sheet_last_row + 1 + temp_value = Worksheets(RAW_DATA_WORKSHEET).Range(COL_FINAL_BMF_ID & CStr(adjustment_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_BMF_REFERENCE_ID & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_REPORTING_ENTITY & CStr(bmf_adjustment_sheet_current_row)).Value = "14004" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_OPAQUE_REPORTING_ENTITY & CStr(bmf_adjustment_sheet_current_row)).Value = "N" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_INTERNAL_EXTERNAL_CODE & CStr(bmf_adjustment_sheet_current_row)).Value = "E" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_IFRS_NORM_FLAG & CStr(bmf_adjustment_sheet_current_row)).Value = "Y" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_FRENCH_GAAP_NORM_FLAG & CStr(bmf_adjustment_sheet_current_row)).Value = "Y" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PROCESS_IMPACTED_LIQ & CStr(bmf_adjustment_sheet_current_row)).Value = "1" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PROCESS_IMPACTED_STT & CStr(bmf_adjustment_sheet_current_row)).Value = "1" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PROCESS_IMPACTED_YLD & CStr(bmf_adjustment_sheet_current_row)).Value = "1" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_TYPE_CODE & CStr(bmf_adjustment_sheet_current_row)).Value = "01" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_ADJUSTMENT_TYPE & CStr(bmf_adjustment_sheet_current_row)).Value = "DQ" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_COMMENT & CStr(bmf_adjustment_sheet_current_row)).Value = "Unsettled bond adjustment for RWA purpose" + + + temp_value = Worksheets(RAW_DATA_WORKSHEET).Range(COL_BALANCE_SHEET_PCCO_2 & CStr(adjustment_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PCCO & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + + temp_value = Worksheets(RAW_DATA_WORKSHEET).Range(COL_BALANCE_SHEET_PCEC_2 & CStr(adjustment_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PCEC & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + + temp_value = Worksheets(RAW_DATA_WORKSHEET).Range(COL_BALANCE_SHEET_AMOUNT_TO_ADJ_2 & CStr(adjustment_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_ACCT_BALANCE & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_FUNT & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + + temp_value = Worksheets(RAW_DATA_WORKSHEET).Range(COL_BALANCE_SHEET_NA_2 & CStr(adjustment_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_LOCAL_OPERATIONAL_ACCOUNT & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value & " " & "15130" + 'If "Raw Data" tab "NA" is 1020/2020/8601/8701 > "Line type" fill Creation + if ("1020" = temp_value or "2020" = temp_value or "8601" = temp_value or "8701" = temp_value) then + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_LINE_TYPE & bmf_adjustment_sheet_current_row).Value = "Creation" + end if + if ("1690" = temp_value or "2690" = temp_value) then + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_LINE_TYPE & bmf_adjustment_sheet_current_row).Value = "Reversing" + end if + + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range("A" & bmf_adjustment_sheet_current_row & ":" & "BN" & bmf_adjustment_sheet_current_row).NumberFormat = "@" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_ACCT_BALANCE & bmf_adjustment_sheet_current_row).NumberFormat = RED_THOUSAND_SEP_NUMBER_FORMAT + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_FUNT & bmf_adjustment_sheet_current_row).NumberFormat = RED_THOUSAND_SEP_NUMBER_FORMAT + + End If + + ' off-balance sheet 1 + ' check need to copy ? see amount to adjust <> 0 ? + If (CheckIfOffBalanceSheetAmountToAdjust1NoNeedCopy(adjustment_sheet_current_row, bmf_id, off_bal_pcco_1)) Then + ' do skip + Debug.Print "skip off-balance sheet 1" + Else + ' do copy + bmf_adjustment_sheet_last_row = getBMFAdjustmentResultListEnd(1) + bmf_adjustment_sheet_current_row = bmf_adjustment_sheet_last_row + 1 + temp_value = Worksheets(RAW_DATA_WORKSHEET).Range(COL_FINAL_BMF_ID & CStr(adjustment_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_BMF_REFERENCE_ID & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_REPORTING_ENTITY & CStr(bmf_adjustment_sheet_current_row)).Value = "14004" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_OPAQUE_REPORTING_ENTITY & CStr(bmf_adjustment_sheet_current_row)).Value = "N" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_INTERNAL_EXTERNAL_CODE & CStr(bmf_adjustment_sheet_current_row)).Value = "E" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_IFRS_NORM_FLAG & CStr(bmf_adjustment_sheet_current_row)).Value = "Y" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_FRENCH_GAAP_NORM_FLAG & CStr(bmf_adjustment_sheet_current_row)).Value = "Y" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PROCESS_IMPACTED_LIQ & CStr(bmf_adjustment_sheet_current_row)).Value = "1" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PROCESS_IMPACTED_STT & CStr(bmf_adjustment_sheet_current_row)).Value = "1" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PROCESS_IMPACTED_YLD & CStr(bmf_adjustment_sheet_current_row)).Value = "1" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_TYPE_CODE & CStr(bmf_adjustment_sheet_current_row)).Value = "01" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_ADJUSTMENT_TYPE & CStr(bmf_adjustment_sheet_current_row)).Value = "DQ" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_COMMENT & CStr(bmf_adjustment_sheet_current_row)).Value = "Unsettled bond adjustment for RWA purpose" + + + temp_value = Worksheets(RAW_DATA_WORKSHEET).Range(COL_OFF_BALANCE_SHEET_PCCO_1 & CStr(adjustment_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PCCO & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + + temp_value = Worksheets(RAW_DATA_WORKSHEET).Range(COL_OFF_BALANCE_SHEET_PCEC_1 & CStr(adjustment_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PCEC & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + + + temp_value = Worksheets(RAW_DATA_WORKSHEET).Range(COL_OFF_BALANCE_SHEET_AMOUNT_TO_ADJ_1 & CStr(adjustment_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_ACCT_BALANCE & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_FUNT & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + + temp_value = Worksheets(RAW_DATA_WORKSHEET).Range(COL_OFF_BALANCE_SHEET_NA_1 & CStr(adjustment_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_LOCAL_OPERATIONAL_ACCOUNT & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value & " " & "15130" + 'If "Raw Data" tab "NA" is 1020/2020/8601/8701 > "Line type" fill Creation + if ("1020" = temp_value or "2020" = temp_value or "8601" = temp_value or "8701" = temp_value) then + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_LINE_TYPE & bmf_adjustment_sheet_current_row).Value = "Creation" + end if + if ("1690" = temp_value or "2690" = temp_value) then + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_LINE_TYPE & bmf_adjustment_sheet_current_row).Value = "Reversing" + end if + + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range("A" & bmf_adjustment_sheet_current_row & ":" & "BN" & bmf_adjustment_sheet_current_row).NumberFormat = "@" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_ACCT_BALANCE & bmf_adjustment_sheet_current_row).NumberFormat = RED_THOUSAND_SEP_NUMBER_FORMAT + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_FUNT & bmf_adjustment_sheet_current_row).NumberFormat = RED_THOUSAND_SEP_NUMBER_FORMAT + + End If + + ' off-balance sheet 2 + ' check need to copy ? see amount to adjust <> 0 ? + If (CheckIfOffBalanceSheetAmountToAdjust2NoNeedCopy(adjustment_sheet_current_row, bmf_id, off_bal_pcco_2)) Then + ' do skip + Debug.Print "skip off-balance sheet 2" + Else + ' do copy + bmf_adjustment_sheet_last_row = getBMFAdjustmentResultListEnd(1) + bmf_adjustment_sheet_current_row = bmf_adjustment_sheet_last_row + 1 + temp_value = Worksheets(RAW_DATA_WORKSHEET).Range(COL_FINAL_BMF_ID & CStr(adjustment_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_BMF_REFERENCE_ID & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_REPORTING_ENTITY & CStr(bmf_adjustment_sheet_current_row)).Value = "14004" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_OPAQUE_REPORTING_ENTITY & CStr(bmf_adjustment_sheet_current_row)).Value = "N" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_INTERNAL_EXTERNAL_CODE & CStr(bmf_adjustment_sheet_current_row)).Value = "E" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_IFRS_NORM_FLAG & CStr(bmf_adjustment_sheet_current_row)).Value = "Y" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_FRENCH_GAAP_NORM_FLAG & CStr(bmf_adjustment_sheet_current_row)).Value = "Y" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PROCESS_IMPACTED_LIQ & CStr(bmf_adjustment_sheet_current_row)).Value = "1" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PROCESS_IMPACTED_STT & CStr(bmf_adjustment_sheet_current_row)).Value = "1" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PROCESS_IMPACTED_YLD & CStr(bmf_adjustment_sheet_current_row)).Value = "1" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_TYPE_CODE & CStr(bmf_adjustment_sheet_current_row)).Value = "01" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_ADJUSTMENT_TYPE & CStr(bmf_adjustment_sheet_current_row)).Value = "DQ" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_COMMENT & CStr(bmf_adjustment_sheet_current_row)).Value = "Unsettled bond adjustment for RWA purpose" + + temp_value = Worksheets(RAW_DATA_WORKSHEET).Range(COL_OFF_BALANCE_SHEET_PCCO_2 & CStr(adjustment_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PCCO & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + + temp_value = Worksheets(RAW_DATA_WORKSHEET).Range(COL_OFF_BALANCE_SHEET_PCEC_2 & CStr(adjustment_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PCEC & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + + + temp_value = Worksheets(RAW_DATA_WORKSHEET).Range(COL_OFF_BALANCE_SHEET_AMOUNT_TO_ADJ_2 & CStr(adjustment_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_ACCT_BALANCE & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_FUNT & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + + temp_value = Worksheets(RAW_DATA_WORKSHEET).Range(COL_OFF_BALANCE_SHEET_NA_2 & CStr(adjustment_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_LOCAL_OPERATIONAL_ACCOUNT & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value & " " & "15130" + 'If "Raw Data" tab "NA" is 1020/2020/8601/8701 > "Line type" fill Creation + if ("1020" = temp_value or "2020" = temp_value or "8601" = temp_value or "8701" = temp_value) then + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_LINE_TYPE & bmf_adjustment_sheet_current_row).Value = "Creation" + end if + if ("1690" = temp_value or "2690" = temp_value) then + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_LINE_TYPE & bmf_adjustment_sheet_current_row).Value = "Reversing" + end if + + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range("A" & bmf_adjustment_sheet_current_row & ":" & "BN" & bmf_adjustment_sheet_current_row).NumberFormat = "@" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_ACCT_BALANCE & bmf_adjustment_sheet_current_row).NumberFormat = RED_THOUSAND_SEP_NUMBER_FORMAT + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_FUNT & bmf_adjustment_sheet_current_row).NumberFormat = RED_THOUSAND_SEP_NUMBER_FORMAT + + End If + + Else + Debug.Print adjustment_sheet_current_row & " skipping copy as bmfid is empty" + End If + + + Next adjustment_sheet_current_row + +Done: + Exit Sub + +eh: + Debug.Print "helloworld:Error: " & Err.Description + +End Sub + + +function CheckIfBmf16902690ToBmfAdjustmentNoNeedCopy(current_row As Integer, bmf_id As String, pcco As String) + On Error GoTo eh + Dim output As Boolean + output = False + + Dim temp As String + + temp = Worksheets(BMF_1690_2690_WORKSHEET).Range(COL_BMF_1690_2690_AMOUNT_IN_ACCT & CStr(current_row)).Value + Debug.Print "CheckIfBmf16902690ToBmfAdjustmentNoNeedCopy:" & temp = "0" + + If (temp = "") Then + output = True + ElseIf (temp = "0") Then + paintYellow (Worksheets(BMF_1690_2690_WORKSHEET).Range(COL_BALANCE_SHEET_AMOUNT_TO_ADJ_1 & CStr(current_row))) + output = True + ElseIf (checkIfAlreadyExistInBmfAdjustmentResult(bmf_id, pcco, current_row)) Then + paintRed (Worksheets(BMF_1690_2690_WORKSHEET).Range(COL_BMF_1690_2690_BMF_ID & CStr(current_row))) + paintRed (Worksheets(BMF_1690_2690_WORKSHEET).Range(COL_BMF_1690_2690_PCCO & CStr(current_row))) + output = True + End If + + CheckIfBmf16902690ToBmfAdjustmentNoNeedCopy = output + +Done: + Exit Function + +eh: + Debug.Print "CheckIfBmf16902690ToBmfAdjustmentNoNeedCopy:Error: " & Err.Description + +end function + +Sub ProcessBmf16902690() + On Error GoTo eh + initBmf16902690 + + Dim need_to_copy As Boolean + + Dim bmf_1690_2690_sheet_first_row As Integer + Dim bmf_1690_2690_sheet_last_row As Integer + Dim bmf_1690_2690_sheet_current_row As Integer + + Dim bmf_adjustment_sheet_last_row As Integer + Dim bmf_adjustment_sheet_current_row As Integer + + bmf_1690_2690_sheet_first_row = 12 + bmf_1690_2690_sheet_last_row = getBmf16902690SheetListEnd(bmf_1690_2690_sheet_first_row) + + 'msgbox bmf_1690_2690_sheet_last_row + + For bmf_1690_2690_sheet_current_row = bmf_1690_2690_sheet_first_row To bmf_1690_2690_sheet_last_row + bmf_adjustment_sheet_last_row = getBMFAdjustmentResultListEnd(1) + bmf_adjustment_sheet_current_row = bmf_adjustment_sheet_last_row + 1 + Debug.Print "bmf_adjustment_sheet_current_row:" & bmf_adjustment_sheet_current_row + + Dim temp_value as String + + Dim bmf_id As String + bmf_id = Worksheets(BMF_1690_2690_WORKSHEET).Range(COL_BMF_1690_2690_BMF_ID & CStr(bmf_1690_2690_sheet_current_row)).Value + + Dim bmf_1690_2690_pcco As String + bmf_1690_2690_pcco = Worksheets(BMF_1690_2690_WORKSHEET).Range(COL_BMF_1690_2690_PCCO & CStr(bmf_1690_2690_sheet_current_row)).Value + + If (CheckIfBmf16902690ToBmfAdjustmentNoNeedCopy(bmf_1690_2690_sheet_current_row, bmf_id, bmf_1690_2690_pcco)) Then + ' no need copy + else + 'Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PCCO & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + temp_value = Worksheets(BMF_1690_2690_WORKSHEET).Range(COL_BMF_1690_2690_BMF_ID & CStr(bmf_1690_2690_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_BMF_REFERENCE_ID & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_BMF_REFERENCE_ID & CStr(bmf_adjustment_sheet_current_row)).NumberFormat = "@" + highlightBmfAdjustmentBmfId(current_row) + + temp_value = Worksheets(BMF_1690_2690_WORKSHEET).Range(COL_BMF_1690_2690_PCCO & CStr(bmf_1690_2690_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PCCO & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PCCO & CStr(bmf_adjustment_sheet_current_row)).NumberFormat = "@" + + + temp_value = Worksheets(BMF_1690_2690_WORKSHEET).Range(COL_BMF_1690_2690_PCEC & CStr(bmf_1690_2690_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PCEC & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PCEC & CStr(bmf_adjustment_sheet_current_row)).NumberFormat = "@" + + temp_value = Worksheets(BMF_1690_2690_WORKSHEET).Range(COL_BMF_1690_2690_NA & CStr(bmf_1690_2690_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_LOCAL_OPERATIONAL_ACCOUNT & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value & " 15130" + if ("1020" = temp_value or "2020" = temp_value or "8601" = temp_value or "8701" = temp_value) then + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_LINE_TYPE & bmf_adjustment_sheet_current_row).Value = "Creation" + end if + if ("1690" = temp_value or "2690" = temp_value) then + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_LINE_TYPE & bmf_adjustment_sheet_current_row).Value = "Reversing" + end if + + temp_value = Worksheets(BMF_1690_2690_WORKSHEET).Range(COL_BMF_1690_2690_AMOUNT_IN_ACCT & CStr(bmf_1690_2690_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_FUNT & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_FUNT & CStr(bmf_adjustment_sheet_current_row)).NumberFormat = RED_THOUSAND_SEP_NUMBER_FORMAT + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_ACCT_BALANCE & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_ACCT_BALANCE & CStr(bmf_adjustment_sheet_current_row)).NumberFormat = RED_THOUSAND_SEP_NUMBER_FORMAT + + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_REPORTING_ENTITY & CStr(bmf_adjustment_sheet_current_row)).Value = "14004" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_REPORTING_ENTITY & CStr(bmf_adjustment_sheet_current_row)).NumberFormat = "@" + + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_OPAQUE_REPORTING_ENTITY & CStr(bmf_adjustment_sheet_current_row)).Value = "N" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_INTERNAL_EXTERNAL_CODE & CStr(bmf_adjustment_sheet_current_row)).Value = "E" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_IFRS_NORM_FLAG & CStr(bmf_adjustment_sheet_current_row)).Value = "Y" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_FRENCH_GAAP_NORM_FLAG & CStr(bmf_adjustment_sheet_current_row)).Value = "Y" + + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PROCESS_IMPACTED_LIQ & CStr(bmf_adjustment_sheet_current_row)).Value = "1" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PROCESS_IMPACTED_LIQ & CStr(bmf_adjustment_sheet_current_row)).NumberFormat = "@" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PROCESS_IMPACTED_STT & CStr(bmf_adjustment_sheet_current_row)).Value = "1" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PROCESS_IMPACTED_STT & CStr(bmf_adjustment_sheet_current_row)).NumberFormat = "@" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PROCESS_IMPACTED_YLD & CStr(bmf_adjustment_sheet_current_row)).Value = "1" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PROCESS_IMPACTED_YLD & CStr(bmf_adjustment_sheet_current_row)).NumberFormat = "@" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_TYPE_CODE & CStr(bmf_adjustment_sheet_current_row)).Value = "01" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_TYPE_CODE & CStr(bmf_adjustment_sheet_current_row)).NumberFormat = "@" + + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_ADJUSTMENT_TYPE & CStr(bmf_adjustment_sheet_current_row)).Value = "DQ" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_COMMENT & CStr(bmf_adjustment_sheet_current_row)).Value = "Unsettled bond adjustment for RWA purpose" + + 'formatting + + end if + + next bmf_1690_2690_sheet_current_row + +Done: + Exit Sub + +eh: + Debug.Print "helloworld:Error: " & Err.Description + +End Sub + +Sub Main() + On Error GoTo eh + ProcessRawData + ProcessBmf16902690 + +Done: + Exit Sub + +eh: + Debug.Print "helloworld:Error: " & Err.Description + +End Sub + diff --git a/task3/_images/1.png b/task3/_images/1.png new file mode 100644 index 0000000..a17222b --- /dev/null +++ b/task3/_images/1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a8b70de35536f1a955032932a2100758d5c3e0ff118f7ffd7eda3ff053c0f196 +size 304664 diff --git a/task3/_images/2.png b/task3/_images/2.png new file mode 100644 index 0000000..38502f3 --- /dev/null +++ b/task3/_images/2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b2064be4f6bc2009dee3d3fbcd52950caed5371862d3113e9e951c743a259183 +size 32856 diff --git a/task3/_original/Copy and Paste 2.xlsm b/task3/_original/Copy and Paste 2.xlsm new file mode 100644 index 0000000..4fb1f34 Binary files /dev/null and b/task3/_original/Copy and Paste 2.xlsm differ diff --git a/task3/_original/Copy and Paste vba.txt b/task3/_original/Copy and Paste vba.txt new file mode 100644 index 0000000..99bb2ff --- /dev/null +++ b/task3/_original/Copy and Paste vba.txt @@ -0,0 +1,828 @@ +' change log: + +Option Explicit + +Dim first_row As Integer +Dim current_row As Integer +Dim last_check_row As Integer + +Dim ADJUSTMENT_WORKSHEET As String +Dim BMF_ADJUSTMENT_WORKSHEET As String + +' Raw Data BALANCE_SHEET +Dim COL_BALANCE_SHEET_NA_1 As String +Dim COL_BALANCE_SHEET_PCCO_1 As String +Dim COL_BALANCE_SHEET_PCEC_1 As String +Dim COL_BALANCE_SHEET_AMOUNT_TO_ADJ_1 As String + +Dim COL_BALANCE_SHEET_NA_2 As String +Dim COL_BALANCE_SHEET_PCCO_2 As String +Dim COL_BALANCE_SHEET_PCEC_2 As String +Dim COL_BALANCE_SHEET_AMOUNT_TO_ADJ_2 As String + +' Raw Data OFF_BALANCE_SHEET +Dim COL_OFF_BALANCE_SHEET_NA_1 As String +Dim COL_OFF_BALANCE_SHEET_PCCO_1 As String +Dim COL_OFF_BALANCE_SHEET_PCEC_1 As String +Dim COL_OFF_BALANCE_SHEET_AMOUNT_TO_ADJ_1 As String + +Dim COL_OFF_BALANCE_SHEET_NA_2 As String +Dim COL_OFF_BALANCE_SHEET_PCCO_2 As String +Dim COL_OFF_BALANCE_SHEET_PCEC_2 As String +Dim COL_OFF_BALANCE_SHEET_AMOUNT_TO_ADJ_2 As String + +Dim COL_FINAL_BMF_ID As String + +'BMF 1690 2690 +Dim COL_BMF16902690_SHEET_BMF_REFERENCE_ID As String 'Column C +Dim COL_BMF16902690_SHEET_PCCO_CODE As String 'Column E +Dim COL_BMF16902690_SHEET_PCEC_CODE As String 'Column F +Dim COL_BMF16902690_SHEET_NA As String 'Column H +Dim COL_BMF16902690_SHEET_AMOUNT_TO_ADJ As String 'Column M + +'BMF Adjustment +Dim COL_BMF_ADJUSTMENT_SHEET_BMF_REFERENCE_ID As String 'Column A +Dim COL_BMF_ADJUSTMENT_SHEET_LINE_TYPE As String 'Column B +Dim COL_BMF_ADJUSTMENT_SHEET_ADJUSTMENT_TYPE As String 'Column D +Dim COL_BMF_ADJUSTMENT_SHEET_COMMENT As String 'Column E +Dim COL_BMF_ADJUSTMENT_SHEET_REPORTING_ENTITY As String 'Column F +Dim COL_BMF_ADJUSTMENT_SHEET_PCCO As String 'Column G +Dim COL_BMF_ADJUSTMENT_SHEET_PCEC As String 'Column H +Dim COL_BMF_ADJUSTMENT_SHEET_ACCOUNTING_BALANCE_CURRENCY As String 'Column I +Dim COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_ACCT_BALANCE As String 'Column J +Dim COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_FUNT As String 'Column K +Dim COL_BMF_ADJUSTMENT_SHEET_INTERNAL_EXTERNAL_CODE As String 'Column M +Dim COL_BMF_ADJUSTMENT_SHEET_IFRS_NORM_FLAG As String 'Column N +Dim COL_BMF_ADJUSTMENT_SHEET_FRENCH_GAAP_NORM_FLAG As String 'Column O +Dim COL_BMF_ADJUSTMENT_SHEET_PROCESS_IMPACTED_LIQ As String 'Column P +Dim COL_BMF_ADJUSTMENT_SHEET_PROCESS_IMPACTED_STT As String 'Column Q +Dim COL_BMF_ADJUSTMENT_SHEET_PROCESS_IMPACTED_YLD As String 'Column R +Dim COL_BMF_ADJUSTMENT_SHEET_AMOUNT_TYPE_CODE As String 'Column S +Dim COL_BMF_ADJUSTMENT_SHEET_OPAQUE_REPORTING_ENTITY As String 'Column BJ +Dim COL_BMF_ADJUSTMENT_SHEET_LOCAL_OPERATIONAL_ACCOUNT As String 'Column BN + +Dim RED_THOUSAND_SEP_NUMBER_FORMAT As String + +Sub init() + On Error GoTo eh + + RED_THOUSAND_SEP_NUMBER_FORMAT = "#,##0_);[Red](#,##0)" + + ' HEADER_ROW = 6 + first_row = 6 + current_row = first_row + last_check_row = 9999 + + ' ADJUSTMENT_SHEET + ADJUSTMENT_WORKSHEET = "Raw Data" + + ' BALANCE_SHEET + COL_BALANCE_SHEET_NA_1 = "Q" + COL_BALANCE_SHEET_PCCO_1 = "R" + COL_BALANCE_SHEET_PCEC_1 = "S" + COL_BALANCE_SHEET_AMOUNT_TO_ADJ_1 = "T" + + COL_BALANCE_SHEET_NA_2 = "U" + COL_BALANCE_SHEET_PCCO_2 = "V" + COL_BALANCE_SHEET_PCEC_2 = "W" + COL_BALANCE_SHEET_AMOUNT_TO_ADJ_2 = "X" + + ' OFF_BALANCE_SHEET + COL_OFF_BALANCE_SHEET_NA_1 = "Z" + COL_OFF_BALANCE_SHEET_PCCO_1 = "AA" + COL_OFF_BALANCE_SHEET_PCEC_1 = "AB" + COL_OFF_BALANCE_SHEET_AMOUNT_TO_ADJ_1 = "AC" + + COL_OFF_BALANCE_SHEET_NA_2 = "AD" + COL_OFF_BALANCE_SHEET_PCCO_2 = "AE" + COL_OFF_BALANCE_SHEET_PCEC_2 = "AF" + COL_OFF_BALANCE_SHEET_AMOUNT_TO_ADJ_2 = "AG" + + COL_FINAL_BMF_ID = "AM" + + ' BMF_ADJUSTMENT_SHEET + BMF_ADJUSTMENT_WORKSHEET = "BMF Adjustment" + COL_BMF_ADJUSTMENT_SHEET_BMF_REFERENCE_ID = "A" + COL_BMF_ADJUSTMENT_SHEET_LINE_TYPE = "B" + COL_BMF_ADJUSTMENT_SHEET_ADJUSTMENT_TYPE = "D" + COL_BMF_ADJUSTMENT_SHEET_COMMENT = "E" + COL_BMF_ADJUSTMENT_SHEET_REPORTING_ENTITY = "F" + COL_BMF_ADJUSTMENT_SHEET_PCCO = "G" + COL_BMF_ADJUSTMENT_SHEET_PCEC = "H" + COL_BMF_ADJUSTMENT_SHEET_ACCOUNTING_BALANCE_CURRENCY = "I" + COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_ACCT_BALANCE = "J" + COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_FUNT = "K" + COL_BMF_ADJUSTMENT_SHEET_INTERNAL_EXTERNAL_CODE = "M" + COL_BMF_ADJUSTMENT_SHEET_IFRS_NORM_FLAG = "N" + COL_BMF_ADJUSTMENT_SHEET_FRENCH_GAAP_NORM_FLAG = "O" + COL_BMF_ADJUSTMENT_SHEET_PROCESS_IMPACTED_LIQ = "P" + COL_BMF_ADJUSTMENT_SHEET_PROCESS_IMPACTED_STT = "Q" + COL_BMF_ADJUSTMENT_SHEET_PROCESS_IMPACTED_YLD = "R" + COL_BMF_ADJUSTMENT_SHEET_AMOUNT_TYPE_CODE = "S" + COL_BMF_ADJUSTMENT_SHEET_OPAQUE_REPORTING_ENTITY = "BJ" + COL_BMF_ADJUSTMENT_SHEET_LOCAL_OPERATIONAL_ACCOUNT = "BN" + + +Done: + Debug.Print "init done" + Exit Sub + +eh: + Debug.Print "init:Error: " & Err.Description + + +End Sub + +Function paintYellow(cell As Variant) + cell.Interior.Color = RGB(246, 229, 141) + paintYellow = True +End Function + +Function paintRed(cell As Variant) + cell.Interior.Color = RGB(255, 121, 121) + paintRed = True +End Function + +Function CheckIfOffBalanceSheetAmountToAdjust1NoNeedCopy(current_row As Integer, bmf_id As String, pcco As String) + On Error GoTo eh + Dim output As Boolean + output = False + Dim temp As String + temp = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_OFF_BALANCE_SHEET_AMOUNT_TO_ADJ_1 & CStr(current_row)).Value + + If (temp = "") Then + output = True + ElseIf (temp = "0") Then + paintYellow (Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_OFF_BALANCE_SHEET_AMOUNT_TO_ADJ_1 & CStr(current_row))) + output = True + ElseIf (checkIfAlreadyExistInBmfAdjustmentResult(bmf_id, pcco, current_row)) Then + paintRed (Worksheets(ADJUSTMENT_WORKSHEET).Range("AI" & CStr(current_row))) + paintRed (Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_OFF_BALANCE_SHEET_PCCO_1 & CStr(current_row))) + + output = True + End If + + + CheckIfOffBalanceSheetAmountToAdjust1NoNeedCopy = output + +Done: + Exit Function + +eh: + Debug.Print "CheckIfOffBalanceSheetAmountToAdjust1NoNeedCopy:Error: " & Err.Description + +End Function + +Function CheckIfAdjustmentSheetBmfIdValid(current_row As Integer) + On Error GoTo eh + Dim output As Boolean + output = False + Dim temp As String + temp = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_FINAL_BMF_ID & CStr(current_row)).Value + + If (temp <> "") Then + output = True + End If + + CheckIfAdjustmentSheetBmfIdValid = output + +Done: + Exit Function + +eh: + Debug.Print "CheckIfAdjustmentSheetBmfIdValid:Error: " & Err.Description + +End Function + +Function CheckIfOffBalanceSheetAmountToAdjust2NoNeedCopy(current_row As Integer, bmf_id As String, pcco As String) + On Error GoTo eh + Dim output As Boolean + output = False + Dim temp As String + temp = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_OFF_BALANCE_SHEET_AMOUNT_TO_ADJ_2 & CStr(current_row)).Value + + If (temp = "") Then + output = True + ElseIf (temp = "0") Then + paintYellow (Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_OFF_BALANCE_SHEET_AMOUNT_TO_ADJ_2 & CStr(current_row))) + output = True + ElseIf (checkIfAlreadyExistInBmfAdjustmentResult(bmf_id, pcco, current_row)) Then + paintRed (Worksheets(ADJUSTMENT_WORKSHEET).Range("AI" & CStr(current_row))) + paintRed (Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_OFF_BALANCE_SHEET_PCCO_2 & CStr(current_row))) + output = True + End If + + + CheckIfOffBalanceSheetAmountToAdjust2NoNeedCopy = output + +Done: + Exit Function + +eh: + Debug.Print "CheckIfOffBalanceSheetAmountToAdjust2NoNeedCopy:Error: " & Err.Description + +End Function + +Function CheckIfBalanceSheetAmountToAdjust1NoNeedCopy(current_row As Integer, bmf_id As String, pcco As String) + On Error GoTo eh + Dim output As Boolean + output = False + + Dim temp As String + + temp = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_BALANCE_SHEET_AMOUNT_TO_ADJ_1 & CStr(current_row)).Value + Debug.Print "CheckIfBalanceSheetAmountToAdjust1NoNeedCopy:" & temp = "0" + + If (temp = "") Then + output = True + ElseIf (temp = "0") Then + paintYellow (Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_BALANCE_SHEET_AMOUNT_TO_ADJ_1 & CStr(current_row))) + output = True + ElseIf (checkIfAlreadyExistInBmfAdjustmentResult(bmf_id, pcco, current_row)) Then + paintRed (Worksheets(ADJUSTMENT_WORKSHEET).Range("AI" & CStr(current_row))) + paintRed (Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_BALANCE_SHEET_PCCO_1 & CStr(current_row))) + output = True + End If + + CheckIfBalanceSheetAmountToAdjust1NoNeedCopy = output + +Done: + Exit Function + +eh: + Debug.Print "CheckIfBalanceSheetAmountToAdjust1NoNeedCopy:Error: " & Err.Description + +End Function + +Function CheckIfBalanceSheetAmountToAdjust2NoNeedCopy(current_row As Integer, bmf_id As String, pcco As String) + On Error GoTo eh + Dim output As Boolean + output = False + Dim temp As String + temp = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_BALANCE_SHEET_AMOUNT_TO_ADJ_2 & CStr(current_row)).Value + + If (temp = "") Then + output = True + ElseIf (temp = "0") Then + paintYellow (Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_BALANCE_SHEET_AMOUNT_TO_ADJ_2 & CStr(current_row))) + output = True + ElseIf (checkIfAlreadyExistInBmfAdjustmentResult(bmf_id, pcco, current_row)) Then + paintRed (Worksheets(ADJUSTMENT_WORKSHEET).Range("AI" & CStr(current_row))) + paintRed (Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_BALANCE_SHEET_PCCO_2 & CStr(current_row))) + output = True + End If + + + CheckIfBalanceSheetAmountToAdjust2NoNeedCopy = output + +Done: + Exit Function + +eh: + Debug.Print "CheckIfBalanceSheetAmountToAdjust2NoNeedCopy:Error: " & Err.Description + +End Function + +Function CheckIfBalanceSheetNa2Exist(current_row As Integer) + On Error GoTo eh + Dim output As Boolean + output = False + Dim temp As String + temp = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_BALANCE_SHEET_NA_2 & CStr(current_row)).Value + + If (temp <> "") Then + output = True + End If + + CheckIfBalanceSheetNa2Exist = output + +Done: + Exit Function + +eh: + Debug.Print "CheckIfBalanceSheetNa2Exist:Error: " & Err.Description + +End Function + +Function CheckIfBalanceSheetPcco2Exist(current_row As Integer) + On Error GoTo eh + + Dim output As Boolean + output = False + Dim temp As String + temp = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_BALANCE_SHEET_PCCO_2 & CStr(current_row)).Value + + If (temp <> "") Then + output = True + End If + + CheckIfBalanceSheetPcco2Exist = output + +Done: + Exit Function + +eh: + Debug.Print "CheckIfBalanceSheetPcco2Exist:Error: " & Err.Description + +End Function +Function CheckIfBalanceSheetPcec2Exist(current_row As Integer) + On Error GoTo eh + + Dim output As Boolean + output = False + Dim temp As String + temp = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_BALANCE_SHEET_PCEC_2 & CStr(current_row)).Value + + If (temp <> "") Then + output = True + End If + + CheckIfBalanceSheetPcco2Exist = output + +Done: + Exit Function + +eh: + Debug.Print "CheckIfBalanceSheetPcco2Exist:Error: " & Err.Description + +End Function + + +Function CheckIfBalanceSheetAmountToAdjust2Exist(current_row As Integer) + On Error GoTo eh + + Dim output As Boolean + output = False + Dim temp As String + temp = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_BALANCE_SHEET_AMOUNT_TO_ADJ_2 & CStr(current_row)).Value + + If (temp <> "") Then + output = True + End If + + CheckIfBalanceSheetAmountToAdjust2Exist = output + +Done: + Exit Function + +eh: + Debug.Print "CheckIfBalanceSheetAmountToAdjust2Exist:Error: " & Err.Description + +End Function + +Function isCurrentRowNeedToProcess(input_row As Integer) + On Error GoTo eh + + Dim output As Boolean + Dim cell_value As Currency + Dim input_cell As String + input_cell = GRANDTOTAL_COL & input_row + +Done: + isCurrentRowNeedToProcess = Not (IsEmpty(Worksheets(ADJUSTMENT_WORKSHEET).Range(input_cell).Value)) + Exit Function + +eh: + Debug.Print "isCurrentRowNeedToProcess:Error: " & Err.Description + +End Function + +Function getLastCheckRow(first_row As Integer) + On Error GoTo eh + getLastCheckRow = first_row + 10 + +Done: + Exit Function + +eh: + Debug.Print "getLastCheckRow:Error: " & Err.Description + +End Function + +Function checkAdjustmentSheetLastRow(current_row As Integer) + On Error GoTo eh + Dim output As Boolean + output = True + + Dim j As Integer + Dim temp As String + + For j = current_row To getLastCheckRow(current_row) + temp = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_FINAL_BMF_ID & CStr(current_row)).Value + If (temp <> "") Then + output = False + End If + Next j + + checkAdjustmentSheetLastRow = output + +Done: + Exit Function + +eh: + Debug.Print "checkAdjustmentSheetLastRow:Error: " & Err.Description + +End Function + +Function checkBmfAdjustmentSheetLastRow(current_row As Integer) + On Error GoTo eh + Dim output As Boolean + output = True + + Dim j As Integer + Dim temp As String + + For j = current_row To getLastCheckRow(current_row) + temp = Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_BMF_REFERENCE_ID & CStr(current_row)).Value + If (temp <> "") Then + output = False + End If + Next j + + checkBmfAdjustmentSheetLastRow = output + +Done: + Exit Function + +eh: + Debug.Print "checkBmfAdjustmentSheetLastRow:Error: " & Err.Description + +End Function + +Function checkIfAlreadyExistInBmfAdjustmentResult(adj_bmf_id As String, adj_pcco As String, adj_sheet_row As Integer) + On Error GoTo eh + + Dim i As Integer + Dim bmf_adjustment_sheet_last_row As Integer + Dim found As Boolean + found = False + Dim temp_value As String + Dim bmf_adj_bmf_id As String + Dim bmf_adj_pcco As String + Dim bmf_adj_pcec As String + + Application.ScreenUpdating = False + + + bmf_adjustment_sheet_last_row = getBMFAdjustmentResultListEnd(1) + + For i = 1 To bmf_adjustment_sheet_last_row + bmf_adj_bmf_id = Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_BMF_REFERENCE_ID & CStr(i)).Value + bmf_adj_pcco = Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PCCO & CStr(i)).Value + bmf_adj_pcec = Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PCEC & CStr(i)).Value + + ' debug.print bmf_adj_bmf_id + ' debug.print bmf_adj_pcco + ' debug.print adj_bmf_id + ' debug.print adj_pcco + ' debug.print bmf_adj_bmf_id = adj_bmf_id And bmf_adj_pcco = adj_pcco + + + If (bmf_adj_bmf_id = adj_bmf_id And bmf_adj_pcco = adj_pcco) Then + + ' Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range("B"&cstr(i)).value = Cstr(bmf_adj_bmf_id = adj_bmf_id) + ' Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range("B"&cstr(i)).value = Cstr(bmf_adj_pcco = adj_pcco) + + 'Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_BMF_REFERENCE_ID & CStr(i)).Interior.Color = RGB(214, 48, 49) + paintRed (Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_BMF_REFERENCE_ID & CStr(i))) + ' Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PCCO & CStr(i)).Interior.Color = RGB(214, 48, 49) + paintRed (Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PCCO & CStr(i))) + paintRed (Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PCEC & CStr(i))) + + ' adj_sheet_row + + + found = True + + Exit For + End If + Next i + + checkIfAlreadyExistInBmfAdjustmentResult = found + + Application.ScreenUpdating = True + +Done: + Exit Function + +eh: + Application.ScreenUpdating = True + + Debug.Print "checkIfAlreadyExistInBmfAdjustmentResult:Error: " & Err.Description + +End Function + +Function getBMFAdjustmentResultListEnd(start_row As Integer) + On Error GoTo eh + + Dim i As Integer + + Dim last_row As Boolean + Dim last_row_found As Boolean + last_row_found = False + last_row = True + current_row = start_row + + For i = start_row To 9999 + current_row = i + last_row_found = checkBmfAdjustmentSheetLastRow(current_row) + + If (last_row_found = True) Then + Exit For + End If + Next i + + getBMFAdjustmentResultListEnd = current_row - 1 + +Done: + Exit Function + +eh: + Debug.Print "getBMFAdjustmentResultListEnd:Error: " & Err.Description + +End Function + +Function getAdjustmentSheetListEnd(start_row As Integer) + On Error GoTo eh + + Dim i As Integer + + Dim last_row As Boolean + Dim last_row_found As Boolean + last_row_found = False + last_row = True + current_row = start_row + + For i = start_row To 9999 + current_row = i + last_row_found = checkAdjustmentSheetLastRow(current_row) + + If (last_row_found = True) Then + Exit For + End If + Next i + + getAdjustmentSheetListEnd = current_row - 1 + +Done: + Exit Function + +eh: + Debug.Print "getAdjustmentSheetListEnd:Error: " & Err.Description + +End Function + + +Sub resetBmfAdjustmentSheet() + init + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range("A4:BN9999").Clear + +End Sub + +Sub Main() + On Error GoTo eh + Dim need_to_copy As Boolean + + Dim adjustment_sheet_first_row As Integer + Dim adjustment_sheet_last_row As Integer + Dim adjustment_sheet_current_row As Integer + + Dim bmf_adjustment_sheet_last_row As Integer + Dim bmf_adjustment_sheet_current_row As Integer + + Dim temp_value As String + + adjustment_sheet_first_row = 7 + + init + ' MsgBox "helloworld" + adjustment_sheet_last_row = getAdjustmentSheetListEnd(adjustment_sheet_first_row) + Debug.Print adjustment_sheet_last_row + + For adjustment_sheet_current_row = adjustment_sheet_first_row To adjustment_sheet_last_row + Debug.Print "processing adjustment_sheet_current_row: " & adjustment_sheet_current_row + + ' if (CheckIfBalanceSheetAmountToAdjust2Exist(adjustment_sheet_current_row) and CheckIfBalanceSheetNa2Exist(adjustment_sheet_current_row) and CheckIfBalanceSheetPcco2Exist(adjustment_sheet_current_row)) then + If (CheckIfAdjustmentSheetBmfIdValid(adjustment_sheet_current_row)) Then + Debug.Print "processing row: " & adjustment_sheet_current_row + + Dim bmf_id As String + bmf_id = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_FINAL_BMF_ID & CStr(adjustment_sheet_current_row)).Value + + Dim bal_pcco_1 As String + bal_pcco_1 = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_BALANCE_SHEET_PCCO_1 & CStr(adjustment_sheet_current_row)).Value + + Dim bal_pcco_2 As String + bal_pcco_2 = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_BALANCE_SHEET_PCCO_2 & CStr(adjustment_sheet_current_row)).Value + + Dim off_bal_pcco_1 As String + off_bal_pcco_1 = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_OFF_BALANCE_SHEET_PCCO_1 & CStr(adjustment_sheet_current_row)).Value + + Dim off_bal_pcco_2 As String + off_bal_pcco_2 = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_OFF_BALANCE_SHEET_PCCO_2 & CStr(adjustment_sheet_current_row)).Value + + Dim bal_pcec_1 As String + bal_pcec_1 = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_BALANCE_SHEET_PCEC_1 & CStr(adjustment_sheet_current_row)).Value + + Dim bal_pcec_2 As String + bal_pcec_2 = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_BALANCE_SHEET_PCEC_2 & CStr(adjustment_sheet_current_row)).Value + + Dim off_bal_pcec_1 As String + off_bal_pcec_1 = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_OFF_BALANCE_SHEET_PCEC_1 & CStr(adjustment_sheet_current_row)).Value + + Dim off_bal_pcec_2 As String + off_bal_pcec_2 = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_OFF_BALANCE_SHEET_PCEC_2 & CStr(adjustment_sheet_current_row)).Value + + ' balance sheet 1 + ' check need to copy ? see amount to adjust <> 0 ? + If (CheckIfBalanceSheetAmountToAdjust1NoNeedCopy(adjustment_sheet_current_row, bmf_id, bal_pcco_1) = True) Then + ' do skip + Debug.Print "skip balance sheet 1" + Else + ' do copy + bmf_adjustment_sheet_last_row = getBMFAdjustmentResultListEnd(1) + bmf_adjustment_sheet_current_row = bmf_adjustment_sheet_last_row + 1 + Debug.Print "bmf_adjustment_sheet_current_row:" & bmf_adjustment_sheet_current_row + + temp_value = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_FINAL_BMF_ID & CStr(adjustment_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_BMF_REFERENCE_ID & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_REPORTING_ENTITY & CStr(bmf_adjustment_sheet_current_row)).Value = "14004" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_OPAQUE_REPORTING_ENTITY & CStr(bmf_adjustment_sheet_current_row)).Value = "N" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_INTERNAL_EXTERNAL_CODE & CStr(bmf_adjustment_sheet_current_row)).Value = "E" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_IFRS_NORM_FLAG & CStr(bmf_adjustment_sheet_current_row)).Value = "Y" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_FRENCH_GAAP_NORM_FLAG & CStr(bmf_adjustment_sheet_current_row)).Value = "Y" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PROCESS_IMPACTED_LIQ & CStr(bmf_adjustment_sheet_current_row)).Value = "1" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PROCESS_IMPACTED_STT & CStr(bmf_adjustment_sheet_current_row)).Value = "1" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PROCESS_IMPACTED_YLD & CStr(bmf_adjustment_sheet_current_row)).Value = "1" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_TYPE_CODE & CStr(bmf_adjustment_sheet_current_row)).Value = "01" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_ADJUSTMENT_TYPE & CStr(bmf_adjustment_sheet_current_row)).Value = "DQ" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_COMMENT & CStr(bmf_adjustment_sheet_current_row)).Value = "Unsettled bond adjustment for RWA purpose" + + + temp_value = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_BALANCE_SHEET_PCCO_1 & CStr(adjustment_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PCCO & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + + temp_value = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_BALANCE_SHEET_PCEC_1 & CStr(adjustment_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PCEC & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + + temp_value = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_BALANCE_SHEET_AMOUNT_TO_ADJ_1 & CStr(adjustment_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_ACCT_BALANCE & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_FUNT & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + + temp_value = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_BALANCE_SHEET_NA_1 & CStr(adjustment_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_LOCAL_OPERATIONAL_ACCOUNT & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value & " " & "15130" + + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range("A" & bmf_adjustment_sheet_current_row & ":" & "BN" & bmf_adjustment_sheet_current_row).NumberFormat = "@" + ' Selection.NumberFormat = RED_THOUSAND_SEP_NUMBER_FORMAT + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_ACCT_BALANCE & bmf_adjustment_sheet_current_row).NumberFormat = RED_THOUSAND_SEP_NUMBER_FORMAT + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_FUNT & bmf_adjustment_sheet_current_row).NumberFormat = RED_THOUSAND_SEP_NUMBER_FORMAT + + + + End If + + ' balance sheet 2 + ' check need to copy ? see amount to adjust <> 0 ? + Debug.Print bal_pcco_2 + If (CheckIfBalanceSheetAmountToAdjust2NoNeedCopy(adjustment_sheet_current_row, bmf_id, bal_pcco_2)) Then + ' do skip + Debug.Print "skip balance sheet 2" + Else + ' do copy + bmf_adjustment_sheet_last_row = getBMFAdjustmentResultListEnd(1) + bmf_adjustment_sheet_current_row = bmf_adjustment_sheet_last_row + 1 + temp_value = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_FINAL_BMF_ID & CStr(adjustment_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_BMF_REFERENCE_ID & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_REPORTING_ENTITY & CStr(bmf_adjustment_sheet_current_row)).Value = "14004" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_OPAQUE_REPORTING_ENTITY & CStr(bmf_adjustment_sheet_current_row)).Value = "N" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_INTERNAL_EXTERNAL_CODE & CStr(bmf_adjustment_sheet_current_row)).Value = "E" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_IFRS_NORM_FLAG & CStr(bmf_adjustment_sheet_current_row)).Value = "Y" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_FRENCH_GAAP_NORM_FLAG & CStr(bmf_adjustment_sheet_current_row)).Value = "Y" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PROCESS_IMPACTED_LIQ & CStr(bmf_adjustment_sheet_current_row)).Value = "1" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PROCESS_IMPACTED_STT & CStr(bmf_adjustment_sheet_current_row)).Value = "1" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PROCESS_IMPACTED_YLD & CStr(bmf_adjustment_sheet_current_row)).Value = "1" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_TYPE_CODE & CStr(bmf_adjustment_sheet_current_row)).Value = "01" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_ADJUSTMENT_TYPE & CStr(bmf_adjustment_sheet_current_row)).Value = "DQ" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_COMMENT & CStr(bmf_adjustment_sheet_current_row)).Value = "Unsettled bond adjustment for RWA purpose" + + + temp_value = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_BALANCE_SHEET_PCCO_2 & CStr(adjustment_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PCCO & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + + temp_value = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_BALANCE_SHEET_PCEC_2 & CStr(adjustment_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PCEC & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + + temp_value = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_BALANCE_SHEET_AMOUNT_TO_ADJ_2 & CStr(adjustment_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_ACCT_BALANCE & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_FUNT & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + + temp_value = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_BALANCE_SHEET_NA_2 & CStr(adjustment_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_LOCAL_OPERATIONAL_ACCOUNT & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value & " " & "15130" + + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range("A" & bmf_adjustment_sheet_current_row & ":" & "BN" & bmf_adjustment_sheet_current_row).NumberFormat = "@" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_ACCT_BALANCE & bmf_adjustment_sheet_current_row).NumberFormat = RED_THOUSAND_SEP_NUMBER_FORMAT + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_FUNT & bmf_adjustment_sheet_current_row).NumberFormat = RED_THOUSAND_SEP_NUMBER_FORMAT + + End If + + ' off-balance sheet 1 + ' check need to copy ? see amount to adjust <> 0 ? + If (CheckIfOffBalanceSheetAmountToAdjust1NoNeedCopy(adjustment_sheet_current_row, bmf_id, off_bal_pcco_1)) Then + ' do skip + Debug.Print "skip off-balance sheet 1" + Else + ' do copy + bmf_adjustment_sheet_last_row = getBMFAdjustmentResultListEnd(1) + bmf_adjustment_sheet_current_row = bmf_adjustment_sheet_last_row + 1 + temp_value = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_FINAL_BMF_ID & CStr(adjustment_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_BMF_REFERENCE_ID & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_REPORTING_ENTITY & CStr(bmf_adjustment_sheet_current_row)).Value = "14004" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_OPAQUE_REPORTING_ENTITY & CStr(bmf_adjustment_sheet_current_row)).Value = "N" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_INTERNAL_EXTERNAL_CODE & CStr(bmf_adjustment_sheet_current_row)).Value = "E" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_IFRS_NORM_FLAG & CStr(bmf_adjustment_sheet_current_row)).Value = "Y" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_FRENCH_GAAP_NORM_FLAG & CStr(bmf_adjustment_sheet_current_row)).Value = "Y" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PROCESS_IMPACTED_LIQ & CStr(bmf_adjustment_sheet_current_row)).Value = "1" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PROCESS_IMPACTED_STT & CStr(bmf_adjustment_sheet_current_row)).Value = "1" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PROCESS_IMPACTED_YLD & CStr(bmf_adjustment_sheet_current_row)).Value = "1" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_TYPE_CODE & CStr(bmf_adjustment_sheet_current_row)).Value = "01" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_ADJUSTMENT_TYPE & CStr(bmf_adjustment_sheet_current_row)).Value = "DQ" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_COMMENT & CStr(bmf_adjustment_sheet_current_row)).Value = "Unsettled bond adjustment for RWA purpose" + + + temp_value = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_OFF_BALANCE_SHEET_PCCO_1 & CStr(adjustment_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PCCO & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + + temp_value = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_OFF_BALANCE_SHEET_PCEC_1 & CStr(adjustment_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PCEC & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + + + temp_value = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_OFF_BALANCE_SHEET_AMOUNT_TO_ADJ_1 & CStr(adjustment_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_ACCT_BALANCE & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_FUNT & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + + temp_value = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_OFF_BALANCE_SHEET_NA_1 & CStr(adjustment_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_LOCAL_OPERATIONAL_ACCOUNT & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value & " " & "15130" + + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range("A" & bmf_adjustment_sheet_current_row & ":" & "BN" & bmf_adjustment_sheet_current_row).NumberFormat = "@" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_ACCT_BALANCE & bmf_adjustment_sheet_current_row).NumberFormat = RED_THOUSAND_SEP_NUMBER_FORMAT + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_FUNT & bmf_adjustment_sheet_current_row).NumberFormat = RED_THOUSAND_SEP_NUMBER_FORMAT + + End If + + ' off-balance sheet 2 + ' check need to copy ? see amount to adjust <> 0 ? + If (CheckIfOffBalanceSheetAmountToAdjust2NoNeedCopy(adjustment_sheet_current_row, bmf_id, off_bal_pcco_2)) Then + ' do skip + Debug.Print "skip off-balance sheet 2" + Else + ' do copy + bmf_adjustment_sheet_last_row = getBMFAdjustmentResultListEnd(1) + bmf_adjustment_sheet_current_row = bmf_adjustment_sheet_last_row + 1 + temp_value = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_FINAL_BMF_ID & CStr(adjustment_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_BMF_REFERENCE_ID & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_REPORTING_ENTITY & CStr(bmf_adjustment_sheet_current_row)).Value = "14004" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_OPAQUE_REPORTING_ENTITY & CStr(bmf_adjustment_sheet_current_row)).Value = "N" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_INTERNAL_EXTERNAL_CODE & CStr(bmf_adjustment_sheet_current_row)).Value = "E" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_IFRS_NORM_FLAG & CStr(bmf_adjustment_sheet_current_row)).Value = "Y" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_FRENCH_GAAP_NORM_FLAG & CStr(bmf_adjustment_sheet_current_row)).Value = "Y" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PROCESS_IMPACTED_LIQ & CStr(bmf_adjustment_sheet_current_row)).Value = "1" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PROCESS_IMPACTED_STT & CStr(bmf_adjustment_sheet_current_row)).Value = "1" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PROCESS_IMPACTED_YLD & CStr(bmf_adjustment_sheet_current_row)).Value = "1" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_TYPE_CODE & CStr(bmf_adjustment_sheet_current_row)).Value = "01" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_ADJUSTMENT_TYPE & CStr(bmf_adjustment_sheet_current_row)).Value = "DQ" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_COMMENT & CStr(bmf_adjustment_sheet_current_row)).Value = "Unsettled bond adjustment for RWA purpose" + + temp_value = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_OFF_BALANCE_SHEET_PCCO_2 & CStr(adjustment_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PCCO & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + + temp_value = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_OFF_BALANCE_SHEET_PCEC_2 & CStr(adjustment_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PCEC & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + + + temp_value = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_OFF_BALANCE_SHEET_AMOUNT_TO_ADJ_2 & CStr(adjustment_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_ACCT_BALANCE & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_FUNT & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + + temp_value = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_OFF_BALANCE_SHEET_NA_2 & CStr(adjustment_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_LOCAL_OPERATIONAL_ACCOUNT & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value & " " & "15130" + + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range("A" & bmf_adjustment_sheet_current_row & ":" & "BN" & bmf_adjustment_sheet_current_row).NumberFormat = "@" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_ACCT_BALANCE & bmf_adjustment_sheet_current_row).NumberFormat = RED_THOUSAND_SEP_NUMBER_FORMAT + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_FUNT & bmf_adjustment_sheet_current_row).NumberFormat = RED_THOUSAND_SEP_NUMBER_FORMAT + + End If + + Else + Debug.Print adjustment_sheet_current_row & " skipping copy as bmfid is empty" + End If + + + Next adjustment_sheet_current_row + +Done: + Exit Sub + +eh: + Debug.Print "helloworld:Error: " & Err.Description + +End Sub diff --git a/task3/_original/Copy and paste requirement.docx b/task3/_original/Copy and paste requirement.docx new file mode 100644 index 0000000..57f062f Binary files /dev/null and b/task3/_original/Copy and paste requirement.docx differ diff --git a/task3/delivery1/Copy and Paste 2.xlsm b/task3/delivery1/Copy and Paste 2.xlsm new file mode 100644 index 0000000..dfb29c4 Binary files /dev/null and b/task3/delivery1/Copy and Paste 2.xlsm differ diff --git a/task3/delivery1/Copy and Paste vba.txt b/task3/delivery1/Copy and Paste vba.txt new file mode 100644 index 0000000..97206fd --- /dev/null +++ b/task3/delivery1/Copy and Paste vba.txt @@ -0,0 +1,828 @@ +' change log: + +Option Explicit + +Dim first_row As Integer +Dim current_row As Integer +Dim last_check_row As Integer + +Dim ADJUSTMENT_WORKSHEET As String +Dim BMF_ADJUSTMENT_WORKSHEET As String + +' Raw Data BALANCE_SHEET +Dim COL_BALANCE_SHEET_NA_1 As String +Dim COL_BALANCE_SHEET_PCCO_1 As String +Dim COL_BALANCE_SHEET_PCEC_1 As String +Dim COL_BALANCE_SHEET_AMOUNT_TO_ADJ_1 As String + +Dim COL_BALANCE_SHEET_NA_2 As String +Dim COL_BALANCE_SHEET_PCCO_2 As String +Dim COL_BALANCE_SHEET_PCEC_2 As String +Dim COL_BALANCE_SHEET_AMOUNT_TO_ADJ_2 As String + +' Raw Data OFF_BALANCE_SHEET +Dim COL_OFF_BALANCE_SHEET_NA_1 As String +Dim COL_OFF_BALANCE_SHEET_PCCO_1 As String +Dim COL_OFF_BALANCE_SHEET_PCEC_1 As String +Dim COL_OFF_BALANCE_SHEET_AMOUNT_TO_ADJ_1 As String + +Dim COL_OFF_BALANCE_SHEET_NA_2 As String +Dim COL_OFF_BALANCE_SHEET_PCCO_2 As String +Dim COL_OFF_BALANCE_SHEET_PCEC_2 As String +Dim COL_OFF_BALANCE_SHEET_AMOUNT_TO_ADJ_2 As String + +Dim COL_FINAL_BMF_ID As String + +'BMF 1690 2690 +Dim COL_BMF16902690_SHEET_BMF_REFERENCE_ID As String 'Column C +Dim COL_BMF16902690_SHEET_PCCO_CODE As String 'Column E +Dim COL_BMF16902690_SHEET_PCEC_CODE As String 'Column F +Dim COL_BMF16902690_SHEET_NA As String 'Column H +Dim COL_BMF16902690_SHEET_AMOUNT_TO_ADJ As String 'Column M + +'BMF Adjustment +Dim COL_BMF_ADJUSTMENT_SHEET_BMF_REFERENCE_ID As String 'Column A +Dim COL_BMF_ADJUSTMENT_SHEET_LINE_TYPE As String 'Column B +Dim COL_BMF_ADJUSTMENT_SHEET_ADJUSTMENT_TYPE As String 'Column D +Dim COL_BMF_ADJUSTMENT_SHEET_COMMENT As String 'Column E +Dim COL_BMF_ADJUSTMENT_SHEET_REPORTING_ENTITY As String 'Column F +Dim COL_BMF_ADJUSTMENT_SHEET_PCCO As String 'Column G +Dim COL_BMF_ADJUSTMENT_SHEET_PCEC As String 'Column H +Dim COL_BMF_ADJUSTMENT_SHEET_ACCOUNTING_BALANCE_CURRENCY As String 'Column I +Dim COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_ACCT_BALANCE As String 'Column J +Dim COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_FUNT As String 'Column K +Dim COL_BMF_ADJUSTMENT_SHEET_INTERNAL_EXTERNAL_CODE As String 'Column M +Dim COL_BMF_ADJUSTMENT_SHEET_IFRS_NORM_FLAG As String 'Column N +Dim COL_BMF_ADJUSTMENT_SHEET_FRENCH_GAAP_NORM_FLAG As String 'Column O +Dim COL_BMF_ADJUSTMENT_SHEET_PROCESS_IMPACTED_LIQ As String 'Column P +Dim COL_BMF_ADJUSTMENT_SHEET_PROCESS_IMPACTED_STT As String 'Column Q +Dim COL_BMF_ADJUSTMENT_SHEET_PROCESS_IMPACTED_YLD As String 'Column R +Dim COL_BMF_ADJUSTMENT_SHEET_AMOUNT_TYPE_CODE As String 'Column S +Dim COL_BMF_ADJUSTMENT_SHEET_OPAQUE_REPORTING_ENTITY As String 'Column BJ +Dim COL_BMF_ADJUSTMENT_SHEET_LOCAL_OPERATIONAL_ACCOUNT As String 'Column BN + +Dim RED_THOUSAND_SEP_NUMBER_FORMAT As String + +Sub init() + On Error GoTo eh + + RED_THOUSAND_SEP_NUMBER_FORMAT = "#,##0_);[Red](#,##0)" + + ' HEADER_ROW = 6 + first_row = 6 + current_row = first_row + last_check_row = 9999 + + ' ADJUSTMENT_SHEET + ADJUSTMENT_WORKSHEET = "Raw Data" + + ' BALANCE_SHEET + COL_BALANCE_SHEET_NA_1 = "Q" + COL_BALANCE_SHEET_PCCO_1 = "R" + COL_BALANCE_SHEET_PCEC_1 = "S" + COL_BALANCE_SHEET_AMOUNT_TO_ADJ_1 = "T" + + COL_BALANCE_SHEET_NA_2 = "U" + COL_BALANCE_SHEET_PCCO_2 = "V" + COL_BALANCE_SHEET_PCEC_2 = "W" + COL_BALANCE_SHEET_AMOUNT_TO_ADJ_2 = "X" + + ' OFF_BALANCE_SHEET + COL_OFF_BALANCE_SHEET_NA_1 = "Z" + COL_OFF_BALANCE_SHEET_PCCO_1 = "AA" + COL_OFF_BALANCE_SHEET_PCEC_1 = "AB" + COL_OFF_BALANCE_SHEET_AMOUNT_TO_ADJ_1 = "AC" + + COL_OFF_BALANCE_SHEET_NA_2 = "AD" + COL_OFF_BALANCE_SHEET_PCCO_2 = "AE" + COL_OFF_BALANCE_SHEET_PCEC_2 = "AF" + COL_OFF_BALANCE_SHEET_AMOUNT_TO_ADJ_2 = "AG" + + COL_FINAL_BMF_ID = "AM" + + ' BMF_ADJUSTMENT_SHEET + BMF_ADJUSTMENT_WORKSHEET = "BMF Adjustment" + COL_BMF_ADJUSTMENT_SHEET_BMF_REFERENCE_ID = "A" + COL_BMF_ADJUSTMENT_SHEET_LINE_TYPE = "B" + COL_BMF_ADJUSTMENT_SHEET_ADJUSTMENT_TYPE = "D" + COL_BMF_ADJUSTMENT_SHEET_COMMENT = "E" + COL_BMF_ADJUSTMENT_SHEET_REPORTING_ENTITY = "F" + COL_BMF_ADJUSTMENT_SHEET_PCCO = "G" + COL_BMF_ADJUSTMENT_SHEET_PCEC = "H" + COL_BMF_ADJUSTMENT_SHEET_ACCOUNTING_BALANCE_CURRENCY = "I" + COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_ACCT_BALANCE = "J" + COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_FUNT = "K" + COL_BMF_ADJUSTMENT_SHEET_INTERNAL_EXTERNAL_CODE = "M" + COL_BMF_ADJUSTMENT_SHEET_IFRS_NORM_FLAG = "N" + COL_BMF_ADJUSTMENT_SHEET_FRENCH_GAAP_NORM_FLAG = "O" + COL_BMF_ADJUSTMENT_SHEET_PROCESS_IMPACTED_LIQ = "P" + COL_BMF_ADJUSTMENT_SHEET_PROCESS_IMPACTED_STT = "Q" + COL_BMF_ADJUSTMENT_SHEET_PROCESS_IMPACTED_YLD = "R" + COL_BMF_ADJUSTMENT_SHEET_AMOUNT_TYPE_CODE = "S" + COL_BMF_ADJUSTMENT_SHEET_OPAQUE_REPORTING_ENTITY = "BJ" + COL_BMF_ADJUSTMENT_SHEET_LOCAL_OPERATIONAL_ACCOUNT = "BN" + + +Done: + Debug.Print "init done" + Exit Sub + +eh: + Debug.Print "init:Error: " & Err.Description + + +End Sub + +Function paintYellow(cell As Variant) + cell.Interior.Color = RGB(246, 229, 141) + paintYellow = True +End Function + +Function paintRed(cell As Variant) + cell.Interior.Color = RGB(255, 121, 121) + paintRed = True +End Function + +Function CheckIfOffBalanceSheetAmountToAdjust1NoNeedCopy(current_row As Integer, bmf_id As String, pcco As String) + On Error GoTo eh + Dim output As Boolean + output = False + Dim temp As String + temp = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_OFF_BALANCE_SHEET_AMOUNT_TO_ADJ_1 & CStr(current_row)).Value + + If (temp = "") Then + output = True + ElseIf (temp = "0") Then + paintYellow (Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_OFF_BALANCE_SHEET_AMOUNT_TO_ADJ_1 & CStr(current_row))) + output = True + ElseIf (checkIfAlreadyExistInBmfAdjustmentResult(bmf_id, pcco, current_row)) Then + paintRed (Worksheets(ADJUSTMENT_WORKSHEET).Range("AI" & CStr(current_row))) + paintRed (Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_OFF_BALANCE_SHEET_PCCO_1 & CStr(current_row))) + + output = True + End If + + + CheckIfOffBalanceSheetAmountToAdjust1NoNeedCopy = output + +Done: + Exit Function + +eh: + Debug.Print "CheckIfOffBalanceSheetAmountToAdjust1NoNeedCopy:Error: " & Err.Description + +End Function + +Function CheckIfAdjustmentSheetBmfIdValid(current_row As Integer) + On Error GoTo eh + Dim output As Boolean + output = False + Dim temp As String + temp = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_FINAL_BMF_ID & CStr(current_row)).Value + + If (temp <> "") Then + output = True + End If + + CheckIfAdjustmentSheetBmfIdValid = output + +Done: + Exit Function + +eh: + Debug.Print "CheckIfAdjustmentSheetBmfIdValid:Error: " & Err.Description + +End Function + +Function CheckIfOffBalanceSheetAmountToAdjust2NoNeedCopy(current_row As Integer, bmf_id As String, pcco As String) + On Error GoTo eh + Dim output As Boolean + output = False + Dim temp As String + temp = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_OFF_BALANCE_SHEET_AMOUNT_TO_ADJ_2 & CStr(current_row)).Value + + If (temp = "") Then + output = True + ElseIf (temp = "0") Then + paintYellow (Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_OFF_BALANCE_SHEET_AMOUNT_TO_ADJ_2 & CStr(current_row))) + output = True + ElseIf (checkIfAlreadyExistInBmfAdjustmentResult(bmf_id, pcco, current_row)) Then + paintRed (Worksheets(ADJUSTMENT_WORKSHEET).Range("AI" & CStr(current_row))) + paintRed (Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_OFF_BALANCE_SHEET_PCCO_2 & CStr(current_row))) + output = True + End If + + + CheckIfOffBalanceSheetAmountToAdjust2NoNeedCopy = output + +Done: + Exit Function + +eh: + Debug.Print "CheckIfOffBalanceSheetAmountToAdjust2NoNeedCopy:Error: " & Err.Description + +End Function + +Function CheckIfBalanceSheetAmountToAdjust1NoNeedCopy(current_row As Integer, bmf_id As String, pcco As String) + On Error GoTo eh + Dim output As Boolean + output = False + + Dim temp As String + + temp = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_BALANCE_SHEET_AMOUNT_TO_ADJ_1 & CStr(current_row)).Value + Debug.Print "CheckIfBalanceSheetAmountToAdjust1NoNeedCopy:" & temp = "0" + + If (temp = "") Then + output = True + ElseIf (temp = "0") Then + paintYellow (Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_BALANCE_SHEET_AMOUNT_TO_ADJ_1 & CStr(current_row))) + output = True + ElseIf (checkIfAlreadyExistInBmfAdjustmentResult(bmf_id, pcco, current_row)) Then + paintRed (Worksheets(ADJUSTMENT_WORKSHEET).Range("AI" & CStr(current_row))) + paintRed (Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_BALANCE_SHEET_PCCO_1 & CStr(current_row))) + output = True + End If + + CheckIfBalanceSheetAmountToAdjust1NoNeedCopy = output + +Done: + Exit Function + +eh: + Debug.Print "CheckIfBalanceSheetAmountToAdjust1NoNeedCopy:Error: " & Err.Description + +End Function + +Function CheckIfBalanceSheetAmountToAdjust2NoNeedCopy(current_row As Integer, bmf_id As String, pcco As String) + On Error GoTo eh + Dim output As Boolean + output = False + Dim temp As String + temp = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_BALANCE_SHEET_AMOUNT_TO_ADJ_2 & CStr(current_row)).Value + + If (temp = "") Then + output = True + ElseIf (temp = "0") Then + paintYellow (Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_BALANCE_SHEET_AMOUNT_TO_ADJ_2 & CStr(current_row))) + output = True + ElseIf (checkIfAlreadyExistInBmfAdjustmentResult(bmf_id, pcco, current_row)) Then + paintRed (Worksheets(ADJUSTMENT_WORKSHEET).Range("AI" & CStr(current_row))) + paintRed (Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_BALANCE_SHEET_PCCO_2 & CStr(current_row))) + output = True + End If + + + CheckIfBalanceSheetAmountToAdjust2NoNeedCopy = output + +Done: + Exit Function + +eh: + Debug.Print "CheckIfBalanceSheetAmountToAdjust2NoNeedCopy:Error: " & Err.Description + +End Function + +Function CheckIfBalanceSheetNa2Exist(current_row As Integer) + On Error GoTo eh + Dim output As Boolean + output = False + Dim temp As String + temp = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_BALANCE_SHEET_NA_2 & CStr(current_row)).Value + + If (temp <> "") Then + output = True + End If + + CheckIfBalanceSheetNa2Exist = output + +Done: + Exit Function + +eh: + Debug.Print "CheckIfBalanceSheetNa2Exist:Error: " & Err.Description + +End Function + +Function CheckIfBalanceSheetPcco2Exist(current_row As Integer) + On Error GoTo eh + + Dim output As Boolean + output = False + Dim temp As String + temp = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_BALANCE_SHEET_PCCO_2 & CStr(current_row)).Value + + If (temp <> "") Then + output = True + End If + + CheckIfBalanceSheetPcco2Exist = output + +Done: + Exit Function + +eh: + Debug.Print "CheckIfBalanceSheetPcco2Exist:Error: " & Err.Description + +End Function +Function CheckIfBalanceSheetPcec2Exist(current_row As Integer) + On Error GoTo eh + + Dim output As Boolean + output = False + Dim temp As String + temp = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_BALANCE_SHEET_PCEC_2 & CStr(current_row)).Value + + If (temp <> "") Then + output = True + End If + + CheckIfBalanceSheetPcco2Exist = output + +Done: + Exit Function + +eh: + Debug.Print "CheckIfBalanceSheetPcco2Exist:Error: " & Err.Description + +End Function + + +Function CheckIfBalanceSheetAmountToAdjust2Exist(current_row As Integer) + On Error GoTo eh + + Dim output As Boolean + output = False + Dim temp As String + temp = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_BALANCE_SHEET_AMOUNT_TO_ADJ_2 & CStr(current_row)).Value + + If (temp <> "") Then + output = True + End If + + CheckIfBalanceSheetAmountToAdjust2Exist = output + +Done: + Exit Function + +eh: + Debug.Print "CheckIfBalanceSheetAmountToAdjust2Exist:Error: " & Err.Description + +End Function + +Function isCurrentRowNeedToProcess(input_row As Integer) + On Error GoTo eh + + Dim output As Boolean + Dim cell_value As Currency + Dim input_cell As String + input_cell = GRANDTOTAL_COL & input_row + +Done: + isCurrentRowNeedToProcess = Not (IsEmpty(Worksheets(ADJUSTMENT_WORKSHEET).Range(input_cell).Value)) + Exit Function + +eh: + Debug.Print "isCurrentRowNeedToProcess:Error: " & Err.Description + +End Function + +Function getLastCheckRow(first_row As Integer) + On Error GoTo eh + getLastCheckRow = first_row + 10 + +Done: + Exit Function + +eh: + Debug.Print "getLastCheckRow:Error: " & Err.Description + +End Function + +Function checkAdjustmentSheetLastRow(current_row As Integer) + On Error GoTo eh + Dim output As Boolean + output = True + + Dim j As Integer + Dim temp As String + + For j = current_row To getLastCheckRow(current_row) + temp = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_FINAL_BMF_ID & CStr(current_row)).Value + If (temp <> "") Then + output = False + End If + Next j + + checkAdjustmentSheetLastRow = output + +Done: + Exit Function + +eh: + Debug.Print "checkAdjustmentSheetLastRow:Error: " & Err.Description + +End Function + +Function checkBmfAdjustmentSheetLastRow(current_row As Integer) + On Error GoTo eh + Dim output As Boolean + output = True + + Dim j As Integer + Dim temp As String + + For j = current_row To getLastCheckRow(current_row) + temp = Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_BMF_REFERENCE_ID & CStr(current_row)).Value + If (temp <> "") Then + output = False + End If + Next j + + checkBmfAdjustmentSheetLastRow = output + +Done: + Exit Function + +eh: + Debug.Print "checkBmfAdjustmentSheetLastRow:Error: " & Err.Description + +End Function + +Function checkIfAlreadyExistInBmfAdjustmentResult(adj_bmf_id As String, adj_pcco As String, adj_sheet_row As Integer) + On Error GoTo eh + + Dim i As Integer + Dim bmf_adjustment_sheet_last_row As Integer + Dim found As Boolean + found = False + Dim temp_value As String + Dim bmf_adj_bmf_id As String + Dim bmf_adj_pcco As String + Dim bmf_adj_pcec As String + + Application.ScreenUpdating = False + + + bmf_adjustment_sheet_last_row = getBMFAdjustmentResultListEnd(1) + + For i = 1 To bmf_adjustment_sheet_last_row + bmf_adj_bmf_id = Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_BMF_REFERENCE_ID & CStr(i)).Value + bmf_adj_pcco = Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PCCO & CStr(i)).Value + bmf_adj_pcec = Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PCEC & CStr(i)).Value + + ' debug.print bmf_adj_bmf_id + ' debug.print bmf_adj_pcco + ' debug.print adj_bmf_id + ' debug.print adj_pcco + ' debug.print bmf_adj_bmf_id = adj_bmf_id And bmf_adj_pcco = adj_pcco + + + If (bmf_adj_bmf_id = adj_bmf_id And bmf_adj_pcco = adj_pcco) Then + + ' Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range("B"&cstr(i)).value = Cstr(bmf_adj_bmf_id = adj_bmf_id) + ' Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range("B"&cstr(i)).value = Cstr(bmf_adj_pcco = adj_pcco) + + 'Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_BMF_REFERENCE_ID & CStr(i)).Interior.Color = RGB(214, 48, 49) + paintRed (Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_BMF_REFERENCE_ID & CStr(i))) + ' Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PCCO & CStr(i)).Interior.Color = RGB(214, 48, 49) + paintRed (Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PCCO & CStr(i))) + paintRed (Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PCEC & CStr(i))) + + ' adj_sheet_row + + + found = True + + Exit For + End If + Next i + + checkIfAlreadyExistInBmfAdjustmentResult = found + + Application.ScreenUpdating = True + +Done: + Exit Function + +eh: + Application.ScreenUpdating = True + + Debug.Print "checkIfAlreadyExistInBmfAdjustmentResult:Error: " & Err.Description + +End Function + +Function getBMFAdjustmentResultListEnd(start_row As Integer) + On Error GoTo eh + + Dim i As Integer + + Dim last_row As Boolean + Dim last_row_found As Boolean + last_row_found = False + last_row = True + current_row = start_row + + For i = start_row To 9999 + current_row = i + last_row_found = checkBmfAdjustmentSheetLastRow(current_row) + + If (last_row_found = True) Then + Exit For + End If + Next i + + getBMFAdjustmentResultListEnd = current_row - 1 + +Done: + Exit Function + +eh: + Debug.Print "getBMFAdjustmentResultListEnd:Error: " & Err.Description + +End Function + +Function getAdjustmentSheetListEnd(start_row As Integer) + On Error GoTo eh + + Dim i As Integer + + Dim last_row As Boolean + Dim last_row_found As Boolean + last_row_found = False + last_row = True + current_row = start_row + + For i = start_row To 9999 + current_row = i + last_row_found = checkAdjustmentSheetLastRow(current_row) + + If (last_row_found = True) Then + Exit For + End If + Next i + + getAdjustmentSheetListEnd = current_row - 1 + +Done: + Exit Function + +eh: + Debug.Print "getAdjustmentSheetListEnd:Error: " & Err.Description + +End Function + + +Sub resetBmfAdjustmentSheet() + init + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range("A4:BN9999").Clear + +End Sub + +Sub Main() + On Error GoTo eh + Dim need_to_copy As Boolean + + Dim adjustment_sheet_first_row As Integer + Dim adjustment_sheet_last_row As Integer + Dim adjustment_sheet_current_row As Integer + + Dim bmf_adjustment_sheet_last_row As Integer + Dim bmf_adjustment_sheet_current_row As Integer + + Dim temp_value As String + + adjustment_sheet_first_row = 7 + + init + ' MsgBox "helloworld" + adjustment_sheet_last_row = getAdjustmentSheetListEnd(adjustment_sheet_first_row) + Debug.Print adjustment_sheet_last_row + + For adjustment_sheet_current_row = adjustment_sheet_first_row To adjustment_sheet_last_row + Debug.Print "processing adjustment_sheet_current_row: " & adjustment_sheet_current_row + + ' if (CheckIfBalanceSheetAmountToAdjust2Exist(adjustment_sheet_current_row) and CheckIfBalanceSheetNa2Exist(adjustment_sheet_current_row) and CheckIfBalanceSheetPcco2Exist(adjustment_sheet_current_row)) then + If (CheckIfAdjustmentSheetBmfIdValid(adjustment_sheet_current_row)) Then + Debug.Print "processing row: " & adjustment_sheet_current_row + + Dim bmf_id As String + bmf_id = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_FINAL_BMF_ID & CStr(adjustment_sheet_current_row)).Value + + Dim bal_pcco_1 As String + bal_pcco_1 = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_BALANCE_SHEET_PCCO_1 & CStr(adjustment_sheet_current_row)).Value + + Dim bal_pcco_2 As String + bal_pcco_2 = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_BALANCE_SHEET_PCCO_2 & CStr(adjustment_sheet_current_row)).Value + + Dim off_bal_pcco_1 As String + off_bal_pcco_1 = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_OFF_BALANCE_SHEET_PCCO_1 & CStr(adjustment_sheet_current_row)).Value + + Dim off_bal_pcco_2 As String + off_bal_pcco_2 = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_OFF_BALANCE_SHEET_PCCO_2 & CStr(adjustment_sheet_current_row)).Value + + Dim bal_pcec_1 As String + bal_pcec_1 = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_BALANCE_SHEET_PCEC_1 & CStr(adjustment_sheet_current_row)).Value + + Dim bal_pcec_2 As String + bal_pcec_2 = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_BALANCE_SHEET_PCEC_2 & CStr(adjustment_sheet_current_row)).Value + + Dim off_bal_pcec_1 As String + off_bal_pcec_1 = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_OFF_BALANCE_SHEET_PCEC_1 & CStr(adjustment_sheet_current_row)).Value + + Dim off_bal_pcec_2 As String + off_bal_pcec_2 = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_OFF_BALANCE_SHEET_PCEC_2 & CStr(adjustment_sheet_current_row)).Value + + ' balance sheet 1 + ' check need to copy ? see amount to adjust <> 0 ? + If (CheckIfBalanceSheetAmountToAdjust1NoNeedCopy(adjustment_sheet_current_row, bmf_id, bal_pcco_1) = True) Then + ' do skip + Debug.Print "skip balance sheet 1" + Else + ' do copy + bmf_adjustment_sheet_last_row = getBMFAdjustmentResultListEnd(1) + bmf_adjustment_sheet_current_row = bmf_adjustment_sheet_last_row + 1 + Debug.Print "bmf_adjustment_sheet_current_row:" & bmf_adjustment_sheet_current_row + + temp_value = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_FINAL_BMF_ID & CStr(adjustment_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_BMF_REFERENCE_ID & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_REPORTING_ENTITY & CStr(bmf_adjustment_sheet_current_row)).Value = "14004" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_OPAQUE_REPORTING_ENTITY & CStr(bmf_adjustment_sheet_current_row)).Value = "N" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_INTERNAL_EXTERNAL_CODE & CStr(bmf_adjustment_sheet_current_row)).Value = "E" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_IFRS_NORM_FLAG & CStr(bmf_adjustment_sheet_current_row)).Value = "Y" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_FRENCH_GAAP_NORM_FLAG & CStr(bmf_adjustment_sheet_current_row)).Value = "Y" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PROCESS_IMPACTED_LIQ & CStr(bmf_adjustment_sheet_current_row)).Value = "1" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PROCESS_IMPACTED_STT & CStr(bmf_adjustment_sheet_current_row)).Value = "1" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PROCESS_IMPACTED_YLD & CStr(bmf_adjustment_sheet_current_row)).Value = "1" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_TYPE_CODE & CStr(bmf_adjustment_sheet_current_row)).Value = "01" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_ADJUSTMENT_TYPE & CStr(bmf_adjustment_sheet_current_row)).Value = "DQ" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_COMMENT & CStr(bmf_adjustment_sheet_current_row)).Value = "Unsettled bond adjustment for RWA purpose" + + + temp_value = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_BALANCE_SHEET_PCCO_1 & CStr(adjustment_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PCCO & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + + temp_value = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_BALANCE_SHEET_PCEC_1 & CStr(adjustment_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PCEC & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + + temp_value = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_BALANCE_SHEET_AMOUNT_TO_ADJ_1 & CStr(adjustment_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_ACCT_BALANCE & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_FUNT & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + + temp_value = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_BALANCE_SHEET_NA_1 & CStr(adjustment_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_LOCAL_OPERATIONAL_ACCOUNT & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value & " " & "15130" + + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range("A" & bmf_adjustment_sheet_current_row & ":" & "BN" & bmf_adjustment_sheet_current_row).NumberFormat = "@" + ' Selection.NumberFormat = RED_THOUSAND_SEP_NUMBER_FORMAT + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_ACCT_BALANCE & bmf_adjustment_sheet_current_row).NumberFormat = RED_THOUSAND_SEP_NUMBER_FORMAT + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_FUNT & bmf_adjustment_sheet_current_row).NumberFormat = RED_THOUSAND_SEP_NUMBER_FORMAT + + + + End If + + ' balance sheet 2 + ' check need to copy ? see amount to adjust <> 0 ? + Debug.Print bal_pcco_2 + If (CheckIfBalanceSheetAmountToAdjust2NoNeedCopy(adjustment_sheet_current_row, bmf_id, bal_pcco_2)) Then + ' do skip + Debug.Print "skip balance sheet 2" + Else + ' do copy + bmf_adjustment_sheet_last_row = getBMFAdjustmentResultListEnd(1) + bmf_adjustment_sheet_current_row = bmf_adjustment_sheet_last_row + 1 + temp_value = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_FINAL_BMF_ID & CStr(adjustment_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_BMF_REFERENCE_ID & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_REPORTING_ENTITY & CStr(bmf_adjustment_sheet_current_row)).Value = "14004" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_OPAQUE_REPORTING_ENTITY & CStr(bmf_adjustment_sheet_current_row)).Value = "N" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_INTERNAL_EXTERNAL_CODE & CStr(bmf_adjustment_sheet_current_row)).Value = "E" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_IFRS_NORM_FLAG & CStr(bmf_adjustment_sheet_current_row)).Value = "Y" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_FRENCH_GAAP_NORM_FLAG & CStr(bmf_adjustment_sheet_current_row)).Value = "Y" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PROCESS_IMPACTED_LIQ & CStr(bmf_adjustment_sheet_current_row)).Value = "1" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PROCESS_IMPACTED_STT & CStr(bmf_adjustment_sheet_current_row)).Value = "1" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PROCESS_IMPACTED_YLD & CStr(bmf_adjustment_sheet_current_row)).Value = "1" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_TYPE_CODE & CStr(bmf_adjustment_sheet_current_row)).Value = "01" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_ADJUSTMENT_TYPE & CStr(bmf_adjustment_sheet_current_row)).Value = "DQ" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_COMMENT & CStr(bmf_adjustment_sheet_current_row)).Value = "Unsettled bond adjustment for RWA purpose" + + + temp_value = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_BALANCE_SHEET_PCCO_2 & CStr(adjustment_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PCCO & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + + temp_value = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_BALANCE_SHEET_PCEC_2 & CStr(adjustment_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PCEC & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + + temp_value = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_BALANCE_SHEET_AMOUNT_TO_ADJ_2 & CStr(adjustment_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_ACCT_BALANCE & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_FUNT & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + + temp_value = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_BALANCE_SHEET_NA_2 & CStr(adjustment_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_LOCAL_OPERATIONAL_ACCOUNT & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value & " " & "15130" + + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range("A" & bmf_adjustment_sheet_current_row & ":" & "BN" & bmf_adjustment_sheet_current_row).NumberFormat = "@" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_ACCT_BALANCE & bmf_adjustment_sheet_current_row).NumberFormat = RED_THOUSAND_SEP_NUMBER_FORMAT + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_FUNT & bmf_adjustment_sheet_current_row).NumberFormat = RED_THOUSAND_SEP_NUMBER_FORMAT + + End If + + ' off-balance sheet 1 + ' check need to copy ? see amount to adjust <> 0 ? + If (CheckIfOffBalanceSheetAmountToAdjust1NoNeedCopy(adjustment_sheet_current_row, bmf_id, off_bal_pcco_1)) Then + ' do skip + Debug.Print "skip off-balance sheet 1" + Else + ' do copy + bmf_adjustment_sheet_last_row = getBMFAdjustmentResultListEnd(1) + bmf_adjustment_sheet_current_row = bmf_adjustment_sheet_last_row + 1 + temp_value = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_FINAL_BMF_ID & CStr(adjustment_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_BMF_REFERENCE_ID & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_REPORTING_ENTITY & CStr(bmf_adjustment_sheet_current_row)).Value = "14004" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_OPAQUE_REPORTING_ENTITY & CStr(bmf_adjustment_sheet_current_row)).Value = "N" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_INTERNAL_EXTERNAL_CODE & CStr(bmf_adjustment_sheet_current_row)).Value = "E" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_IFRS_NORM_FLAG & CStr(bmf_adjustment_sheet_current_row)).Value = "Y" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_FRENCH_GAAP_NORM_FLAG & CStr(bmf_adjustment_sheet_current_row)).Value = "Y" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PROCESS_IMPACTED_LIQ & CStr(bmf_adjustment_sheet_current_row)).Value = "1" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PROCESS_IMPACTED_STT & CStr(bmf_adjustment_sheet_current_row)).Value = "1" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PROCESS_IMPACTED_YLD & CStr(bmf_adjustment_sheet_current_row)).Value = "1" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_TYPE_CODE & CStr(bmf_adjustment_sheet_current_row)).Value = "01" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_ADJUSTMENT_TYPE & CStr(bmf_adjustment_sheet_current_row)).Value = "DQ" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_COMMENT & CStr(bmf_adjustment_sheet_current_row)).Value = "Unsettled bond adjustment for RWA purpose" + + + temp_value = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_OFF_BALANCE_SHEET_PCCO_1 & CStr(adjustment_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PCCO & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + + temp_value = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_OFF_BALANCE_SHEET_PCEC_1 & CStr(adjustment_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PCEC & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + + + temp_value = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_OFF_BALANCE_SHEET_AMOUNT_TO_ADJ_1 & CStr(adjustment_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_ACCT_BALANCE & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_FUNT & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + + temp_value = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_OFF_BALANCE_SHEET_NA_1 & CStr(adjustment_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_LOCAL_OPERATIONAL_ACCOUNT & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value & " " & "15130" + + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range("A" & bmf_adjustment_sheet_current_row & ":" & "BN" & bmf_adjustment_sheet_current_row).NumberFormat = "@" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_ACCT_BALANCE & bmf_adjustment_sheet_current_row).NumberFormat = RED_THOUSAND_SEP_NUMBER_FORMAT + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_FUNT & bmf_adjustment_sheet_current_row).NumberFormat = RED_THOUSAND_SEP_NUMBER_FORMAT + + End If + + ' off-balance sheet 2 + ' check need to copy ? see amount to adjust <> 0 ? + If (CheckIfOffBalanceSheetAmountToAdjust2NoNeedCopy(adjustment_sheet_current_row, bmf_id, off_bal_pcco_2)) Then + ' do skip + Debug.Print "skip off-balance sheet 2" + Else + ' do copy + bmf_adjustment_sheet_last_row = getBMFAdjustmentResultListEnd(1) + bmf_adjustment_sheet_current_row = bmf_adjustment_sheet_last_row + 1 + temp_value = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_FINAL_BMF_ID & CStr(adjustment_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_BMF_REFERENCE_ID & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_REPORTING_ENTITY & CStr(bmf_adjustment_sheet_current_row)).Value = "14004" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_OPAQUE_REPORTING_ENTITY & CStr(bmf_adjustment_sheet_current_row)).Value = "N" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_INTERNAL_EXTERNAL_CODE & CStr(bmf_adjustment_sheet_current_row)).Value = "E" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_IFRS_NORM_FLAG & CStr(bmf_adjustment_sheet_current_row)).Value = "Y" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_FRENCH_GAAP_NORM_FLAG & CStr(bmf_adjustment_sheet_current_row)).Value = "Y" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PROCESS_IMPACTED_LIQ & CStr(bmf_adjustment_sheet_current_row)).Value = "1" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PROCESS_IMPACTED_STT & CStr(bmf_adjustment_sheet_current_row)).Value = "1" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PROCESS_IMPACTED_YLD & CStr(bmf_adjustment_sheet_current_row)).Value = "1" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_TYPE_CODE & CStr(bmf_adjustment_sheet_current_row)).Value = "01" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_ADJUSTMENT_TYPE & CStr(bmf_adjustment_sheet_current_row)).Value = "DQ" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_COMMENT & CStr(bmf_adjustment_sheet_current_row)).Value = "Unsettled bond adjustment for RWA purpose" + + temp_value = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_OFF_BALANCE_SHEET_PCCO_2 & CStr(adjustment_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PCCO & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + + temp_value = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_OFF_BALANCE_SHEET_PCEC_2 & CStr(adjustment_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_PCEC & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + + + temp_value = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_OFF_BALANCE_SHEET_AMOUNT_TO_ADJ_2 & CStr(adjustment_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_ACCT_BALANCE & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_FUNT & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value + + temp_value = Worksheets(ADJUSTMENT_WORKSHEET).Range(COL_OFF_BALANCE_SHEET_NA_2 & CStr(adjustment_sheet_current_row)).Value + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_LOCAL_OPERATIONAL_ACCOUNT & CStr(bmf_adjustment_sheet_current_row)).Value = temp_value & " " & "15130" + + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range("A" & bmf_adjustment_sheet_current_row & ":" & "BN" & bmf_adjustment_sheet_current_row).NumberFormat = "@" + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_ACCT_BALANCE & bmf_adjustment_sheet_current_row).NumberFormat = RED_THOUSAND_SEP_NUMBER_FORMAT + Worksheets(BMF_ADJUSTMENT_WORKSHEET).Range(COL_BMF_ADJUSTMENT_SHEET_AMOUNT_IN_FUNT & bmf_adjustment_sheet_current_row).NumberFormat = RED_THOUSAND_SEP_NUMBER_FORMAT + + End If + + Else + Debug.Print adjustment_sheet_current_row & " skipping copy as bmfid is empty" + End If + + + Next adjustment_sheet_current_row + +Done: + Exit Sub + +eh: + Debug.Print "helloworld:Error: " & Err.Description + +End Sub diff --git a/task3/delivery1/Copy and paste requirement.docx b/task3/delivery1/Copy and paste requirement.docx new file mode 100644 index 0000000..57f062f Binary files /dev/null and b/task3/delivery1/Copy and paste requirement.docx differ diff --git a/task3/delivery1/notes.md b/task3/delivery1/notes.md new file mode 100644 index 0000000..e98c663 --- /dev/null +++ b/task3/delivery1/notes.md @@ -0,0 +1,35 @@ +係"BMF Adjustment"入面... + +1. If "BMF 1690 2680" tab 嘅 "NA" is 1690/2690 —> "Line type" 填 Reversing +2. If "BMF 1690 2680" tab 嘅 "NA" is 1020/2020/8601/8701 —> "Line type" 填 Creation +3. Columns Highlight in yellow 填嘅資料都一樣, refer to following photo +4. 係"BMF 1690 2690"入面... + Copy corresponding data in "BMF 1690 2690" to corresponding column in "BMF Adjustment" + + + +1. If "Raw Data" tab 嘅 "NA" is 1690/2690 —> "Line type" 填 Reversing +2. If "Raw Data" tab 嘅 "NA" is 1020/2020/8601/8701 —> "Line type" 填 Creation +3. Columns Highlight in yellow 填嘅資料都一樣, refer to following photo + +![](./_images/1.png) +![](./_images/2.png) + +"BMF 1690 2690" | To | "BMF Adjustment" +--------------------------|----|----------------------------------------------------- +BMF ID (Column C) | | BMF reference ID (Column A) +PCCO (Column E) | | PCCO (Column G) +PCEC (Column F) | | PCEC (Column H) +Amount in acct (Column M) | | Amount in acct balance, Amount in funt (Column J, K) +NA (Column H) | | Local Operational Account (Column BN) + 15130 + + + +Hello~ 唔知你仲記唔記得上次搵你幫我做嗰個vba係做啲咩呢 +今次同上次個做嘅野一樣,但多咗一個tab想你幫我copy 啲data去返嗰個tab,同埋加多咗一個要求 + +我改咗你original 個 vba少少,所以我send我改咗嗰version + 新要求 + excel file 俾你睇先吖🙇🏻‍♀️🙇🏻‍♀️ + +咁呀,有冇可能之後你得閒開個 call 講講你想點做? +sor 有小許蠢睇唔明 👉👈 + diff --git a/task3/notes.md b/task3/notes.md new file mode 100644 index 0000000..e98c663 --- /dev/null +++ b/task3/notes.md @@ -0,0 +1,35 @@ +係"BMF Adjustment"入面... + +1. If "BMF 1690 2680" tab 嘅 "NA" is 1690/2690 —> "Line type" 填 Reversing +2. If "BMF 1690 2680" tab 嘅 "NA" is 1020/2020/8601/8701 —> "Line type" 填 Creation +3. Columns Highlight in yellow 填嘅資料都一樣, refer to following photo +4. 係"BMF 1690 2690"入面... + Copy corresponding data in "BMF 1690 2690" to corresponding column in "BMF Adjustment" + + + +1. If "Raw Data" tab 嘅 "NA" is 1690/2690 —> "Line type" 填 Reversing +2. If "Raw Data" tab 嘅 "NA" is 1020/2020/8601/8701 —> "Line type" 填 Creation +3. Columns Highlight in yellow 填嘅資料都一樣, refer to following photo + +![](./_images/1.png) +![](./_images/2.png) + +"BMF 1690 2690" | To | "BMF Adjustment" +--------------------------|----|----------------------------------------------------- +BMF ID (Column C) | | BMF reference ID (Column A) +PCCO (Column E) | | PCCO (Column G) +PCEC (Column F) | | PCEC (Column H) +Amount in acct (Column M) | | Amount in acct balance, Amount in funt (Column J, K) +NA (Column H) | | Local Operational Account (Column BN) + 15130 + + + +Hello~ 唔知你仲記唔記得上次搵你幫我做嗰個vba係做啲咩呢 +今次同上次個做嘅野一樣,但多咗一個tab想你幫我copy 啲data去返嗰個tab,同埋加多咗一個要求 + +我改咗你original 個 vba少少,所以我send我改咗嗰version + 新要求 + excel file 俾你睇先吖🙇🏻‍♀️🙇🏻‍♀️ + +咁呀,有冇可能之後你得閒開個 call 講講你想點做? +sor 有小許蠢睇唔明 👉👈 + diff --git a/task4/.editorconfig b/task4/.editorconfig new file mode 100644 index 0000000..905fd91 --- /dev/null +++ b/task4/.editorconfig @@ -0,0 +1,12 @@ +# EditorConfig is awesome: https://EditorConfig.org + +# top-most EditorConfig file +root = true + +[*] +indent_style = space +indent_size = 4 +end_of_line = lf +charset = latin1 +trim_trailing_whitespace = true +insert_final_newline = true diff --git a/task4/dist/Expense_Report.xlsm b/task4/dist/Expense_Report.xlsm new file mode 100644 index 0000000..7d7618b Binary files /dev/null and b/task4/dist/Expense_Report.xlsm differ diff --git a/task4/dist/step.png b/task4/dist/step.png new file mode 100644 index 0000000..1d22f34 --- /dev/null +++ b/task4/dist/step.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8d540dc41a28598e42dc6725df4ed1d2ef3643bb88cbf60733fe75a303d7622f +size 32046 diff --git a/task4/from_client/Expense Report_original.xlsx b/task4/from_client/Expense Report_original.xlsx new file mode 100644 index 0000000..51e6354 Binary files /dev/null and b/task4/from_client/Expense Report_original.xlsx differ diff --git a/task4/notes.md b/task4/notes.md new file mode 100644 index 0000000..e69de29 diff --git a/task4/source/_del/Expense_Report_draft_001.xlsm b/task4/source/_del/Expense_Report_draft_001.xlsm new file mode 100644 index 0000000..ff57955 Binary files /dev/null and b/task4/source/_del/Expense_Report_draft_001.xlsm differ diff --git a/task4/source/_del/Expense_Report_draft_002.xlsm b/task4/source/_del/Expense_Report_draft_002.xlsm new file mode 100644 index 0000000..0d32c2b Binary files /dev/null and b/task4/source/_del/Expense_Report_draft_002.xlsm differ diff --git a/task4/source/_del/Expense_Report_error.xlsm b/task4/source/_del/Expense_Report_error.xlsm new file mode 100644 index 0000000..19659ed Binary files /dev/null and b/task4/source/_del/Expense_Report_error.xlsm differ diff --git a/task4/source/_del/Expense_Report_trunk - draft003.xlsm b/task4/source/_del/Expense_Report_trunk - draft003.xlsm new file mode 100644 index 0000000..e28016a Binary files /dev/null and b/task4/source/_del/Expense_Report_trunk - draft003.xlsm differ diff --git a/task4/source/_del/Expense_Report_trunk - draft004.xlsm b/task4/source/_del/Expense_Report_trunk - draft004.xlsm new file mode 100644 index 0000000..2ab9988 Binary files /dev/null and b/task4/source/_del/Expense_Report_trunk - draft004.xlsm differ diff --git a/task4/source/_del/Expense_Report_trunk - draft005.xlsm b/task4/source/_del/Expense_Report_trunk - draft005.xlsm new file mode 100644 index 0000000..e6fc2b4 Binary files /dev/null and b/task4/source/_del/Expense_Report_trunk - draft005.xlsm differ diff --git a/task4/source/_del/Expense_Report_trunk - fast_draft001.xlsm b/task4/source/_del/Expense_Report_trunk - fast_draft001.xlsm new file mode 100644 index 0000000..9e273bf Binary files /dev/null and b/task4/source/_del/Expense_Report_trunk - fast_draft001.xlsm differ diff --git a/task4/source/_del/Expense_Report_trunk copy.xlsm b/task4/source/_del/Expense_Report_trunk copy.xlsm new file mode 100644 index 0000000..989d5ea Binary files /dev/null and b/task4/source/_del/Expense_Report_trunk copy.xlsm differ diff --git a/task4/source/_del/Expense_Report_trunk.xlsm b/task4/source/_del/Expense_Report_trunk.xlsm new file mode 100644 index 0000000..4a41b9a Binary files /dev/null and b/task4/source/_del/Expense_Report_trunk.xlsm differ diff --git a/task4/source/_del/Expense_Report_trunk_o.xlsm b/task4/source/_del/Expense_Report_trunk_o.xlsm new file mode 100644 index 0000000..e2cfedf Binary files /dev/null and b/task4/source/_del/Expense_Report_trunk_o.xlsm differ diff --git a/task4/source/_del/Expense_Report_working.xlsm b/task4/source/_del/Expense_Report_working.xlsm new file mode 100644 index 0000000..4cb69eb Binary files /dev/null and b/task4/source/_del/Expense_Report_working.xlsm differ diff --git a/task4/source/_del/Module1.bas b/task4/source/_del/Module1.bas new file mode 100644 index 0000000..1d511ce --- /dev/null +++ b/task4/source/_del/Module1.bas @@ -0,0 +1,874 @@ +Attribute VB_Name = "Module1" + +Option Explicit + +Global I_TABLE_WIDTH As Integer +Global I_TABLE_HEIGHT As Integer + +Global WS_RAW_DATA As String +Global WS_REQUIREMENTS As String +Global WS_CASE1 As String +Global WS_CASE2 As String +Global WS_CASE3 As String +Global WS_CASE4 As String + +Global AA_RAW_DATA(30000) As Variant +Global A_RAW_DATA(99) As String +Global len_raw_data As Integer + +Global temp_ws_case1(30000) As Variant +Global len_temp_ws_case1 As Integer + +Global temp_ws_case2(30000) As Variant +Global len_temp_ws_case2 As Integer + +Global temp_ws_case3(30000) As Variant +Global len_temp_ws_case3 As Integer + +Global temp_ws_case4(30000) As Variant +Global len_temp_ws_case4 As Integer + +Global temp_row(99) As String + +Global COL_O_EXPENSE_NUMBER As Integer +Global COL_O_CLAIMANT_NAME As Integer +Global COL_O_REPORT_SUBMITTED_DATE As Integer +Global COL_O_EXPENSE_REPORT_DATE As Integer +Global COL_O_PURPOSE_1 As Integer +Global COL_O_PURPOSE_2 As Integer +Global COL_O_STATUS As Integer +Global COL_O_AMOUNT_HKD As Integer +Global COL_O_CURRENCY As Integer +Global COL_O_LINE_NUMBER As Integer +Global COL_O_EXPENSE_TYPE As Integer +Global COL_O_LINE_AMOUNT_HKD As Integer +Global COL_O_RECEIPT_AMOUNT_BEFORE_TAX As Integer +Global COL_O_LINE_CURRENCY As Integer +Global COL_O_EXCHANGE_RATE As Integer +Global COL_O_JUSTIFICATION As Integer +Global COL_O_EXPENSE_DATE As Integer +Global COL_O_ALLOCATION_NUMBER As Integer +Global COL_O_ALLOCATION_AMOUNT As Integer +Global COL_O_EXPENSE_ALLOCATION As Integer +Global COL_O_EMPLOYEE_IF_NOT_THE_CLAIMS As Integer +Global COL_O_DEPARTURE_LOCATION As Integer +Global COL_O_DESTINATION As Integer +Global COL_O_MODE_OF_TRANSPORTATION As Integer +Global COL_O_PURPOSE_OF_JOURNEY As Integer +Global COL_O_NAME_OF_GUEST_COMPANY As Integer +Global COL_O_MOST_SENIOR_PARTICIPANT As Integer +Global COL_O_PURPOSE_OF_ENTERTAINMENT As Integer +Global COL_O_COST_PER_HEAD As Integer +Global COL_O_COST_PER_HEAD_BEFORE_TAX As Integer +Global COL_O_NUMBER_OF_PARTICIPANTS As Integer +Global COL_O_NAME_AND_POSITION_OF_PARTICIPANTS As Integer +Global COL_O_TAR_APPROVED_NUMBER As Integer +Global COL_O_REASON_OF_GUEST_NO_DIFF As Integer +Global COL_O_REASON_OF_OTHER_RELATED_EXPENSE As Integer +Global COL_O_ABC_APPROVAL_REFERENCE_NUMBER As Integer +Global COL_O_ADDITIONAL_APPROVER_1 As Integer +Global COL_O_ADDITIONAL_APPROVER_2 As Integer +Global COL_O_EAP_APPROVER_3 As Integer +Global COL_O_ADDITIONAL_APPROVER_4 As Integer +Global COL_O_ADDITIONAL_APPROVER_5 As Integer +Global COL_O_ADDITIONAL_APPROVER_CEO As Integer +Global COL_O_ADDITIONAL_APPROVER_AAE As Integer +Global COL_O_HR_DIVISION_1 As Integer +Global COL_O_HR_DIVISION_2 As Integer +Global COL_O_HR_DIVISION_3 As Integer +Global COL_O_HR_DIVISION_4 As Integer + +Sub initConfig() + + COL_O_EXPENSE_NUMBER = 0 + COL_O_CLAIMANT_NAME = 1 + COL_O_REPORT_SUBMITTED_DATE = 2 + COL_O_EXPENSE_REPORT_DATE = 3 + COL_O_PURPOSE_1 = 4 + COL_O_PURPOSE_2 = 5 + COL_O_STATUS = 6 + COL_O_AMOUNT_HKD = 7 + COL_O_CURRENCY = 8 + COL_O_LINE_NUMBER = 9 + COL_O_EXPENSE_TYPE = 10 + COL_O_LINE_AMOUNT_HKD = 11 + COL_O_RECEIPT_AMOUNT_BEFORE_TAX = 12 + COL_O_LINE_CURRENCY = 13 + COL_O_EXCHANGE_RATE = 14 + COL_O_JUSTIFICATION = 15 + COL_O_EXPENSE_DATE = 16 + COL_O_ALLOCATION_NUMBER = 17 + COL_O_ALLOCATION_AMOUNT = 18 + COL_O_EXPENSE_ALLOCATION = 19 + COL_O_EMPLOYEE_IF_NOT_THE_CLAIMS = 20 + COL_O_DEPARTURE_LOCATION = 21 + COL_O_DESTINATION = 22 + COL_O_MODE_OF_TRANSPORTATION = 23 + COL_O_PURPOSE_OF_JOURNEY = 24 + COL_O_NAME_OF_GUEST_COMPANY = 25 + COL_O_MOST_SENIOR_PARTICIPANT = 26 + COL_O_PURPOSE_OF_ENTERTAINMENT = 27 + COL_O_COST_PER_HEAD = 28 + COL_O_COST_PER_HEAD_BEFORE_TAX = 29 + COL_O_NUMBER_OF_PARTICIPANTS = 30 + COL_O_NAME_AND_POSITION_OF_PARTICIPANTS = 31 + COL_O_TAR_APPROVED_NUMBER = 32 + COL_O_REASON_OF_GUEST_NO_DIFF = 33 + COL_O_REASON_OF_OTHER_RELATED_EXPENSE = 34 + COL_O_ABC_APPROVAL_REFERENCE_NUMBER = 35 + COL_O_ADDITIONAL_APPROVER_1 = 36 + COL_O_ADDITIONAL_APPROVER_2 = 37 + COL_O_EAP_APPROVER_3 = 38 + COL_O_ADDITIONAL_APPROVER_4 = 39 + COL_O_ADDITIONAL_APPROVER_5 = 40 + COL_O_ADDITIONAL_APPROVER_CEO = 41 + COL_O_ADDITIONAL_APPROVER_AAE = 42 + COL_O_HR_DIVISION_1 = 43 + COL_O_HR_DIVISION_2 = 44 + COL_O_HR_DIVISION_3 = 45 + COL_O_HR_DIVISION_4 = 46 + + WS_CASE1 = "Date & Amount" + WS_CASE2 = "Date & Amount & Type" + WS_CASE3 = "Date & Amount & Type & Name" + WS_CASE4 = "Professional Fees" + WS_RAW_DATA = "Raw Data" + WS_REQUIREMENTS = "Requirement" + + I_TABLE_WIDTH = 99 + I_TABLE_HEIGHT = 30000 + + len_temp_ws_case1 = 0 + len_temp_ws_case2 = 0 + len_temp_ws_case3 = 0 + len_temp_ws_case4 = 0 + +End Sub + +Function CheckWsExist(ws_string) + Dim output As Boolean + +On Error GoTo eh + + Dim i As Integer + For i = 1 To Worksheets.Count + If (Worksheets.Item(i).Name = ws_string) Then + CheckWsExist = True + Exit Function + End If + Next i + +Done: + CheckWsExist = False + Exit Function + +eh: + CheckWsExist = False + +End Function + +Sub CreateWsIfNotExist(ws_string) + If (CheckWsExist(ws_string) = False) Then + Dim newSheet As Worksheet + + ' Create a new worksheet and assign it to the variable + Set newSheet = ThisWorkbook.Worksheets.Add(After:=Worksheets(Worksheets.Count)) + + ' Optionally, you can name the new worksheet + newSheet.Name = ws_string + End If +End Sub + +Function checkTableLength(ws_string) + Dim output As Integer + Dim r, c As Integer + + For r = 1 To I_TABLE_HEIGHT + Dim temp As String + temp = Worksheets(ws_string).Range("A1").Offset(r, 0).Value + If temp = "" Then + output = r + Exit For + End If + + Next r + + checkTableLength = output - 1 '- 1 for header +End Function + +Sub CopyRow(src_row, dst_list) + Dim r, c As Integer + + + +End Sub + +Sub CopyRowOriginal(src_sheet, src_row, dst_sheet, dst_row) + Dim r, c As Integer + + For c = 0 To I_TABLE_WIDTH + Worksheets(dst_sheet).Range("A1").Offset(dst_row, c).Value = Worksheets(src_sheet).Range("A1").Offset(src_row, c).Value + + If (dst_row <> 0) Then + Select Case c + Case COL_O_LINE_AMOUNT_HKD + Range("A1").Offset(dst_row, c).NumberFormat = "0.00" + + Case COL_O_EXPENSE_DATE + Worksheets(dst_sheet).Range("A1").Offset(dst_row, c).Value = "'" & Worksheets(src_sheet).Range("A1").Offset(src_row, c).Value + + Case Else + Debug.Print c + End Select + End If + + Next c + +End Sub + + + +' Case 1 +' Situation: +' > If any rows (with different expense number) of both Expense Date (Column Q) and Line Amount (Column L) have the same value +' 1. with different expense number (Column A) +' 2. Expense Date (Column Q) have the same value +' 3. Line Amount (Column L) have the same value + +' Action: +' Create a tab (Name: Date & Amount) and copy and paste the related rows to this tab + +Sub Case1() + MsgBox "Helloworld" +End Sub + +Sub initSheetForCase1() + Dim r, c As Integer + + CreateWsIfNotExist (WS_CASE1) + + Worksheets(WS_CASE1).Range("A1:Z" & CStr(I_TABLE_HEIGHT)).Offset(r, c).Clear + + For c = 0 To 99 + Worksheets(WS_CASE1).Range("A1").Offset(0, c).Value = Worksheets(WS_RAW_DATA).Range("A1").Offset(0, c).Value + Next c +End Sub + +Function CheckFullfillCase1Original(src_wk_sheet, src_row, dst_wk_sheet, dst_row) + Dim output As Boolean + Dim c As Integer + + Dim R_DIFF_EXPENSE_NUM As Boolean + Dim R_SAME_EXPENSE_DATE As Boolean + Dim R_SAME_LINE_AMOUNT As Boolean + Dim R_SAME_EXPENSE_TYPE, R_SAME_CLAIMANT_NAME As Boolean + + output = True + R_DIFF_EXPENSE_NUM = Worksheets(src_wk_sheet).Range("A1").Offset(src_row, COL_O_EXPENSE_NUMBER).Value <> Worksheets(dst_wk_sheet).Range("A1").Offset(dst_row, COL_O_EXPENSE_NUMBER).Value + R_SAME_EXPENSE_DATE = Worksheets(src_wk_sheet).Range("A1").Offset(src_row, COL_O_EXPENSE_DATE).Value = Worksheets(dst_wk_sheet).Range("A1").Offset(dst_row, COL_O_EXPENSE_DATE).Value + R_SAME_LINE_AMOUNT = Worksheets(src_wk_sheet).Range("A1").Offset(src_row, COL_O_LINE_AMOUNT_HKD).Value = Worksheets(dst_wk_sheet).Range("A1").Offset(dst_row, COL_O_LINE_AMOUNT_HKD).Value + + R_SAME_EXPENSE_TYPE = Worksheets(src_wk_sheet).Range("A1").Offset(src_row, COL_O_EXPENSE_TYPE).Value = Worksheets(dst_wk_sheet).Range("A1").Offset(dst_row, COL_O_EXPENSE_TYPE).Value + R_SAME_CLAIMANT_NAME = Worksheets(src_wk_sheet).Range("A1").Offset(src_row, COL_O_CLAIMANT_NAME).Value = Worksheets(dst_wk_sheet).Range("A1").Offset(dst_row, COL_O_CLAIMANT_NAME).Value + + output = R_DIFF_EXPENSE_NUM And R_SAME_EXPENSE_DATE And R_SAME_LINE_AMOUNT And Not (R_SAME_EXPENSE_TYPE Or R_SAME_CLAIMANT_NAME) + + Debug.Print R_DIFF_EXPENSE_NUM + + CheckFullfillCase1 = output +End Function + +Function CheckFullfillCase1(row1, row2) + Dim output As Boolean + Dim c As Integer + + Dim R_DIFF_EXPENSE_NUM As Boolean + Dim R_SAME_EXPENSE_DATE As Boolean + Dim R_SAME_LINE_AMOUNT As Boolean + Dim R_SAME_EXPENSE_TYPE, R_SAME_CLAIMANT_NAME As Boolean + + output = True + + R_DIFF_EXPENSE_NUM = row1(COL_O_EXPENSE_NUMBER) <> row2(COL_O_EXPENSE_NUMBER) + R_SAME_EXPENSE_DATE = row1(COL_O_EXPENSE_DATE) = row2(COL_O_EXPENSE_DATE) + R_SAME_LINE_AMOUNT = row1(COL_O_LINE_AMOUNT_HKD) = row2(COL_O_LINE_AMOUNT_HKD) + ' + R_SAME_EXPENSE_TYPE = row1(COL_O_EXPENSE_TYPE) = row2(COL_O_EXPENSE_TYPE) + R_SAME_CLAIMANT_NAME = row1(COL_O_CLAIMANT_NAME) = row2(COL_O_CLAIMANT_NAME) + + output = R_DIFF_EXPENSE_NUM And R_SAME_EXPENSE_DATE And R_SAME_LINE_AMOUNT And Not (R_SAME_EXPENSE_TYPE Or R_SAME_CLAIMANT_NAME) + + ' Debug.Print R_DIFF_EXPENSE_NUM + Debug.Print "Helloworld" + + CheckFullfillCase1 = output +End Function + +Function CheckOccurInCase1(row_to_check) + Dim output As Boolean + output = False + + Dim r, case1_table_len As Integer + + Dim R_SAME_EXPENSE_NUM As Boolean + Dim R_SAME_EXPENSE_DATE As Boolean + Dim R_SAME_LINE_AMOUNT As Boolean + + For r = 0 To len_temp_ws_case1 - 1 + R_SAME_EXPENSE_NUM = row_to_check(COL_O_EXPENSE_NUMBER) = temp_ws_case1(r)(COL_O_EXPENSE_NUMBER) + R_SAME_EXPENSE_DATE = row_to_check(COL_O_EXPENSE_DATE) = temp_ws_case1(r)(COL_O_EXPENSE_DATE) + R_SAME_LINE_AMOUNT = row_to_check(COL_O_LINE_AMOUNT_HKD) = temp_ws_case1(r)(COL_O_LINE_AMOUNT_HKD) + + If (R_SAME_EXPENSE_NUM And R_SAME_EXPENSE_DATE And R_SAME_LINE_AMOUNT) Then + output = True + Exit For + End If + Next r + + CheckOccurInCase1 = output +End Function + +Sub ProcessCase1() + initSheetForCase1 + + Dim r, r_c1 As Integer + Dim r_fullfill_case1 As Boolean + + Dim last_row_idx, second_last_row_idx As Integer + last_row_idx = len_raw_data - 1 + second_last_row_idx = last_row_idx - 1 + + For r = 0 To (second_last_row_idx) + For r_c1 = (r + 1) To (last_row_idx) + + r_fullfill_case1 = CheckFullfillCase1(AA_RAW_DATA(r), AA_RAW_DATA(r_c1)) + + If (r_fullfill_case1) Then + If (CheckOccurInCase1(AA_RAW_DATA(r))) Then + ' if occur in ws_case1, do nothing + Else + temp_ws_case1(len_temp_ws_case1) = AA_RAW_DATA(r) + len_temp_ws_case1 = len_temp_ws_case1 + 1 + + Worksheets(WS_RAW_DATA).Range("A1").Offset(r + 1, COL_O_EXPENSE_DATE).Interior.Color = GetRandomColor + Worksheets(WS_RAW_DATA).Range("A1").Offset(r + 1, COL_O_LINE_AMOUNT_HKD).Interior.Color = GetRandomColor + End If + + If (CheckOccurInCase1(AA_RAW_DATA(r_c1))) Then + ' if occur in ws_case1, do nothing + Else + temp_ws_case1(len_temp_ws_case1) = AA_RAW_DATA(r_c1) + len_temp_ws_case1 = len_temp_ws_case1 + 1 + + Worksheets(WS_RAW_DATA).Range("A1").Offset(r_c1 + 1, COL_O_EXPENSE_DATE).Interior.Color = GetRandomColor + Worksheets(WS_RAW_DATA).Range("A1").Offset(r_c1 + 1, COL_O_LINE_AMOUNT_HKD).Interior.Color = GetRandomColor + End If + End If + + Next r_c1 + Next r + + For r = 0 To (len_temp_ws_case1 - 1) + For r_c1 = 0 To 99 + Worksheets(WS_CASE1).Range("A1").Offset(r + 1, r_c1).Value = temp_ws_case1(r)(r_c1) + Next r_c1 + Next r + + Worksheets(WS_CASE1).Range("A1:Z" & 99).Columns.AutoFit + Worksheets(WS_CASE1).Range("A2:Z" & 99).Interior.Color = xlNone + +End Sub + + + +' Case 2 +' Situation: +' > If any rows (with different expense number) of Expense Date (Column Q), Line Amount (Column L) and Expense Type (Column K) have the same value +' 1. with different expense number (Column A) +' 2. Expense Date (Column Q) have the same value +' 3. Line Amount (Column L) have the same value +' 4. Expense Type (Column K) have the same value + +' Action: +' Create a tab (Name: Date & Amount & Type) and copy and paste the related rows to this tab + + +Sub Case2() + MsgBox "Helloworld" +End Sub + +Sub initSheetForCase2() + Dim r, c As Integer + + CreateWsIfNotExist (WS_CASE2) + + Worksheets(WS_CASE2).Range("A1:Z" & CStr(I_TABLE_HEIGHT)).Offset(r, c).Clear + + + For c = 0 To 99 + Worksheets(WS_CASE2).Range("A1").Offset(0, c).Value = Worksheets(WS_RAW_DATA).Range("A1").Offset(0, c).Value + Next c +End Sub + +Function CheckFullfillCase2(row1, row2) + Dim output As Boolean + Dim c As Integer + + Dim R_DIFF_EXPENSE_NUM As Boolean + Dim R_SAME_EXPENSE_DATE As Boolean + Dim R_SAME_LINE_AMOUNT As Boolean + Dim R_SAME_EXPENSE_TYPE As Boolean + + Dim R_SAME_CLAIMANT_NAME, R_EXPENSE_TYPE_PROF_FEE As Boolean + + output = True + R_DIFF_EXPENSE_NUM = row1(COL_O_EXPENSE_NUMBER) <> row2(COL_O_EXPENSE_NUMBER) + R_SAME_EXPENSE_DATE = row1(COL_O_EXPENSE_DATE) = row2(COL_O_EXPENSE_DATE) + R_SAME_LINE_AMOUNT = row1(COL_O_LINE_AMOUNT_HKD) = row2(COL_O_LINE_AMOUNT_HKD) + R_SAME_EXPENSE_TYPE = row1(COL_O_EXPENSE_TYPE) = row2(COL_O_EXPENSE_TYPE) + + R_SAME_CLAIMANT_NAME = row1(COL_O_CLAIMANT_NAME) = row2(COL_O_CLAIMANT_NAME) + R_EXPENSE_TYPE_PROF_FEE = row1(COL_O_EXPENSE_TYPE) = "PROF.FEE" + + output = R_DIFF_EXPENSE_NUM And R_SAME_EXPENSE_DATE And R_SAME_LINE_AMOUNT And R_SAME_EXPENSE_TYPE And Not (R_SAME_CLAIMANT_NAME Or R_EXPENSE_TYPE_PROF_FEE) + + CheckFullfillCase2 = output +End Function + +Function CheckOccurInCase2(row_to_check) + Dim output As Boolean + output = False + + Dim r, case2_table_len As Integer + + Dim R_SAME_EXPENSE_NUM As Boolean + Dim R_SAME_EXPENSE_DATE As Boolean + Dim R_SAME_LINE_AMOUNT As Boolean + Dim R_SAME_EXPENSE_TYPE As Boolean + + For r = 1 To len_temp_ws_case2 - 1 + R_SAME_EXPENSE_NUM = row_to_check(COL_O_EXPENSE_NUMBER) = temp_ws_case2(r)(COL_O_EXPENSE_NUMBER) + R_SAME_EXPENSE_DATE = row_to_check(COL_O_EXPENSE_DATE) = temp_ws_case2(r)(COL_O_EXPENSE_DATE) + R_SAME_LINE_AMOUNT = row_to_check(COL_O_LINE_AMOUNT_HKD) = temp_ws_case2(r)(COL_O_LINE_AMOUNT_HKD) + R_SAME_EXPENSE_TYPE = row_to_check(COL_O_EXPENSE_TYPE) = temp_ws_case2(r)(COL_O_EXPENSE_TYPE) + + If (R_SAME_EXPENSE_NUM And R_SAME_EXPENSE_DATE And R_SAME_LINE_AMOUNT And R_SAME_EXPENSE_TYPE) Then + output = True + Exit For + End If + Next r + + CheckOccurInCase2 = output +End Function + +Sub ProcessCase2() + initSheetForCase2 + + Dim r, r_c1 As Integer + Dim r_fullfill_case2 As Boolean + + Dim last_row_idx, second_last_row_idx As Integer + last_row_idx = len_raw_data - 1 + second_last_row_idx = last_row_idx - 1 + + For r = 0 To (second_last_row_idx) + For r_c1 = (r + 1) To (last_row_idx) + r_fullfill_case2 = CheckFullfillCase2(AA_RAW_DATA(r), AA_RAW_DATA(r_c1)) + + If (r_fullfill_case2) Then + If (CheckOccurInCase2(AA_RAW_DATA(r))) Then + ' if occur in ws_case2, do nothing + Else + temp_ws_case2(len_temp_ws_case2) = AA_RAW_DATA(r) + len_temp_ws_case2 = len_temp_ws_case2 + 1 + + Worksheets(WS_RAW_DATA).Range("A1").Offset(r + 1, COL_O_EXPENSE_DATE).Interior.Color = GetRandomColor + Worksheets(WS_RAW_DATA).Range("A1").Offset(r + 1, COL_O_LINE_AMOUNT_HKD).Interior.Color = GetRandomColor + Worksheets(WS_RAW_DATA).Range("A1").Offset(r + 1, COL_O_EXPENSE_TYPE).Interior.Color = GetRandomColor + End If + + If (CheckOccurInCase2(AA_RAW_DATA(r_c1))) Then + ' if occur in ws_case2, do nothing + Else + temp_ws_case2(len_temp_ws_case2) = AA_RAW_DATA(r_c1) + len_temp_ws_case2 = len_temp_ws_case2 + 1 + + Worksheets(WS_RAW_DATA).Range("A1").Offset(r_c1 + 1, COL_O_EXPENSE_DATE).Interior.Color = GetRandomColor + Worksheets(WS_RAW_DATA).Range("A1").Offset(r_c1 + 1, COL_O_LINE_AMOUNT_HKD).Interior.Color = GetRandomColor + Worksheets(WS_RAW_DATA).Range("A1").Offset(r_c1 + 1, COL_O_EXPENSE_TYPE).Interior.Color = GetRandomColor + End If + + End If + + Next r_c1 + + Next r + + For r = 0 To (len_temp_ws_case2 - 1) + For r_c1 = 0 To 99 + Worksheets(WS_CASE2).Range("A1").Offset(r + 1, r_c1).Value = temp_ws_case2(r)(r_c1) + Next r_c1 + Next r + + Worksheets(WS_CASE2).Range("A1:Z" & 99).Columns.AutoFit + Worksheets(WS_CASE2).Range("A2:Z" & 99).Interior.Color = xlNone + +End Sub + +' Case 3 +' Situation: +' > If any rows (with different expense number) of Expense Date (Column Q), Line Amount (Column L), Expense Type (Column K) and Claimant Name (Column B) have the same value +' 1. with different expense number (Column A) +' 2. Expense Date (Column Q) have the same value +' 3. Line Amount (Column L) have the same value +' 4. Expense Type (Column K) have the same value +' 5. Claimant Name (Column B) have the same value + +' Action: +' Create a tab (Name: Date & Amount & Type & Name) and copy and paste the related rows to this tab + +Sub Case3() + MsgBox "Helloworld" +End Sub + +Sub initSheetForCase3() + Dim r, c As Integer + + CreateWsIfNotExist (WS_CASE3) + + Worksheets(WS_CASE3).Range("A1:Z" & CStr(I_TABLE_HEIGHT)).Offset(r, c).Clear + + For c = 0 To 99 + Worksheets(WS_CASE3).Range("A1").Offset(0, c).Value = Worksheets(WS_RAW_DATA).Range("A1").Offset(0, c).Value + Next c +End Sub + +Function CheckFullfillCase3(row1, row2) + Dim output As Boolean + Dim c As Integer + + Dim R_DIFF_EXPENSE_NUM As Boolean + Dim R_SAME_EXPENSE_DATE As Boolean + Dim R_SAME_LINE_AMOUNT As Boolean + Dim R_SAME_EXPENSE_TYPE As Boolean + Dim R_SAME_CLAIMANT_NAME As Boolean + Dim R_EXPENSE_TYPE_PROF_FEE As Boolean + + output = True + R_DIFF_EXPENSE_NUM = row1(COL_O_EXPENSE_NUMBER) <> row2(COL_O_EXPENSE_NUMBER) + R_SAME_EXPENSE_DATE = row1(COL_O_EXPENSE_DATE) = row2(COL_O_EXPENSE_DATE) + R_SAME_LINE_AMOUNT = row1(COL_O_LINE_AMOUNT_HKD) = row2(COL_O_LINE_AMOUNT_HKD) + R_SAME_EXPENSE_TYPE = row1(COL_O_EXPENSE_TYPE) = row2(COL_O_EXPENSE_TYPE) + R_SAME_CLAIMANT_NAME = row1(COL_O_CLAIMANT_NAME) = row2(COL_O_CLAIMANT_NAME) + ' + R_EXPENSE_TYPE_PROF_FEE = row1(COL_O_EXPENSE_TYPE) = "PROF.FEE" + + output = R_DIFF_EXPENSE_NUM And R_SAME_EXPENSE_DATE And R_SAME_LINE_AMOUNT And R_SAME_EXPENSE_TYPE And R_SAME_CLAIMANT_NAME And Not (R_EXPENSE_TYPE_PROF_FEE) + + Debug.Print R_DIFF_EXPENSE_NUM + + CheckFullfillCase3 = output +End Function + +Function CheckOccurInCase3(row_to_check) + Dim output As Boolean + output = False + + Dim r As Integer + + Dim R_SAME_EXPENSE_NUM As Boolean + Dim R_SAME_EXPENSE_DATE As Boolean + Dim R_SAME_LINE_AMOUNT As Boolean + Dim R_SAME_EXPENSE_TYPE As Boolean + Dim R_SAME_CLAIMANT_NAME As Boolean + + For r = 0 To len_temp_ws_case3 - 1 + R_SAME_EXPENSE_DATE = row_to_check(COL_O_EXPENSE_DATE) = temp_ws_case3(r)(COL_O_EXPENSE_DATE) + R_SAME_EXPENSE_NUM = row_to_check(COL_O_EXPENSE_NUMBER) = temp_ws_case3(r)(COL_O_EXPENSE_NUMBER) + + R_SAME_LINE_AMOUNT = row_to_check(COL_O_LINE_AMOUNT_HKD) = temp_ws_case3(r)(COL_O_LINE_AMOUNT_HKD) + R_SAME_EXPENSE_TYPE = row_to_check(COL_O_EXPENSE_TYPE) = temp_ws_case3(r)(COL_O_EXPENSE_TYPE) + R_SAME_CLAIMANT_NAME = row_to_check(COL_O_CLAIMANT_NAME) = temp_ws_case3(r)(COL_O_CLAIMANT_NAME) + + If (R_SAME_EXPENSE_NUM And R_SAME_EXPENSE_DATE And R_SAME_LINE_AMOUNT And R_SAME_EXPENSE_TYPE And R_SAME_CLAIMANT_NAME) Then + output = True + Exit For + End If + Next r + + CheckOccurInCase3 = output +End Function + +Sub ProcessCase3() + initSheetForCase3 + + Dim r, r_c1 As Integer + Dim r_fullfill_case3 As Boolean + + Dim last_row_idx, second_last_row_idx As Integer + last_row_idx = len_raw_data - 1 + second_last_row_idx = last_row_idx - 1 + + For r = 0 To (second_last_row_idx) + For r_c1 = (r + 1) To (last_row_idx) + + r_fullfill_case3 = CheckFullfillCase3(AA_RAW_DATA(r), AA_RAW_DATA(r_c1)) + + If (r_fullfill_case3) Then + If (CheckOccurInCase3(AA_RAW_DATA(r))) Then + ' if occur in ws_case3, do nothing + Else + temp_ws_case3(len_temp_ws_case3) = AA_RAW_DATA(r) + len_temp_ws_case3 = len_temp_ws_case3 + 1 + + Worksheets(WS_RAW_DATA).Range("A1").Offset(r + 1, COL_O_EXPENSE_DATE).Interior.Color = GetRandomColor + Worksheets(WS_RAW_DATA).Range("A1").Offset(r + 1, COL_O_LINE_AMOUNT_HKD).Interior.Color = GetRandomColor + Worksheets(WS_RAW_DATA).Range("A1").Offset(r + 1, COL_O_EXPENSE_TYPE).Interior.Color = GetRandomColor + Worksheets(WS_RAW_DATA).Range("A1").Offset(r + 1, COL_O_CLAIMANT_NAME).Interior.Color = GetRandomColor + End If + + If (CheckOccurInCase3(AA_RAW_DATA(r_c1))) Then + ' if occur in ws_case3, do nothing + Else + temp_ws_case3(len_temp_ws_case3) = AA_RAW_DATA(r_c1) + len_temp_ws_case3 = len_temp_ws_case3 + 1 + + Worksheets(WS_RAW_DATA).Range("A1").Offset(r_c1 + 1, COL_O_EXPENSE_DATE).Interior.Color = GetRandomColor + Worksheets(WS_RAW_DATA).Range("A1").Offset(r_c1 + 1, COL_O_LINE_AMOUNT_HKD).Interior.Color = GetRandomColor + Worksheets(WS_RAW_DATA).Range("A1").Offset(r_c1 + 1, COL_O_EXPENSE_TYPE).Interior.Color = GetRandomColor + Worksheets(WS_RAW_DATA).Range("A1").Offset(r_c1 + 1, COL_O_CLAIMANT_NAME).Interior.Color = GetRandomColor + End If + + End If + + Next r_c1 + + Next r + + For r = 0 To (len_temp_ws_case3 - 1) + For r_c1 = 0 To 99 + Worksheets(WS_CASE3).Range("A1").Offset(r + 1, r_c1).Value = temp_ws_case3(r)(r_c1) + Next r_c1 + Next r + + Worksheets(WS_CASE3).Range("A1:Z" & 99).Columns.AutoFit + Worksheets(WS_CASE3).Range("A2:Z" & 99).Interior.Color = xlNone + +End Sub + +' Case 4 +' Situation: +' > If Expense Type (Column K) contains PROF.FEE, and; If any rows (with different expense number) of Claimant Name (Column B) have the same value +' 1. If Expense Type (Column K) contains PROF.FEE +' 2. with different expense number (Column A) +' 3. Claimant Name (Column B) have the same value) + +' Action: +' Create a tab (Name: Professional Fees) and copy and paste the related rows to this tab + +Sub Case4() + MsgBox "Helloworld" +End Sub + +Sub initSheetForCase4() + Dim r, c As Integer + + CreateWsIfNotExist (WS_CASE4) + + Worksheets(WS_CASE4).Range("A1:Z" & CStr(I_TABLE_HEIGHT)).Offset(r, c).Clear + + For c = 0 To 99 + Worksheets(WS_CASE4).Range("A1").Offset(0, c).Value = Worksheets(WS_RAW_DATA).Range("A1").Offset(0, c).Value + Next c +End Sub + +Function CheckFullfillCase4(row1, row2) + Dim output As Boolean + Dim c As Integer + + Dim R_DIFF_EXPENSE_NUM As Boolean + Dim R_EXPENSE_TYPE_PROF_FEE As Boolean + Dim R_SAME_CLAIMANT_NAME As Boolean + + output = True + R_DIFF_EXPENSE_NUM = row1(COL_O_EXPENSE_NUMBER) <> row2(COL_O_EXPENSE_NUMBER) + R_EXPENSE_TYPE_PROF_FEE = row1(COL_O_EXPENSE_TYPE) = "PROF.FEE" + R_SAME_CLAIMANT_NAME = row1(COL_O_CLAIMANT_NAME) = row2(COL_O_CLAIMANT_NAME) + + output = R_DIFF_EXPENSE_NUM And R_EXPENSE_TYPE_PROF_FEE And R_SAME_CLAIMANT_NAME + + CheckFullfillCase4 = output +End Function + +Function CheckOccurInCase4(row_to_check) + Dim output As Boolean + output = False + + Dim r As Integer + + Dim R_SAME_EXPENSE_NUM As Boolean + Dim R_SAME_CLAIMANT_NAME As Boolean + + For r = 0 To len_temp_ws_case4 - 1 + R_SAME_EXPENSE_NUM = row_to_check(COL_O_EXPENSE_NUMBER) = temp_ws_case4(r)(COL_O_EXPENSE_NUMBER) + R_SAME_CLAIMANT_NAME = row_to_check(COL_O_CLAIMANT_NAME) = temp_ws_case4(r)(COL_O_CLAIMANT_NAME) + + If (R_SAME_EXPENSE_NUM And R_SAME_CLAIMANT_NAME) Then + output = True + Exit For + End If + Next r + + CheckOccurInCase4 = output +End Function + +Sub ProcessCase4() + initSheetForCase4 + + Dim r, r_c1 As Integer + Dim r_fullfill_case4 As Boolean + + Dim last_row_idx, second_last_row_idx As Integer + last_row_idx = len_raw_data - 1 + second_last_row_idx = last_row_idx - 1 + + For r = 0 To (second_last_row_idx) + For r_c1 = (r + 1) To (last_row_idx) + + r_fullfill_case4 = CheckFullfillCase4(AA_RAW_DATA(r), AA_RAW_DATA(r_c1)) + + If (r_fullfill_case4) Then + If (CheckOccurInCase4(AA_RAW_DATA(r))) Then + ' if occur in ws_case4, do nothing + Else + temp_ws_case4(len_temp_ws_case4) = AA_RAW_DATA(r) + len_temp_ws_case4 = len_temp_ws_case4 + 1 + + Worksheets(WS_RAW_DATA).Range("A1").Offset(r + 1, COL_O_EXPENSE_TYPE).Interior.Color = GetRandomColor + Worksheets(WS_RAW_DATA).Range("A1").Offset(r + 1, COL_O_CLAIMANT_NAME).Interior.Color = GetRandomColor + End If + + If (CheckOccurInCase4(AA_RAW_DATA(r_c1))) Then + ' if occur in ws_case4, do nothing + Else + temp_ws_case4(len_temp_ws_case4) = AA_RAW_DATA(r_c1) + len_temp_ws_case4 = len_temp_ws_case4 + 1 + + Worksheets(WS_RAW_DATA).Range("A1").Offset(r_c1 + 1, COL_O_EXPENSE_TYPE).Interior.Color = GetRandomColor + Worksheets(WS_RAW_DATA).Range("A1").Offset(r_c1 + 1, COL_O_CLAIMANT_NAME).Interior.Color = GetRandomColor + End If + + End If + + Next r_c1 + + Next r + + For r = 0 To (len_temp_ws_case4 - 1) + For r_c1 = 0 To 99 + Worksheets(WS_CASE4).Range("A1").Offset(r + 1, r_c1).Value = temp_ws_case4(r)(r_c1) + Next r_c1 + Next r + + Worksheets(WS_CASE4).Range("A1:Z" & 99).Columns.AutoFit + Worksheets(WS_CASE4).Range("A2:Z" & 99).Interior.Color = xlNone + +End Sub + +Sub ReadRawData() + Dim r, i, j, k As Integer + + len_raw_data = checkTableLength(WS_RAW_DATA) + + For r = 1 To len_raw_data + Dim test(99) As String + + For i = 0 To 99 + test(i) = Worksheets(WS_RAW_DATA).Range("A1").Offset(r, i).Value + Next i + AA_RAW_DATA(r - 1) = test + + Next r + +End Sub + +Sub TestMain() + initConfig + + Application.ScreenUpdating = False + Application.DisplayAlerts = False + + ResetWs + ReadRawData + ProcessCase4 + ProcessCase3 + ProcessCase2 + ProcessCase1 + + ' Worksheets(WS_REQUIREMENTS).Activate + MsgBox "done" + + Application.ScreenUpdating = True + Application.DisplayAlerts = True + +End Sub + +Sub ResetWs() + Dim i, j As Integer + Dim last_sheet_idx As Integer + last_sheet_idx = Worksheets.Count + + For i = 1 To last_sheet_idx + j = last_sheet_idx + 1 - i + + Dim IsWsRawData As Boolean + Dim IsWsRequirements As Boolean + Dim IsWsDebug as Boolean + + IsWsRawData = Worksheets.Item(j).Name = WS_RAW_DATA + IsWsRequirements = Worksheets.Item(j).Name = WS_REQUIREMENTS + IsWsDebug = Worksheets.item(j).Name = "debug" + + If (IsWsRawData Or IsWsRequirements) Then + Else + Worksheets.Item(j).Delete + End If + Next + + Dim r, table_length As Integer + + table_length = checkTableLength(WS_RAW_DATA) + + For r = 1 To table_length + 10 + Worksheets(WS_RAW_DATA).Range("A1:Z" & CStr(table_length + 10)).Offset(r, 0).Interior.Color = xlNone + Next r + + +End Sub + + + +Function GetRandomColor() + Dim randR As Integer + Dim randG As Integer + Dim randB As Integer + + Randomize + randR = Int((256) * Rnd) + randG = Int((256) * Rnd) + randB = Int((256) * Rnd) + + GetRandomColor = RGB(246, 229, 141) + +End Function + + + + + + + + + + + diff --git a/task4/source/_del/Module1_orginal.bas b/task4/source/_del/Module1_orginal.bas new file mode 100644 index 0000000..68af47b --- /dev/null +++ b/task4/source/_del/Module1_orginal.bas @@ -0,0 +1,879 @@ +Attribute VB_Name = "Module1" + +Option Explicit + +Global I_TABLE_WIDTH As Integer +Global I_TABLE_HEIGHT As Integer + +Global WS_RAW_DATA As String +Global WS_REQUIREMENTS As String +Global WS_CASE1 As String +Global WS_CASE2 As String +Global WS_CASE3 As String +Global WS_CASE4 As String + +Global AA_RAW_DATA(30000) As Variant +Global A_RAW_DATA(99) As String +Global len_raw_data As Integer + +Global temp_ws_case1(30000) As Variant +Global len_temp_ws_case1 As Integer + +Global temp_ws_case2(30000) As Variant +Global len_temp_ws_case2 As Integer + +Global temp_ws_case3(30000) As Variant +Global len_temp_ws_case3 As Integer + +Global temp_ws_case4(30000) As Variant +Global len_temp_ws_case4 As Integer + +Global temp_row(99) As String + +Global COL_O_EXPENSE_NUMBER As Integer +Global COL_O_CLAIMANT_NAME As Integer +Global COL_O_REPORT_SUBMITTED_DATE As Integer +Global COL_O_EXPENSE_REPORT_DATE As Integer +Global COL_O_PURPOSE_1 As Integer +Global COL_O_PURPOSE_2 As Integer +Global COL_O_STATUS As Integer +Global COL_O_AMOUNT_HKD As Integer +Global COL_O_CURRENCY As Integer +Global COL_O_LINE_NUMBER As Integer +Global COL_O_EXPENSE_TYPE As Integer +Global COL_O_LINE_AMOUNT_HKD As Integer +Global COL_O_RECEIPT_AMOUNT_BEFORE_TAX As Integer +Global COL_O_LINE_CURRENCY As Integer +Global COL_O_EXCHANGE_RATE As Integer +Global COL_O_JUSTIFICATION As Integer +Global COL_O_EXPENSE_DATE As Integer +Global COL_O_ALLOCATION_NUMBER As Integer +Global COL_O_ALLOCATION_AMOUNT As Integer +Global COL_O_EXPENSE_ALLOCATION As Integer +Global COL_O_EMPLOYEE_IF_NOT_THE_CLAIMS As Integer +Global COL_O_DEPARTURE_LOCATION As Integer +Global COL_O_DESTINATION As Integer +Global COL_O_MODE_OF_TRANSPORTATION As Integer +Global COL_O_PURPOSE_OF_JOURNEY As Integer +Global COL_O_NAME_OF_GUEST_COMPANY As Integer +Global COL_O_MOST_SENIOR_PARTICIPANT As Integer +Global COL_O_PURPOSE_OF_ENTERTAINMENT As Integer +Global COL_O_COST_PER_HEAD As Integer +Global COL_O_COST_PER_HEAD_BEFORE_TAX As Integer +Global COL_O_NUMBER_OF_PARTICIPANTS As Integer +Global COL_O_NAME_AND_POSITION_OF_PARTICIPANTS As Integer +Global COL_O_TAR_APPROVED_NUMBER As Integer +Global COL_O_REASON_OF_GUEST_NO_DIFF As Integer +Global COL_O_REASON_OF_OTHER_RELATED_EXPENSE As Integer +Global COL_O_ABC_APPROVAL_REFERENCE_NUMBER As Integer +Global COL_O_ADDITIONAL_APPROVER_1 As Integer +Global COL_O_ADDITIONAL_APPROVER_2 As Integer +Global COL_O_EAP_APPROVER_3 As Integer +Global COL_O_ADDITIONAL_APPROVER_4 As Integer +Global COL_O_ADDITIONAL_APPROVER_5 As Integer +Global COL_O_ADDITIONAL_APPROVER_CEO As Integer +Global COL_O_ADDITIONAL_APPROVER_AAE As Integer +Global COL_O_HR_DIVISION_1 As Integer +Global COL_O_HR_DIVISION_2 As Integer +Global COL_O_HR_DIVISION_3 As Integer +Global COL_O_HR_DIVISION_4 As Integer + +Sub initConfig() + + COL_O_EXPENSE_NUMBER = 0 + COL_O_CLAIMANT_NAME = 1 + COL_O_REPORT_SUBMITTED_DATE = 2 + COL_O_EXPENSE_REPORT_DATE = 3 + COL_O_PURPOSE_1 = 4 + COL_O_PURPOSE_2 = 5 + COL_O_STATUS = 6 + COL_O_AMOUNT_HKD = 7 + COL_O_CURRENCY = 8 + COL_O_LINE_NUMBER = 9 + COL_O_EXPENSE_TYPE = 10 + COL_O_LINE_AMOUNT_HKD = 11 + COL_O_RECEIPT_AMOUNT_BEFORE_TAX = 12 + COL_O_LINE_CURRENCY = 13 + COL_O_EXCHANGE_RATE = 14 + COL_O_JUSTIFICATION = 15 + COL_O_EXPENSE_DATE = 16 + COL_O_ALLOCATION_NUMBER = 17 + COL_O_ALLOCATION_AMOUNT = 18 + COL_O_EXPENSE_ALLOCATION = 19 + COL_O_EMPLOYEE_IF_NOT_THE_CLAIMS = 20 + COL_O_DEPARTURE_LOCATION = 21 + COL_O_DESTINATION = 22 + COL_O_MODE_OF_TRANSPORTATION = 23 + COL_O_PURPOSE_OF_JOURNEY = 24 + COL_O_NAME_OF_GUEST_COMPANY = 25 + COL_O_MOST_SENIOR_PARTICIPANT = 26 + COL_O_PURPOSE_OF_ENTERTAINMENT = 27 + COL_O_COST_PER_HEAD = 28 + COL_O_COST_PER_HEAD_BEFORE_TAX = 29 + COL_O_NUMBER_OF_PARTICIPANTS = 30 + COL_O_NAME_AND_POSITION_OF_PARTICIPANTS = 31 + COL_O_TAR_APPROVED_NUMBER = 32 + COL_O_REASON_OF_GUEST_NO_DIFF = 33 + COL_O_REASON_OF_OTHER_RELATED_EXPENSE = 34 + COL_O_ABC_APPROVAL_REFERENCE_NUMBER = 35 + COL_O_ADDITIONAL_APPROVER_1 = 36 + COL_O_ADDITIONAL_APPROVER_2 = 37 + COL_O_EAP_APPROVER_3 = 38 + COL_O_ADDITIONAL_APPROVER_4 = 39 + COL_O_ADDITIONAL_APPROVER_5 = 40 + COL_O_ADDITIONAL_APPROVER_CEO = 41 + COL_O_ADDITIONAL_APPROVER_AAE = 42 + COL_O_HR_DIVISION_1 = 43 + COL_O_HR_DIVISION_2 = 44 + COL_O_HR_DIVISION_3 = 45 + COL_O_HR_DIVISION_4 = 46 + + WS_CASE1 = "Date & Amount" + WS_CASE2 = "Date & Amount & Type" + WS_CASE3 = "Date & Amount & Type & Name" + WS_CASE4 = "Professional Fees" + WS_RAW_DATA = "Raw Data" + WS_REQUIREMENTS = "Requirement" + + I_TABLE_WIDTH = 99 + I_TABLE_HEIGHT = 30000 + + len_temp_ws_case1 = 0 + len_temp_ws_case2 = 0 + len_temp_ws_case3 = 0 + len_temp_ws_case4 = 0 + +End Sub + +Function CheckWsExist(ws_string) + Dim output As Boolean + +On Error GoTo eh + + Dim i As Integer + For i = 1 To Worksheets.Count + If (Worksheets.Item(i).Name = ws_string) Then + CheckWsExist = True + Exit Function + End If + Next i + +Done: + CheckWsExist = False + Exit Function + +eh: + CheckWsExist = False + +End Function + +Sub CreateWsIfNotExist(ws_string) + If (CheckWsExist(ws_string) = False) Then + Dim newSheet As Worksheet + + ' Create a new worksheet and assign it to the variable + Set newSheet = ThisWorkbook.Worksheets.Add(After:=Worksheets(Worksheets.Count)) + + ' Optionally, you can name the new worksheet + newSheet.Name = ws_string + End If +End Sub + +Function checkTableLength(ws_string) + Dim output As Integer + Dim r, c As Integer + + For r = 1 To I_TABLE_HEIGHT + Dim temp As String + temp = Worksheets(ws_string).Range("A1").Offset(r, 0).Value + If temp = "" Then + output = r + Exit For + End If + + Next r + + checkTableLength = output - 1 '- 1 for header +End Function + +Sub CopyRow(src_row, dst_list) + Dim r, c As Integer + + + +End Sub + +Sub CopyRowOriginal(src_sheet, src_row, dst_sheet, dst_row) + Dim r, c As Integer + + For c = 0 To I_TABLE_WIDTH + Worksheets(dst_sheet).Range("A1").Offset(dst_row, c).Value = Worksheets(src_sheet).Range("A1").Offset(src_row, c).Value + + If (dst_row <> 0) Then + Select Case c + Case COL_O_LINE_AMOUNT_HKD + Range("A1").Offset(dst_row, c).NumberFormat = "0.00" + + Case COL_O_EXPENSE_DATE + Worksheets(dst_sheet).Range("A1").Offset(dst_row, c).Value = "'" & Worksheets(src_sheet).Range("A1").Offset(src_row, c).Value + + Case Else + Debug.Print c + End Select + End If + + Next c + +End Sub + + + +' Case 1 +' Situation: +' > If any rows (with different expense number) of both Expense Date (Column Q) and Line Amount (Column L) have the same value +' 1. with different expense number (Column A) +' 2. Expense Date (Column Q) have the same value +' 3. Line Amount (Column L) have the same value + +' Action: +' Create a tab (Name: Date & Amount) and copy and paste the related rows to this tab + +Sub Case1() + MsgBox "Helloworld" +End Sub + +Sub initSheetForCase1() + Dim r, c As Integer + + CreateWsIfNotExist (WS_CASE1) + + Worksheets(WS_CASE1).Range("A1:Z" & CStr(I_TABLE_HEIGHT)).Offset(r, c).Clear + + For c = 0 To 99 + Worksheets(WS_CASE1).Range("A1").Offset(0, c).Value = Worksheets(WS_RAW_DATA).Range("A1").Offset(0, c).Value + Next c +End Sub + +Function CheckFullfillCase1Original(src_wk_sheet, src_row, dst_wk_sheet, dst_row) + Dim output As Boolean + Dim c As Integer + + Dim R_DIFF_EXPENSE_NUM As Boolean + Dim R_SAME_EXPENSE_DATE As Boolean + Dim R_SAME_LINE_AMOUNT As Boolean + Dim R_SAME_EXPENSE_TYPE, R_SAME_CLAIMANT_NAME As Boolean + + output = True + R_DIFF_EXPENSE_NUM = Worksheets(src_wk_sheet).Range("A1").Offset(src_row, COL_O_EXPENSE_NUMBER).Value <> Worksheets(dst_wk_sheet).Range("A1").Offset(dst_row, COL_O_EXPENSE_NUMBER).Value + R_SAME_EXPENSE_DATE = Worksheets(src_wk_sheet).Range("A1").Offset(src_row, COL_O_EXPENSE_DATE).Value = Worksheets(dst_wk_sheet).Range("A1").Offset(dst_row, COL_O_EXPENSE_DATE).Value + R_SAME_LINE_AMOUNT = Worksheets(src_wk_sheet).Range("A1").Offset(src_row, COL_O_LINE_AMOUNT_HKD).Value = Worksheets(dst_wk_sheet).Range("A1").Offset(dst_row, COL_O_LINE_AMOUNT_HKD).Value + + R_SAME_EXPENSE_TYPE = Worksheets(src_wk_sheet).Range("A1").Offset(src_row, COL_O_EXPENSE_TYPE).Value = Worksheets(dst_wk_sheet).Range("A1").Offset(dst_row, COL_O_EXPENSE_TYPE).Value + R_SAME_CLAIMANT_NAME = Worksheets(src_wk_sheet).Range("A1").Offset(src_row, COL_O_CLAIMANT_NAME).Value = Worksheets(dst_wk_sheet).Range("A1").Offset(dst_row, COL_O_CLAIMANT_NAME).Value + + output = R_DIFF_EXPENSE_NUM And R_SAME_EXPENSE_DATE And R_SAME_LINE_AMOUNT And Not (R_SAME_EXPENSE_TYPE Or R_SAME_CLAIMANT_NAME) + + Debug.Print R_DIFF_EXPENSE_NUM + + CheckFullfillCase1 = output +End Function + +Function CheckFullfillCase1(row1, row2) + Dim output As Boolean + Dim c As Integer + + Dim R_DIFF_EXPENSE_NUM As Boolean + Dim R_SAME_EXPENSE_DATE As Boolean + Dim R_SAME_LINE_AMOUNT As Boolean + Dim R_SAME_EXPENSE_TYPE, R_SAME_CLAIMANT_NAME As Boolean + + output = True + + R_DIFF_EXPENSE_NUM = row1(COL_O_EXPENSE_NUMBER) <> row2(COL_O_EXPENSE_NUMBER) + R_SAME_EXPENSE_DATE = row1(COL_O_EXPENSE_DATE) = row2(COL_O_EXPENSE_DATE) + R_SAME_LINE_AMOUNT = row1(COL_O_LINE_AMOUNT_HKD) = row2(COL_O_LINE_AMOUNT_HKD) + ' + R_SAME_EXPENSE_TYPE = row1(COL_O_EXPENSE_TYPE) = row2(COL_O_EXPENSE_TYPE) + R_SAME_CLAIMANT_NAME = row1(COL_O_CLAIMANT_NAME) = row2(COL_O_CLAIMANT_NAME) + + output = R_DIFF_EXPENSE_NUM And R_SAME_EXPENSE_DATE And R_SAME_LINE_AMOUNT And Not (R_SAME_EXPENSE_TYPE Or R_SAME_CLAIMANT_NAME) + + ' Debug.Print R_DIFF_EXPENSE_NUM + Debug.Print "Helloworld" + + CheckFullfillCase1 = output +End Function + +Function CheckOccurInCase1(row_to_check) + Dim output As Boolean + output = False + + Dim r, case1_table_len As Integer + + Dim R_SAME_EXPENSE_NUM As Boolean + Dim R_SAME_EXPENSE_DATE As Boolean + Dim R_SAME_LINE_AMOUNT As Boolean + + For r = 0 To len_temp_ws_case1 - 1 + R_SAME_EXPENSE_NUM = row_to_check(COL_O_EXPENSE_NUMBER) = temp_ws_case1(r)(COL_O_EXPENSE_NUMBER) + R_SAME_EXPENSE_DATE = row_to_check(COL_O_EXPENSE_DATE) = temp_ws_case1(r)(COL_O_EXPENSE_DATE) + R_SAME_LINE_AMOUNT = row_to_check(COL_O_LINE_AMOUNT_HKD) = temp_ws_case1(r)(COL_O_LINE_AMOUNT_HKD) + + If (R_SAME_EXPENSE_NUM And R_SAME_EXPENSE_DATE And R_SAME_LINE_AMOUNT) Then + output = True + Exit For + End If + Next r + + CheckOccurInCase1 = output +End Function + +Sub ProcessCase1() + initSheetForCase1 + + Dim r, r_c1 As Integer + Dim r_fullfill_case1 As Boolean + + Dim last_row_idx, second_last_row_idx As Integer + last_row_idx = len_raw_data - 1 + second_last_row_idx = last_row_idx - 1 + + For r = 0 To (second_last_row_idx) + For r_c1 = (r + 1) To (last_row_idx) + + r_fullfill_case1 = CheckFullfillCase1(AA_RAW_DATA(r), AA_RAW_DATA(r_c1)) + + If (r_fullfill_case1) Then + highlight= GetRandomColor + + Worksheets(WS_RAW_DATA).Range("A1").Offset(r + 1, COL_O_EXPENSE_DATE).Interior.Color = highlight + Worksheets(WS_RAW_DATA).Range("A1").Offset(r + 1, COL_O_LINE_AMOUNT_HKD).Interior.Color = highlight + Worksheets(WS_RAW_DATA).Range("A1").Offset(r_c1 + 1, COL_O_EXPENSE_DATE).Interior.Color = highlight + Worksheets(WS_RAW_DATA).Range("A1").Offset(r_c1 + 1, COL_O_LINE_AMOUNT_HKD).Interior.Color = highlight + + If (CheckOccurInCase1(AA_RAW_DATA(r))) Then + ' if occur in ws_case1, do nothing + Else + temp_ws_case1(len_temp_ws_case1) = AA_RAW_DATA(r) + len_temp_ws_case1 = len_temp_ws_case1 + 1 + End If + + If (CheckOccurInCase1(AA_RAW_DATA(r_c1))) Then + ' if occur in ws_case1, do nothing + Else + temp_ws_case1(len_temp_ws_case1) = AA_RAW_DATA(r_c1) + len_temp_ws_case1 = len_temp_ws_case1 + 1 + End If + End If + + Next r_c1 + Next r + + For r = 0 To (len_temp_ws_case1 - 1) + For r_c1 = 0 To 99 + Worksheets(WS_CASE1).Range("A1").Offset(r + 1, r_c1).Value = temp_ws_case1(r)(r_c1) + Next r_c1 + Next r + + Worksheets(WS_CASE1).Range("A1:Z" & 99).Columns.AutoFit + Worksheets(WS_CASE1).Range("A2:Z" & 99).Interior.Color = xlNone + +End Sub + + + +' Case 2 +' Situation: +' > If any rows (with different expense number) of Expense Date (Column Q), Line Amount (Column L) and Expense Type (Column K) have the same value +' 1. with different expense number (Column A) +' 2. Expense Date (Column Q) have the same value +' 3. Line Amount (Column L) have the same value +' 4. Expense Type (Column K) have the same value + +' Action: +' Create a tab (Name: Date & Amount & Type) and copy and paste the related rows to this tab + + +Sub Case2() + MsgBox "Helloworld" +End Sub + +Sub initSheetForCase2() + Dim r, c As Integer + + CreateWsIfNotExist (WS_CASE2) + + Worksheets(WS_CASE2).Range("A1:Z" & CStr(I_TABLE_HEIGHT)).Offset(r, c).Clear + + + For c = 0 To 99 + Worksheets(WS_CASE2).Range("A1").Offset(0, c).Value = Worksheets(WS_RAW_DATA).Range("A1").Offset(0, c).Value + Next c +End Sub + +Function CheckFullfillCase2(row1, row2) + Dim output As Boolean + Dim c As Integer + + Dim R_DIFF_EXPENSE_NUM As Boolean + Dim R_SAME_EXPENSE_DATE As Boolean + Dim R_SAME_LINE_AMOUNT As Boolean + Dim R_SAME_EXPENSE_TYPE As Boolean + + Dim R_SAME_CLAIMANT_NAME, R_EXPENSE_TYPE_PROF_FEE As Boolean + + output = True + R_DIFF_EXPENSE_NUM = row1(COL_O_EXPENSE_NUMBER) <> row2(COL_O_EXPENSE_NUMBER) + R_SAME_EXPENSE_DATE = row1(COL_O_EXPENSE_DATE) = row2(COL_O_EXPENSE_DATE) + R_SAME_LINE_AMOUNT = row1(COL_O_LINE_AMOUNT_HKD) = row2(COL_O_LINE_AMOUNT_HKD) + R_SAME_EXPENSE_TYPE = row1(COL_O_EXPENSE_TYPE) = row2(COL_O_EXPENSE_TYPE) + + R_SAME_CLAIMANT_NAME = row1(COL_O_CLAIMANT_NAME) = row2(COL_O_CLAIMANT_NAME) + R_EXPENSE_TYPE_PROF_FEE = row1(COL_O_EXPENSE_TYPE) = "PROF.FEE" + + output = R_DIFF_EXPENSE_NUM And R_SAME_EXPENSE_DATE And R_SAME_LINE_AMOUNT And R_SAME_EXPENSE_TYPE And Not (R_SAME_CLAIMANT_NAME Or R_EXPENSE_TYPE_PROF_FEE) + + CheckFullfillCase2 = output +End Function + +Function CheckOccurInCase2(row_to_check) + Dim output As Boolean + output = False + + Dim r, case2_table_len As Integer + + Dim R_SAME_EXPENSE_NUM As Boolean + Dim R_SAME_EXPENSE_DATE As Boolean + Dim R_SAME_LINE_AMOUNT As Boolean + Dim R_SAME_EXPENSE_TYPE As Boolean + + For r = 1 To len_temp_ws_case2 - 1 + R_SAME_EXPENSE_NUM = row_to_check(COL_O_EXPENSE_NUMBER) = temp_ws_case2(r)(COL_O_EXPENSE_NUMBER) + R_SAME_EXPENSE_DATE = row_to_check(COL_O_EXPENSE_DATE) = temp_ws_case2(r)(COL_O_EXPENSE_DATE) + R_SAME_LINE_AMOUNT = row_to_check(COL_O_LINE_AMOUNT_HKD) = temp_ws_case2(r)(COL_O_LINE_AMOUNT_HKD) + R_SAME_EXPENSE_TYPE = row_to_check(COL_O_EXPENSE_TYPE) = temp_ws_case2(r)(COL_O_EXPENSE_TYPE) + + If (R_SAME_EXPENSE_NUM And R_SAME_EXPENSE_DATE And R_SAME_LINE_AMOUNT And R_SAME_EXPENSE_TYPE) Then + output = True + Exit For + End If + Next r + + CheckOccurInCase2 = output +End Function + +Sub ProcessCase2() + initSheetForCase2 + + Dim r, r_c1 As Integer + Dim r_fullfill_case2 As Boolean + + Dim last_row_idx, second_last_row_idx As Integer + last_row_idx = len_raw_data - 1 + second_last_row_idx = last_row_idx - 1 + + For r = 0 To (second_last_row_idx) + For r_c1 = (r + 1) To (last_row_idx) + r_fullfill_case2 = CheckFullfillCase2(AA_RAW_DATA(r), AA_RAW_DATA(r_c1)) + + If (r_fullfill_case2) Then + highlight= GetRandomColor + + If (CheckOccurInCase2(AA_RAW_DATA(r))) Then + ' if occur in ws_case2, do nothing + Else + temp_ws_case2(len_temp_ws_case2) = AA_RAW_DATA(r) + len_temp_ws_case2 = len_temp_ws_case2 + 1 + + Worksheets(WS_RAW_DATA).Range("A1").Offset(r + 1, COL_O_EXPENSE_DATE).Interior.Color = highlight + Worksheets(WS_RAW_DATA).Range("A1").Offset(r + 1, COL_O_LINE_AMOUNT_HKD).Interior.Color = highlight + Worksheets(WS_RAW_DATA).Range("A1").Offset(r + 1, COL_O_EXPENSE_TYPE).Interior.Color = highlight + End If + + If (CheckOccurInCase2(AA_RAW_DATA(r_c1))) Then + ' if occur in ws_case2, do nothing + Else + temp_ws_case2(len_temp_ws_case2) = AA_RAW_DATA(r_c1) + len_temp_ws_case2 = len_temp_ws_case2 + 1 + + Worksheets(WS_RAW_DATA).Range("A1").Offset(r_c1 + 1, COL_O_EXPENSE_DATE).Interior.Color = highlight + Worksheets(WS_RAW_DATA).Range("A1").Offset(r_c1 + 1, COL_O_LINE_AMOUNT_HKD).Interior.Color = highlight + Worksheets(WS_RAW_DATA).Range("A1").Offset(r_c1 + 1, COL_O_EXPENSE_TYPE).Interior.Color = highlight + End If + + End If + + Next r_c1 + + Next r + + For r = 0 To (len_temp_ws_case2 - 1) + For r_c1 = 0 To 99 + Worksheets(WS_CASE2).Range("A1").Offset(r + 1, r_c1).Value = temp_ws_case2(r)(r_c1) + Next r_c1 + Next r + + Worksheets(WS_CASE2).Range("A1:Z" & 99).Columns.AutoFit + Worksheets(WS_CASE2).Range("A2:Z" & 99).Interior.Color = xlNone + +End Sub + +' Case 3 +' Situation: +' > If any rows (with different expense number) of Expense Date (Column Q), Line Amount (Column L), Expense Type (Column K) and Claimant Name (Column B) have the same value +' 1. with different expense number (Column A) +' 2. Expense Date (Column Q) have the same value +' 3. Line Amount (Column L) have the same value +' 4. Expense Type (Column K) have the same value +' 5. Claimant Name (Column B) have the same value + +' Action: +' Create a tab (Name: Date & Amount & Type & Name) and copy and paste the related rows to this tab + +Sub Case3() + MsgBox "Helloworld" +End Sub + +Sub initSheetForCase3() + Dim r, c As Integer + + CreateWsIfNotExist (WS_CASE3) + + Worksheets(WS_CASE3).Range("A1:Z" & CStr(I_TABLE_HEIGHT)).Offset(r, c).Clear + + For c = 0 To 99 + Worksheets(WS_CASE3).Range("A1").Offset(0, c).Value = Worksheets(WS_RAW_DATA).Range("A1").Offset(0, c).Value + Next c +End Sub + +Function CheckFullfillCase3(row1, row2) + Dim output As Boolean + Dim c As Integer + + Dim R_DIFF_EXPENSE_NUM As Boolean + Dim R_SAME_EXPENSE_DATE As Boolean + Dim R_SAME_LINE_AMOUNT As Boolean + Dim R_SAME_EXPENSE_TYPE As Boolean + Dim R_SAME_CLAIMANT_NAME As Boolean + Dim R_EXPENSE_TYPE_PROF_FEE As Boolean + + output = True + R_DIFF_EXPENSE_NUM = row1(COL_O_EXPENSE_NUMBER) <> row2(COL_O_EXPENSE_NUMBER) + R_SAME_EXPENSE_DATE = row1(COL_O_EXPENSE_DATE) = row2(COL_O_EXPENSE_DATE) + R_SAME_LINE_AMOUNT = row1(COL_O_LINE_AMOUNT_HKD) = row2(COL_O_LINE_AMOUNT_HKD) + R_SAME_EXPENSE_TYPE = row1(COL_O_EXPENSE_TYPE) = row2(COL_O_EXPENSE_TYPE) + R_SAME_CLAIMANT_NAME = row1(COL_O_CLAIMANT_NAME) = row2(COL_O_CLAIMANT_NAME) + ' + R_EXPENSE_TYPE_PROF_FEE = row1(COL_O_EXPENSE_TYPE) = "PROF.FEE" + + output = R_DIFF_EXPENSE_NUM And R_SAME_EXPENSE_DATE And R_SAME_LINE_AMOUNT And R_SAME_EXPENSE_TYPE And R_SAME_CLAIMANT_NAME And Not (R_EXPENSE_TYPE_PROF_FEE) + + Debug.Print R_DIFF_EXPENSE_NUM + + CheckFullfillCase3 = output +End Function + +Function CheckOccurInCase3(row_to_check) + Dim output As Boolean + output = False + + Dim r As Integer + + Dim R_SAME_EXPENSE_NUM As Boolean + Dim R_SAME_EXPENSE_DATE As Boolean + Dim R_SAME_LINE_AMOUNT As Boolean + Dim R_SAME_EXPENSE_TYPE As Boolean + Dim R_SAME_CLAIMANT_NAME As Boolean + + For r = 0 To len_temp_ws_case3 - 1 + R_SAME_EXPENSE_DATE = row_to_check(COL_O_EXPENSE_DATE) = temp_ws_case3(r)(COL_O_EXPENSE_DATE) + R_SAME_EXPENSE_NUM = row_to_check(COL_O_EXPENSE_NUMBER) = temp_ws_case3(r)(COL_O_EXPENSE_NUMBER) + + R_SAME_LINE_AMOUNT = row_to_check(COL_O_LINE_AMOUNT_HKD) = temp_ws_case3(r)(COL_O_LINE_AMOUNT_HKD) + R_SAME_EXPENSE_TYPE = row_to_check(COL_O_EXPENSE_TYPE) = temp_ws_case3(r)(COL_O_EXPENSE_TYPE) + R_SAME_CLAIMANT_NAME = row_to_check(COL_O_CLAIMANT_NAME) = temp_ws_case3(r)(COL_O_CLAIMANT_NAME) + + If (R_SAME_EXPENSE_NUM And R_SAME_EXPENSE_DATE And R_SAME_LINE_AMOUNT And R_SAME_EXPENSE_TYPE And R_SAME_CLAIMANT_NAME) Then + output = True + Exit For + End If + Next r + + CheckOccurInCase3 = output +End Function + +Sub ProcessCase3() + initSheetForCase3 + + Dim r, r_c1 As Integer + Dim r_fullfill_case3 As Boolean + + Dim last_row_idx, second_last_row_idx As Integer + last_row_idx = len_raw_data - 1 + second_last_row_idx = last_row_idx - 1 + + For r = 0 To (second_last_row_idx) + For r_c1 = (r + 1) To (last_row_idx) + + r_fullfill_case3 = CheckFullfillCase3(AA_RAW_DATA(r), AA_RAW_DATA(r_c1)) + + If (r_fullfill_case3) Then + highlight= GetRandomColor + + If (CheckOccurInCase3(AA_RAW_DATA(r))) Then + ' if occur in ws_case3, do nothing + Else + temp_ws_case3(len_temp_ws_case3) = AA_RAW_DATA(r) + len_temp_ws_case3 = len_temp_ws_case3 + 1 + + Worksheets(WS_RAW_DATA).Range("A1").Offset(r + 1, COL_O_EXPENSE_DATE).Interior.Color = highlight + Worksheets(WS_RAW_DATA).Range("A1").Offset(r + 1, COL_O_LINE_AMOUNT_HKD).Interior.Color = highlight + Worksheets(WS_RAW_DATA).Range("A1").Offset(r + 1, COL_O_EXPENSE_TYPE).Interior.Color = highlight + Worksheets(WS_RAW_DATA).Range("A1").Offset(r + 1, COL_O_CLAIMANT_NAME).Interior.Color = highlight + End If + + If (CheckOccurInCase3(AA_RAW_DATA(r_c1))) Then + ' if occur in ws_case3, do nothing + Else + temp_ws_case3(len_temp_ws_case3) = AA_RAW_DATA(r_c1) + len_temp_ws_case3 = len_temp_ws_case3 + 1 + + Worksheets(WS_RAW_DATA).Range("A1").Offset(r_c1 + 1, COL_O_EXPENSE_DATE).Interior.Color = highlight + Worksheets(WS_RAW_DATA).Range("A1").Offset(r_c1 + 1, COL_O_LINE_AMOUNT_HKD).Interior.Color = highlight + Worksheets(WS_RAW_DATA).Range("A1").Offset(r_c1 + 1, COL_O_EXPENSE_TYPE).Interior.Color = highlight + Worksheets(WS_RAW_DATA).Range("A1").Offset(r_c1 + 1, COL_O_CLAIMANT_NAME).Interior.Color = highlight + End If + + End If + + Next r_c1 + + Next r + + For r = 0 To (len_temp_ws_case3 - 1) + For r_c1 = 0 To 99 + Worksheets(WS_CASE3).Range("A1").Offset(r + 1, r_c1).Value = temp_ws_case3(r)(r_c1) + Next r_c1 + Next r + + Worksheets(WS_CASE3).Range("A1:Z" & 99).Columns.AutoFit + Worksheets(WS_CASE3).Range("A2:Z" & 99).Interior.Color = xlNone + +End Sub + +' Case 4 +' Situation: +' > If Expense Type (Column K) contains PROF.FEE, and; If any rows (with different expense number) of Claimant Name (Column B) have the same value +' 1. If Expense Type (Column K) contains PROF.FEE +' 2. with different expense number (Column A) +' 3. Claimant Name (Column B) have the same value) + +' Action: +' Create a tab (Name: Professional Fees) and copy and paste the related rows to this tab + +Sub Case4() + MsgBox "Helloworld" +End Sub + +Sub initSheetForCase4() + Dim r, c As Integer + + CreateWsIfNotExist (WS_CASE4) + + Worksheets(WS_CASE4).Range("A1:Z" & CStr(I_TABLE_HEIGHT)).Offset(r, c).Clear + + For c = 0 To 99 + Worksheets(WS_CASE4).Range("A1").Offset(0, c).Value = Worksheets(WS_RAW_DATA).Range("A1").Offset(0, c).Value + Next c +End Sub + +Function CheckFullfillCase4(row1, row2) + Dim output As Boolean + Dim c As Integer + + Dim R_DIFF_EXPENSE_NUM As Boolean + Dim R_EXPENSE_TYPE_PROF_FEE As Boolean + Dim R_SAME_CLAIMANT_NAME As Boolean + + output = True + R_DIFF_EXPENSE_NUM = row1(COL_O_EXPENSE_NUMBER) <> row2(COL_O_EXPENSE_NUMBER) + R_EXPENSE_TYPE_PROF_FEE = row1(COL_O_EXPENSE_TYPE) = "PROF.FEE" + R_SAME_CLAIMANT_NAME = row1(COL_O_CLAIMANT_NAME) = row2(COL_O_CLAIMANT_NAME) + + output = R_DIFF_EXPENSE_NUM And R_EXPENSE_TYPE_PROF_FEE And R_SAME_CLAIMANT_NAME + + CheckFullfillCase4 = output +End Function + +Function CheckOccurInCase4(row_to_check) + Dim output As Boolean + output = False + + Dim r As Integer + + Dim R_SAME_EXPENSE_NUM As Boolean + Dim R_SAME_CLAIMANT_NAME As Boolean + + For r = 0 To len_temp_ws_case4 - 1 + R_SAME_EXPENSE_NUM = row_to_check(COL_O_EXPENSE_NUMBER) = temp_ws_case4(r)(COL_O_EXPENSE_NUMBER) + R_SAME_CLAIMANT_NAME = row_to_check(COL_O_CLAIMANT_NAME) = temp_ws_case4(r)(COL_O_CLAIMANT_NAME) + + If (R_SAME_EXPENSE_NUM And R_SAME_CLAIMANT_NAME) Then + output = True + Exit For + End If + Next r + + CheckOccurInCase4 = output +End Function + +Sub ProcessCase4() + initSheetForCase4 + + Dim r, r_c1 As Integer + Dim r_fullfill_case4 As Boolean + + Dim last_row_idx, second_last_row_idx As Integer + last_row_idx = len_raw_data - 1 + second_last_row_idx = last_row_idx - 1 + + For r = 0 To (second_last_row_idx) + For r_c1 = (r + 1) To (last_row_idx) + + r_fullfill_case4 = CheckFullfillCase4(AA_RAW_DATA(r), AA_RAW_DATA(r_c1)) + + If (r_fullfill_case4) Then + highlight= GetRandomColor + + If (CheckOccurInCase4(AA_RAW_DATA(r))) Then + ' if occur in ws_case4, do nothing + Else + temp_ws_case4(len_temp_ws_case4) = AA_RAW_DATA(r) + len_temp_ws_case4 = len_temp_ws_case4 + 1 + + Worksheets(WS_RAW_DATA).Range("A1").Offset(r + 1, COL_O_EXPENSE_TYPE).Interior.Color = highlight + Worksheets(WS_RAW_DATA).Range("A1").Offset(r + 1, COL_O_CLAIMANT_NAME).Interior.Color = highlight + End If + + If (CheckOccurInCase4(AA_RAW_DATA(r_c1))) Then + ' if occur in ws_case4, do nothing + Else + temp_ws_case4(len_temp_ws_case4) = AA_RAW_DATA(r_c1) + len_temp_ws_case4 = len_temp_ws_case4 + 1 + + Worksheets(WS_RAW_DATA).Range("A1").Offset(r_c1 + 1, COL_O_EXPENSE_TYPE).Interior.Color = highlight + Worksheets(WS_RAW_DATA).Range("A1").Offset(r_c1 + 1, COL_O_CLAIMANT_NAME).Interior.Color = highlight + End If + + End If + + Next r_c1 + + Next r + + For r = 0 To (len_temp_ws_case4 - 1) + For r_c1 = 0 To 99 + Worksheets(WS_CASE4).Range("A1").Offset(r + 1, r_c1).Value = temp_ws_case4(r)(r_c1) + Next r_c1 + Next r + + Worksheets(WS_CASE4).Range("A1:Z" & 99).Columns.AutoFit + Worksheets(WS_CASE4).Range("A2:Z" & 99).Interior.Color = xlNone + +End Sub + +Sub ReadRawData() + Dim r, i, j, k As Integer + + len_raw_data = checkTableLength(WS_RAW_DATA) + + For r = 1 To len_raw_data + Dim test(99) As String + + For i = 0 To 99 + test(i) = Worksheets(WS_RAW_DATA).Range("A1").Offset(r, i).Value + Next i + AA_RAW_DATA(r - 1) = test + + Next r + +End Sub + +Sub TestMain() + initConfig + + Application.ScreenUpdating = False + Application.DisplayAlerts = False + + ResetWs + ReadRawData + ' ProcessCase4 + ' ProcessCase3 + ' ProcessCase2 + ProcessCase1 + + ' Worksheets(WS_REQUIREMENTS).Activate + MsgBox "done" + + Application.ScreenUpdating = True + Application.DisplayAlerts = True + +End Sub + +Sub ResetWs() + Dim i, j As Integer + Dim last_sheet_idx As Integer + last_sheet_idx = Worksheets.Count + + For i = 1 To last_sheet_idx + j = last_sheet_idx + 1 - i + + Dim IsWsRawData As Boolean + Dim IsWsRequirements As Boolean + + IsWsRawData = Worksheets.Item(j).Name = WS_RAW_DATA + IsWsRequirements = Worksheets.Item(j).Name = WS_REQUIREMENTS + + If (IsWsRawData Or IsWsRequirements) Then + Else + Worksheets.Item(j).Delete + End If + Next + + Dim r, table_length As Integer + + table_length = checkTableLength(WS_RAW_DATA) + + For r = 1 To table_length + 10 + Worksheets(WS_RAW_DATA).Range("A1:Z" & CStr(table_length + 10)).Offset(r, 0).Interior.Color = xlNone + Next r + + +End Sub + + + +Function GetRandomColor() + Dim randR As Integer + Dim randG As Integer + Dim randB As Integer + + Randomize + randR = Int((256) * Rnd) + randG = Int((256) * Rnd) + randB = Int((256) * Rnd) + + GetRandomColor = RGB(246, 229, 141) + +End Function + + + + + + + + + + + diff --git a/task4/source/dev.bat b/task4/source/dev.bat new file mode 100644 index 0000000..1b9ed21 --- /dev/null +++ b/task4/source/dev.bat @@ -0,0 +1,3 @@ +del Module1.bas + +xlwings vba edit --file .\slow\Expense_Report_trunk.xlsm diff --git a/task4/source/fast/Expense_Report_trunk_f.xlsm b/task4/source/fast/Expense_Report_trunk_f.xlsm new file mode 100644 index 0000000..a73ef6e Binary files /dev/null and b/task4/source/fast/Expense_Report_trunk_f.xlsm differ diff --git a/task4/source/slow/Expense_Report_trunk.xlsm b/task4/source/slow/Expense_Report_trunk.xlsm new file mode 100644 index 0000000..bd21e99 Binary files /dev/null and b/task4/source/slow/Expense_Report_trunk.xlsm differ diff --git a/task4/source/slow/Expense_Report_trunk_working.xlsm b/task4/source/slow/Expense_Report_trunk_working.xlsm new file mode 100644 index 0000000..62379c3 Binary files /dev/null and b/task4/source/slow/Expense_Report_trunk_working.xlsm differ diff --git a/task4/source/slow/Module1.bas b/task4/source/slow/Module1.bas new file mode 100644 index 0000000..e31fc9e --- /dev/null +++ b/task4/source/slow/Module1.bas @@ -0,0 +1,804 @@ +Attribute VB_Name = "Module1" + +Option Explicit + +Global I_TABLE_WIDTH As Integer +Global I_TABLE_HEIGHT As Integer + +Global WS_RAW_DATA As String +Global WS_REQUIREMENTS As String +Global WS_CASE1 As String +Global WS_CASE2 As String +Global WS_CASE3 As String +Global WS_CASE4 As String + +Global AA_RAW_DATA(30000) As Variant +Global A_RAW_DATA(99) As String +Global len_raw_data As Integer + +Global temp_ws_case1(30000) As Variant +Global len_temp_ws_case1 As Integer + +Global temp_ws_case2(30000) As Variant +Global len_temp_ws_case2 As Integer + +Global temp_ws_case3(30000) As Variant +Global len_temp_ws_case3 As Integer + +Global temp_ws_case4(30000) As Variant +Global len_temp_ws_case4 As Integer + +Global temp_row(99) As String + +Global COL_O_EXPENSE_NUMBER As Integer +Global COL_O_CLAIMANT_NAME As Integer +Global COL_O_REPORT_SUBMITTED_DATE As Integer +Global COL_O_EXPENSE_REPORT_DATE As Integer +Global COL_O_PURPOSE_1 As Integer +Global COL_O_PURPOSE_2 As Integer +Global COL_O_STATUS As Integer +Global COL_O_AMOUNT_HKD As Integer +Global COL_O_CURRENCY As Integer +Global COL_O_LINE_NUMBER As Integer +Global COL_O_EXPENSE_TYPE As Integer +Global COL_O_LINE_AMOUNT_HKD As Integer +Global COL_O_RECEIPT_AMOUNT_BEFORE_TAX As Integer +Global COL_O_LINE_CURRENCY As Integer +Global COL_O_EXCHANGE_RATE As Integer +Global COL_O_JUSTIFICATION As Integer +Global COL_O_EXPENSE_DATE As Integer +Global COL_O_ALLOCATION_NUMBER As Integer +Global COL_O_ALLOCATION_AMOUNT As Integer +Global COL_O_EXPENSE_ALLOCATION As Integer +Global COL_O_EMPLOYEE_IF_NOT_THE_CLAIMS As Integer +Global COL_O_DEPARTURE_LOCATION As Integer +Global COL_O_DESTINATION As Integer +Global COL_O_MODE_OF_TRANSPORTATION As Integer +Global COL_O_PURPOSE_OF_JOURNEY As Integer +Global COL_O_NAME_OF_GUEST_COMPANY As Integer +Global COL_O_MOST_SENIOR_PARTICIPANT As Integer +Global COL_O_PURPOSE_OF_ENTERTAINMENT As Integer +Global COL_O_COST_PER_HEAD As Integer +Global COL_O_COST_PER_HEAD_BEFORE_TAX As Integer +Global COL_O_NUMBER_OF_PARTICIPANTS As Integer +Global COL_O_NAME_AND_POSITION_OF_PARTICIPANTS As Integer +Global COL_O_TAR_APPROVED_NUMBER As Integer +Global COL_O_REASON_OF_GUEST_NO_DIFF As Integer +Global COL_O_REASON_OF_OTHER_RELATED_EXPENSE As Integer +Global COL_O_ABC_APPROVAL_REFERENCE_NUMBER As Integer +Global COL_O_ADDITIONAL_APPROVER_1 As Integer +Global COL_O_ADDITIONAL_APPROVER_2 As Integer +Global COL_O_EAP_APPROVER_3 As Integer +Global COL_O_ADDITIONAL_APPROVER_4 As Integer +Global COL_O_ADDITIONAL_APPROVER_5 As Integer +Global COL_O_ADDITIONAL_APPROVER_CEO As Integer +Global COL_O_ADDITIONAL_APPROVER_AAE As Integer +Global COL_O_HR_DIVISION_1 As Integer +Global COL_O_HR_DIVISION_2 As Integer +Global COL_O_HR_DIVISION_3 As Integer +Global COL_O_HR_DIVISION_4 As Integer + +Sub initConfig() + + COL_O_EXPENSE_NUMBER = 0 + COL_O_CLAIMANT_NAME = 1 + COL_O_REPORT_SUBMITTED_DATE = 2 + COL_O_EXPENSE_REPORT_DATE = 3 + COL_O_PURPOSE_1 = 4 + COL_O_PURPOSE_2 = 5 + COL_O_STATUS = 6 + COL_O_AMOUNT_HKD = 7 + COL_O_CURRENCY = 8 + COL_O_LINE_NUMBER = 9 + COL_O_EXPENSE_TYPE = 10 + COL_O_LINE_AMOUNT_HKD = 11 + COL_O_RECEIPT_AMOUNT_BEFORE_TAX = 12 + COL_O_LINE_CURRENCY = 13 + COL_O_EXCHANGE_RATE = 14 + COL_O_JUSTIFICATION = 15 + COL_O_EXPENSE_DATE = 16 + COL_O_ALLOCATION_NUMBER = 17 + COL_O_ALLOCATION_AMOUNT = 18 + COL_O_EXPENSE_ALLOCATION = 19 + COL_O_EMPLOYEE_IF_NOT_THE_CLAIMS = 20 + COL_O_DEPARTURE_LOCATION = 21 + COL_O_DESTINATION = 22 + COL_O_MODE_OF_TRANSPORTATION = 23 + COL_O_PURPOSE_OF_JOURNEY = 24 + COL_O_NAME_OF_GUEST_COMPANY = 25 + COL_O_MOST_SENIOR_PARTICIPANT = 26 + COL_O_PURPOSE_OF_ENTERTAINMENT = 27 + COL_O_COST_PER_HEAD = 28 + COL_O_COST_PER_HEAD_BEFORE_TAX = 29 + COL_O_NUMBER_OF_PARTICIPANTS = 30 + COL_O_NAME_AND_POSITION_OF_PARTICIPANTS = 31 + COL_O_TAR_APPROVED_NUMBER = 32 + COL_O_REASON_OF_GUEST_NO_DIFF = 33 + COL_O_REASON_OF_OTHER_RELATED_EXPENSE = 34 + COL_O_ABC_APPROVAL_REFERENCE_NUMBER = 35 + COL_O_ADDITIONAL_APPROVER_1 = 36 + COL_O_ADDITIONAL_APPROVER_2 = 37 + COL_O_EAP_APPROVER_3 = 38 + COL_O_ADDITIONAL_APPROVER_4 = 39 + COL_O_ADDITIONAL_APPROVER_5 = 40 + COL_O_ADDITIONAL_APPROVER_CEO = 41 + COL_O_ADDITIONAL_APPROVER_AAE = 42 + COL_O_HR_DIVISION_1 = 43 + COL_O_HR_DIVISION_2 = 44 + COL_O_HR_DIVISION_3 = 45 + COL_O_HR_DIVISION_4 = 46 + + WS_CASE1 = "Date & Amount" + WS_CASE2 = "Date & Amount & Type" + WS_CASE3 = "Date & Amount & Type & Name" + WS_CASE4 = "Professional Fees" + WS_RAW_DATA = "Raw Data" + WS_REQUIREMENTS = "Requirement" + + I_TABLE_WIDTH = 99 + I_TABLE_HEIGHT = 30000 + + len_temp_ws_case1 = 0 + len_temp_ws_case2 = 0 + len_temp_ws_case3 = 0 + len_temp_ws_case4 = 0 + +End Sub + +Function CheckWsExist(ws_string) + Dim output As Boolean + +On Error GoTo eh + + Dim i As Integer + For i = 1 To Worksheets.Count + If (Worksheets.Item(i).Name = ws_string) Then + CheckWsExist = True + Exit Function + End If + Next i + +Done: + CheckWsExist = False + Exit Function + +eh: + CheckWsExist = False + +End Function + +Sub CreateWsIfNotExist(ws_string) + If (CheckWsExist(ws_string) = False) Then + Dim newSheet As Worksheet + + ' Create a new worksheet and assign it to the variable + Set newSheet = ThisWorkbook.Worksheets.Add(After:=Worksheets(Worksheets.Count)) + + ' Optionally, you can name the new worksheet + newSheet.Name = ws_string + End If +End Sub + +Function checkTableLength(ws_string) + Dim output As Integer + Dim r, c As Integer + + For r = 1 To I_TABLE_HEIGHT + Dim temp As String + temp = Worksheets(ws_string).Range("A1").Offset(r, 0).Value + If temp = "" Then + output = r + Exit For + End If + + Next r + + checkTableLength = output - 1 '- 1 for header +End Function + +' Case 1 +' Situation: +' > If any rows (with different expense number) of both Expense Date (Column Q) and Line Amount (Column L) have the same value +' 1. with different expense number (Column A) +' 2. Expense Date (Column Q) have the same value +' 3. Line Amount (Column L) have the same value + +' Action: +' Create a tab (Name: Date & Amount) and copy and paste the related rows to this tab + +Sub Case1() + MsgBox "Helloworld" +End Sub + +Sub initSheetForCase1() + Dim r, c As Integer + + CreateWsIfNotExist (WS_CASE1) + + Worksheets(WS_CASE1).Range("A1:Z" & CStr(I_TABLE_HEIGHT)).Offset(r, c).Clear + + For c = 0 To 99 + Worksheets(WS_CASE1).Range("A1").Offset(0, c).Value = Worksheets(WS_RAW_DATA).Range("A1").Offset(0, c).Value + Next c +End Sub + + +Function CheckFullfillCase1(row1, row2) + Dim output As Boolean + Dim c As Integer + + Dim R_DIFF_EXPENSE_NUM As Boolean + Dim R_SAME_EXPENSE_DATE As Boolean + Dim R_SAME_LINE_AMOUNT As Boolean + Dim R_SAME_EXPENSE_TYPE, R_SAME_CLAIMANT_NAME As Boolean + + output = True + + R_DIFF_EXPENSE_NUM = row1(COL_O_EXPENSE_NUMBER) <> row2(COL_O_EXPENSE_NUMBER) + R_SAME_EXPENSE_DATE = row1(COL_O_EXPENSE_DATE) = row2(COL_O_EXPENSE_DATE) + R_SAME_LINE_AMOUNT = row1(COL_O_LINE_AMOUNT_HKD) = row2(COL_O_LINE_AMOUNT_HKD) + ' + R_SAME_EXPENSE_TYPE = row1(COL_O_EXPENSE_TYPE) = row2(COL_O_EXPENSE_TYPE) + R_SAME_CLAIMANT_NAME = row1(COL_O_CLAIMANT_NAME) = row2(COL_O_CLAIMANT_NAME) + + output = R_DIFF_EXPENSE_NUM And R_SAME_EXPENSE_DATE And R_SAME_LINE_AMOUNT And Not (R_SAME_EXPENSE_TYPE Or R_SAME_CLAIMANT_NAME) + + ' Debug.Print R_DIFF_EXPENSE_NUM + Debug.Print "Helloworld" + + CheckFullfillCase1 = output +End Function + +Function CheckOccurInCase1(row_to_check) + Dim output As Boolean + output = False + + Dim r, case1_table_len As Integer + + Dim R_SAME_EXPENSE_NUM As Boolean + Dim R_SAME_EXPENSE_DATE As Boolean + Dim R_SAME_LINE_AMOUNT As Boolean + + For r = 0 To len_temp_ws_case1 - 1 + R_SAME_EXPENSE_NUM = row_to_check(COL_O_EXPENSE_NUMBER) = temp_ws_case1(r)(COL_O_EXPENSE_NUMBER) + R_SAME_EXPENSE_DATE = row_to_check(COL_O_EXPENSE_DATE) = temp_ws_case1(r)(COL_O_EXPENSE_DATE) + R_SAME_LINE_AMOUNT = row_to_check(COL_O_LINE_AMOUNT_HKD) = temp_ws_case1(r)(COL_O_LINE_AMOUNT_HKD) + + If (R_SAME_EXPENSE_NUM And R_SAME_EXPENSE_DATE And R_SAME_LINE_AMOUNT) Then + output = True + Exit For + End If + Next r + + CheckOccurInCase1 = output +End Function + +Sub ProcessCase1() + initSheetForCase1 + + Dim r, r_c1 As Integer + Dim r_fullfill_case1 As Boolean + + Dim last_row_idx, second_last_row_idx As Integer + last_row_idx = len_raw_data - 1 + second_last_row_idx = last_row_idx - 1 + + For r = 0 To (second_last_row_idx) + For r_c1 = (r + 1) To (last_row_idx) + + r_fullfill_case1 = CheckFullfillCase1(AA_RAW_DATA(r), AA_RAW_DATA(r_c1)) + + If (r_fullfill_case1) Then + If (CheckOccurInCase1(AA_RAW_DATA(r))) Then + ' if occur in ws_case1, do nothing + Else + temp_ws_case1(len_temp_ws_case1) = AA_RAW_DATA(r) + len_temp_ws_case1 = len_temp_ws_case1 + 1 + + Worksheets(WS_RAW_DATA).Range("A1").Offset(r + 1, COL_O_EXPENSE_DATE).Interior.Color = GetRandomColor + Worksheets(WS_RAW_DATA).Range("A1").Offset(r + 1, COL_O_LINE_AMOUNT_HKD).Interior.Color = GetRandomColor + End If + + If (CheckOccurInCase1(AA_RAW_DATA(r_c1))) Then + ' if occur in ws_case1, do nothing + Else + temp_ws_case1(len_temp_ws_case1) = AA_RAW_DATA(r_c1) + len_temp_ws_case1 = len_temp_ws_case1 + 1 + + Worksheets(WS_RAW_DATA).Range("A1").Offset(r_c1 + 1, COL_O_EXPENSE_DATE).Interior.Color = GetRandomColor + Worksheets(WS_RAW_DATA).Range("A1").Offset(r_c1 + 1, COL_O_LINE_AMOUNT_HKD).Interior.Color = GetRandomColor + End If + End If + + Next r_c1 + Next r + + For r = 0 To (len_temp_ws_case1 - 1) + For r_c1 = 0 To 99 + Worksheets(WS_CASE1).Range("A1").Offset(r + 1, r_c1).Value = temp_ws_case1(r)(r_c1) + Next r_c1 + Next r + + Worksheets(WS_CASE1).Range("A1:Z" & 99).Columns.AutoFit + Worksheets(WS_CASE1).Range("A2:Z" & 99).Interior.Color = xlNone + +End Sub + + + +' Case 2 +' Situation: +' > If any rows (with different expense number) of Expense Date (Column Q), Line Amount (Column L) and Expense Type (Column K) have the same value +' 1. with different expense number (Column A) +' 2. Expense Date (Column Q) have the same value +' 3. Line Amount (Column L) have the same value +' 4. Expense Type (Column K) have the same value + +' Action: +' Create a tab (Name: Date & Amount & Type) and copy and paste the related rows to this tab + + +Sub Case2() + MsgBox "Helloworld" +End Sub + +Sub initSheetForCase2() + Dim r, c As Integer + + CreateWsIfNotExist (WS_CASE2) + + Worksheets(WS_CASE2).Range("A1:Z" & CStr(I_TABLE_HEIGHT)).Offset(r, c).Clear + + + For c = 0 To 99 + Worksheets(WS_CASE2).Range("A1").Offset(0, c).Value = Worksheets(WS_RAW_DATA).Range("A1").Offset(0, c).Value + Next c +End Sub + +Function CheckFullfillCase2(row1, row2) + Dim output As Boolean + Dim c As Integer + + Dim R_DIFF_EXPENSE_NUM As Boolean + Dim R_SAME_EXPENSE_DATE As Boolean + Dim R_SAME_LINE_AMOUNT As Boolean + Dim R_SAME_EXPENSE_TYPE As Boolean + + Dim R_SAME_CLAIMANT_NAME, R_EXPENSE_TYPE_PROF_FEE As Boolean + + output = True + R_DIFF_EXPENSE_NUM = row1(COL_O_EXPENSE_NUMBER) <> row2(COL_O_EXPENSE_NUMBER) + R_SAME_EXPENSE_DATE = row1(COL_O_EXPENSE_DATE) = row2(COL_O_EXPENSE_DATE) + R_SAME_LINE_AMOUNT = row1(COL_O_LINE_AMOUNT_HKD) = row2(COL_O_LINE_AMOUNT_HKD) + R_SAME_EXPENSE_TYPE = row1(COL_O_EXPENSE_TYPE) = row2(COL_O_EXPENSE_TYPE) + + R_SAME_CLAIMANT_NAME = row1(COL_O_CLAIMANT_NAME) = row2(COL_O_CLAIMANT_NAME) + R_EXPENSE_TYPE_PROF_FEE = row1(COL_O_EXPENSE_TYPE) = "PROF.FEE" + + output = R_DIFF_EXPENSE_NUM And R_SAME_EXPENSE_DATE And R_SAME_LINE_AMOUNT And R_SAME_EXPENSE_TYPE And Not (R_SAME_CLAIMANT_NAME Or R_EXPENSE_TYPE_PROF_FEE) + + CheckFullfillCase2 = output +End Function + +Function CheckOccurInCase2(row_to_check) + Dim output As Boolean + output = False + + Dim r, case2_table_len As Integer + + Dim R_SAME_EXPENSE_NUM As Boolean + Dim R_SAME_EXPENSE_DATE As Boolean + Dim R_SAME_LINE_AMOUNT As Boolean + Dim R_SAME_EXPENSE_TYPE As Boolean + + For r = 1 To len_temp_ws_case2 - 1 + R_SAME_EXPENSE_NUM = row_to_check(COL_O_EXPENSE_NUMBER) = temp_ws_case2(r)(COL_O_EXPENSE_NUMBER) + R_SAME_EXPENSE_DATE = row_to_check(COL_O_EXPENSE_DATE) = temp_ws_case2(r)(COL_O_EXPENSE_DATE) + R_SAME_LINE_AMOUNT = row_to_check(COL_O_LINE_AMOUNT_HKD) = temp_ws_case2(r)(COL_O_LINE_AMOUNT_HKD) + R_SAME_EXPENSE_TYPE = row_to_check(COL_O_EXPENSE_TYPE) = temp_ws_case2(r)(COL_O_EXPENSE_TYPE) + + If (R_SAME_EXPENSE_NUM And R_SAME_EXPENSE_DATE And R_SAME_LINE_AMOUNT And R_SAME_EXPENSE_TYPE) Then + output = True + Exit For + End If + Next r + + CheckOccurInCase2 = output +End Function + +Sub ProcessCase2() + initSheetForCase2 + + Dim r, r_c1 As Integer + Dim r_fullfill_case2 As Boolean + + Dim last_row_idx, second_last_row_idx As Integer + last_row_idx = len_raw_data - 1 + second_last_row_idx = last_row_idx - 1 + + For r = 0 To (second_last_row_idx) + For r_c1 = (r + 1) To (last_row_idx) + r_fullfill_case2 = CheckFullfillCase2(AA_RAW_DATA(r), AA_RAW_DATA(r_c1)) + + If (r_fullfill_case2) Then + If (CheckOccurInCase2(AA_RAW_DATA(r))) Then + ' if occur in ws_case2, do nothing + Else + temp_ws_case2(len_temp_ws_case2) = AA_RAW_DATA(r) + len_temp_ws_case2 = len_temp_ws_case2 + 1 + + Worksheets(WS_RAW_DATA).Range("A1").Offset(r + 1, COL_O_EXPENSE_DATE).Interior.Color = GetRandomColor + Worksheets(WS_RAW_DATA).Range("A1").Offset(r + 1, COL_O_LINE_AMOUNT_HKD).Interior.Color = GetRandomColor + Worksheets(WS_RAW_DATA).Range("A1").Offset(r + 1, COL_O_EXPENSE_TYPE).Interior.Color = GetRandomColor + End If + + If (CheckOccurInCase2(AA_RAW_DATA(r_c1))) Then + ' if occur in ws_case2, do nothing + Else + temp_ws_case2(len_temp_ws_case2) = AA_RAW_DATA(r_c1) + len_temp_ws_case2 = len_temp_ws_case2 + 1 + + Worksheets(WS_RAW_DATA).Range("A1").Offset(r_c1 + 1, COL_O_EXPENSE_DATE).Interior.Color = GetRandomColor + Worksheets(WS_RAW_DATA).Range("A1").Offset(r_c1 + 1, COL_O_LINE_AMOUNT_HKD).Interior.Color = GetRandomColor + Worksheets(WS_RAW_DATA).Range("A1").Offset(r_c1 + 1, COL_O_EXPENSE_TYPE).Interior.Color = GetRandomColor + End If + + End If + + Next r_c1 + + Next r + + For r = 0 To (len_temp_ws_case2 - 1) + For r_c1 = 0 To 99 + Worksheets(WS_CASE2).Range("A1").Offset(r + 1, r_c1).Value = temp_ws_case2(r)(r_c1) + Next r_c1 + Next r + + Worksheets(WS_CASE2).Range("A1:Z" & 99).Columns.AutoFit + Worksheets(WS_CASE2).Range("A2:Z" & 99).Interior.Color = xlNone + +End Sub + +' Case 3 +' Situation: +' > If any rows (with different expense number) of Expense Date (Column Q), Line Amount (Column L), Expense Type (Column K) and Claimant Name (Column B) have the same value +' 1. with different expense number (Column A) +' 2. Expense Date (Column Q) have the same value +' 3. Line Amount (Column L) have the same value +' 4. Expense Type (Column K) have the same value +' 5. Claimant Name (Column B) have the same value + +' Action: +' Create a tab (Name: Date & Amount & Type & Name) and copy and paste the related rows to this tab + +Sub Case3() + MsgBox "Helloworld" +End Sub + +Sub initSheetForCase3() + Dim r, c As Integer + + CreateWsIfNotExist (WS_CASE3) + + Worksheets(WS_CASE3).Range("A1:Z" & CStr(I_TABLE_HEIGHT)).Offset(r, c).Clear + + For c = 0 To 99 + Worksheets(WS_CASE3).Range("A1").Offset(0, c).Value = Worksheets(WS_RAW_DATA).Range("A1").Offset(0, c).Value + Next c +End Sub + +Function CheckFullfillCase3(row1, row2) + Dim output As Boolean + Dim c As Integer + + Dim R_DIFF_EXPENSE_NUM As Boolean + Dim R_SAME_EXPENSE_DATE As Boolean + Dim R_SAME_LINE_AMOUNT As Boolean + Dim R_SAME_EXPENSE_TYPE As Boolean + Dim R_SAME_CLAIMANT_NAME As Boolean + Dim R_EXPENSE_TYPE_PROF_FEE As Boolean + + output = True + R_DIFF_EXPENSE_NUM = row1(COL_O_EXPENSE_NUMBER) <> row2(COL_O_EXPENSE_NUMBER) + R_SAME_EXPENSE_DATE = row1(COL_O_EXPENSE_DATE) = row2(COL_O_EXPENSE_DATE) + R_SAME_LINE_AMOUNT = row1(COL_O_LINE_AMOUNT_HKD) = row2(COL_O_LINE_AMOUNT_HKD) + R_SAME_EXPENSE_TYPE = row1(COL_O_EXPENSE_TYPE) = row2(COL_O_EXPENSE_TYPE) + R_SAME_CLAIMANT_NAME = row1(COL_O_CLAIMANT_NAME) = row2(COL_O_CLAIMANT_NAME) + ' + R_EXPENSE_TYPE_PROF_FEE = row1(COL_O_EXPENSE_TYPE) = "PROF.FEE" + + output = R_DIFF_EXPENSE_NUM And R_SAME_EXPENSE_DATE And R_SAME_LINE_AMOUNT And R_SAME_EXPENSE_TYPE And R_SAME_CLAIMANT_NAME And Not (R_EXPENSE_TYPE_PROF_FEE) + + Debug.Print R_DIFF_EXPENSE_NUM + + CheckFullfillCase3 = output +End Function + +Function CheckOccurInCase3(row_to_check) + Dim output As Boolean + output = False + + Dim r As Integer + + Dim R_SAME_EXPENSE_NUM As Boolean + Dim R_SAME_EXPENSE_DATE As Boolean + Dim R_SAME_LINE_AMOUNT As Boolean + Dim R_SAME_EXPENSE_TYPE As Boolean + Dim R_SAME_CLAIMANT_NAME As Boolean + + For r = 0 To len_temp_ws_case3 - 1 + R_SAME_EXPENSE_DATE = row_to_check(COL_O_EXPENSE_DATE) = temp_ws_case3(r)(COL_O_EXPENSE_DATE) + R_SAME_EXPENSE_NUM = row_to_check(COL_O_EXPENSE_NUMBER) = temp_ws_case3(r)(COL_O_EXPENSE_NUMBER) + + R_SAME_LINE_AMOUNT = row_to_check(COL_O_LINE_AMOUNT_HKD) = temp_ws_case3(r)(COL_O_LINE_AMOUNT_HKD) + R_SAME_EXPENSE_TYPE = row_to_check(COL_O_EXPENSE_TYPE) = temp_ws_case3(r)(COL_O_EXPENSE_TYPE) + R_SAME_CLAIMANT_NAME = row_to_check(COL_O_CLAIMANT_NAME) = temp_ws_case3(r)(COL_O_CLAIMANT_NAME) + + If (R_SAME_EXPENSE_NUM And R_SAME_EXPENSE_DATE And R_SAME_LINE_AMOUNT And R_SAME_EXPENSE_TYPE And R_SAME_CLAIMANT_NAME) Then + output = True + Exit For + End If + Next r + + CheckOccurInCase3 = output +End Function + +Sub ProcessCase3() + initSheetForCase3 + + Dim r, r_c1 As Integer + Dim r_fullfill_case3 As Boolean + + Dim last_row_idx, second_last_row_idx As Integer + last_row_idx = len_raw_data - 1 + second_last_row_idx = last_row_idx - 1 + + For r = 0 To (second_last_row_idx) + For r_c1 = (r + 1) To (last_row_idx) + + r_fullfill_case3 = CheckFullfillCase3(AA_RAW_DATA(r), AA_RAW_DATA(r_c1)) + + If (r_fullfill_case3) Then + If (CheckOccurInCase3(AA_RAW_DATA(r))) Then + ' if occur in ws_case3, do nothing + Else + temp_ws_case3(len_temp_ws_case3) = AA_RAW_DATA(r) + len_temp_ws_case3 = len_temp_ws_case3 + 1 + + Worksheets(WS_RAW_DATA).Range("A1").Offset(r + 1, COL_O_EXPENSE_DATE).Interior.Color = GetRandomColor + Worksheets(WS_RAW_DATA).Range("A1").Offset(r + 1, COL_O_LINE_AMOUNT_HKD).Interior.Color = GetRandomColor + Worksheets(WS_RAW_DATA).Range("A1").Offset(r + 1, COL_O_EXPENSE_TYPE).Interior.Color = GetRandomColor + Worksheets(WS_RAW_DATA).Range("A1").Offset(r + 1, COL_O_CLAIMANT_NAME).Interior.Color = GetRandomColor + End If + + If (CheckOccurInCase3(AA_RAW_DATA(r_c1))) Then + ' if occur in ws_case3, do nothing + Else + temp_ws_case3(len_temp_ws_case3) = AA_RAW_DATA(r_c1) + len_temp_ws_case3 = len_temp_ws_case3 + 1 + + Worksheets(WS_RAW_DATA).Range("A1").Offset(r_c1 + 1, COL_O_EXPENSE_DATE).Interior.Color = GetRandomColor + Worksheets(WS_RAW_DATA).Range("A1").Offset(r_c1 + 1, COL_O_LINE_AMOUNT_HKD).Interior.Color = GetRandomColor + Worksheets(WS_RAW_DATA).Range("A1").Offset(r_c1 + 1, COL_O_EXPENSE_TYPE).Interior.Color = GetRandomColor + Worksheets(WS_RAW_DATA).Range("A1").Offset(r_c1 + 1, COL_O_CLAIMANT_NAME).Interior.Color = GetRandomColor + End If + + End If + + Next r_c1 + + Next r + + For r = 0 To (len_temp_ws_case3 - 1) + For r_c1 = 0 To 99 + Worksheets(WS_CASE3).Range("A1").Offset(r + 1, r_c1).Value = temp_ws_case3(r)(r_c1) + Next r_c1 + Next r + + Worksheets(WS_CASE3).Range("A1:Z" & 99).Columns.AutoFit + Worksheets(WS_CASE3).Range("A2:Z" & 99).Interior.Color = xlNone + +End Sub + +' Case 4 +' Situation: +' > If Expense Type (Column K) contains PROF.FEE, and; If any rows (with different expense number) of Claimant Name (Column B) have the same value +' 1. If Expense Type (Column K) contains PROF.FEE +' 2. with different expense number (Column A) +' 3. Claimant Name (Column B) have the same value) + +' Action: +' Create a tab (Name: Professional Fees) and copy and paste the related rows to this tab + +Sub Case4() + MsgBox "Helloworld" +End Sub + +Sub initSheetForCase4() + Dim r, c As Integer + + CreateWsIfNotExist (WS_CASE4) + + Worksheets(WS_CASE4).Range("A1:Z" & CStr(I_TABLE_HEIGHT)).Offset(r, c).Clear + + For c = 0 To 99 + Worksheets(WS_CASE4).Range("A1").Offset(0, c).Value = Worksheets(WS_RAW_DATA).Range("A1").Offset(0, c).Value + Next c +End Sub + +Function CheckFullfillCase4(row1, row2) + Dim output As Boolean + Dim c As Integer + + Dim R_DIFF_EXPENSE_NUM As Boolean + Dim R_EXPENSE_TYPE_PROF_FEE As Boolean + Dim R_SAME_CLAIMANT_NAME As Boolean + + output = True + R_DIFF_EXPENSE_NUM = row1(COL_O_EXPENSE_NUMBER) <> row2(COL_O_EXPENSE_NUMBER) + R_EXPENSE_TYPE_PROF_FEE = row1(COL_O_EXPENSE_TYPE) = "PROF.FEE" + R_SAME_CLAIMANT_NAME = row1(COL_O_CLAIMANT_NAME) = row2(COL_O_CLAIMANT_NAME) + + output = R_DIFF_EXPENSE_NUM And R_EXPENSE_TYPE_PROF_FEE And R_SAME_CLAIMANT_NAME + + CheckFullfillCase4 = output +End Function + +Function CheckOccurInCase4(row_to_check) + Dim output As Boolean + output = False + + Dim r As Integer + + Dim R_SAME_EXPENSE_NUM As Boolean + Dim R_SAME_CLAIMANT_NAME As Boolean + + For r = 0 To len_temp_ws_case4 - 1 + R_SAME_EXPENSE_NUM = row_to_check(COL_O_EXPENSE_NUMBER) = temp_ws_case4(r)(COL_O_EXPENSE_NUMBER) + R_SAME_CLAIMANT_NAME = row_to_check(COL_O_CLAIMANT_NAME) = temp_ws_case4(r)(COL_O_CLAIMANT_NAME) + + If (R_SAME_EXPENSE_NUM And R_SAME_CLAIMANT_NAME) Then + output = True + Exit For + End If + Next r + + CheckOccurInCase4 = output +End Function + +Sub ProcessCase4() + initSheetForCase4 + + Dim r, r_c1 As Integer + Dim r_fullfill_case4 As Boolean + + Dim last_row_idx, second_last_row_idx As Integer + last_row_idx = len_raw_data - 1 + second_last_row_idx = last_row_idx - 1 + + For r = 0 To (second_last_row_idx) + For r_c1 = (r + 1) To (last_row_idx) + + r_fullfill_case4 = CheckFullfillCase4(AA_RAW_DATA(r), AA_RAW_DATA(r_c1)) + + If (r_fullfill_case4) Then + If (CheckOccurInCase4(AA_RAW_DATA(r))) Then + ' if occur in ws_case4, do nothing + Else + temp_ws_case4(len_temp_ws_case4) = AA_RAW_DATA(r) + len_temp_ws_case4 = len_temp_ws_case4 + 1 + + Worksheets(WS_RAW_DATA).Range("A1").Offset(r + 1, COL_O_EXPENSE_TYPE).Interior.Color = GetRandomColor + Worksheets(WS_RAW_DATA).Range("A1").Offset(r + 1, COL_O_CLAIMANT_NAME).Interior.Color = GetRandomColor + End If + + If (CheckOccurInCase4(AA_RAW_DATA(r_c1))) Then + ' if occur in ws_case4, do nothing + Else + temp_ws_case4(len_temp_ws_case4) = AA_RAW_DATA(r_c1) + len_temp_ws_case4 = len_temp_ws_case4 + 1 + + Worksheets(WS_RAW_DATA).Range("A1").Offset(r_c1 + 1, COL_O_EXPENSE_TYPE).Interior.Color = GetRandomColor + Worksheets(WS_RAW_DATA).Range("A1").Offset(r_c1 + 1, COL_O_CLAIMANT_NAME).Interior.Color = GetRandomColor + End If + + End If + + Next r_c1 + + Next r + + For r = 0 To (len_temp_ws_case4 - 1) + For r_c1 = 0 To 99 + Worksheets(WS_CASE4).Range("A1").Offset(r + 1, r_c1).Value = temp_ws_case4(r)(r_c1) + Next r_c1 + Next r + + Worksheets(WS_CASE4).Range("A1:Z" & 99).Columns.AutoFit + Worksheets(WS_CASE4).Range("A2:Z" & 99).Interior.Color = xlNone + +End Sub + +Sub ReadRawData() + Dim r, i, j, k As Integer + + len_raw_data = checkTableLength(WS_RAW_DATA) + + For r = 1 To len_raw_data + Dim test(99) As String + + For i = 0 To 99 + test(i) = Worksheets(WS_RAW_DATA).Range("A1").Offset(r, i).Value + Next i + AA_RAW_DATA(r - 1) = test + + Next r + +End Sub + +Sub TestMain() + initConfig + + Application.ScreenUpdating = False + Application.DisplayAlerts = False + + ResetWs + ReadRawData + ProcessCase4 + ProcessCase3 + ProcessCase2 + ProcessCase1 + + MsgBox "done" + + Application.ScreenUpdating = True + Application.DisplayAlerts = True + +End Sub + +Sub ResetWs() + Dim i, j As Integer + Dim last_sheet_idx As Integer + last_sheet_idx = Worksheets.Count + + For i = 1 To last_sheet_idx + j = last_sheet_idx + 1 - i + + Dim IsWsRawData As Boolean + Dim IsWsRequirements As Boolean + Dim IsWsDebug As Boolean + + IsWsRawData = Worksheets.Item(j).Name = WS_RAW_DATA + IsWsRequirements = Worksheets.Item(j).Name = WS_REQUIREMENTS + IsWsDebug = Worksheets.Item(j).Name = "debug" + + If (IsWsRawData Or IsWsRequirements Or IsWsDebug) Then + Else + Worksheets.Item(j).Delete + End If + Next + + Dim r, table_length As Integer + + table_length = checkTableLength(WS_RAW_DATA) + + For r = 1 To table_length + 10 + Worksheets(WS_RAW_DATA).Range("A1:Z" & CStr(table_length + 10)).Offset(r, 0).Interior.Color = xlNone + Next r + +End Sub + +Function GetRandomColor() + Dim randR As Integer + Dim randG As Integer + Dim randB As Integer + + Randomize + randR = Int((256) * Rnd) + randG = Int((256) * Rnd) + randB = Int((256) * Rnd) + + GetRandomColor = RGB(246, 229, 141) + +End Function diff --git a/task4/source/slow/dev.bat b/task4/source/slow/dev.bat new file mode 100644 index 0000000..b28f1d4 --- /dev/null +++ b/task4/source/slow/dev.bat @@ -0,0 +1,3 @@ +del Module1.bas + +xlwings vba edit --file .\Expense_Report_trunk.xlsm