Thứ Sáu, 24 tháng 11, 2017

Tạo bảng nhập chứng từ vào sổ nhật ký chung

Đầu tiên chúng ta tạo (sheet) bảng nhập chứng từ có tên "NKC1" như hình mẫu bên dưới :

Tạo bảng nhập chứng từ và sổ nhật ký chung

Hiển thị Tab : Developer Tab in the ribbon :

Click vào nút biểu tượng office button góc trái trên cùng
Click chọn Excel Options

Chọn tiếp Popular góc trái --> click chọn ô Show Developer Tab in the ribbon chọn OK

Sau đó ở bảng tính Excel chọn tab Developer nếu xuất hiện các nút Design Mode, view code là ok
Tạo module chứa code :
 Click vào view code :
Trong khung VBA Project click chuột phải : (xuất hiện khung sau) 
Chọn Insert / module

Chèn đoạn code "Ghi dữ liệu" sau  :

------code ghi dữ liệu------

Sub ghiNKC1()
Dim NKC1 As Worksheet
Set NKC1 = Sheets("NKC1")
Dim SoNhatKyChung1 As Worksheet
Set SoNhatKyChung1 = Sheets("SoNhatKyChung1")
If kiemtradanhap_sochungtu_SoNhatKyChung1(UCase(NKC1.Range("c2").Value)) = "nhap roi" Then
MsgBox "So chung tu nay da nhap vao sheet SoNhatKyChung1 !!!"
GoTo thoat
End If

Set cotDNKC1 = NKC1.Range("d50:d65536")

sochungtukiem = NKC1.Range("c2").Value
demsochungtups = Application.WorksheetFunction.CountIf(cotDNKC1, sochungtukiem)
Set cotAnkc1 = NKC1.Range("a50:a65536")
demdongghiso = Application.WorksheetFunction.CountA(cotAnkc1)
If demsochungtups <> demdongghiso Then
MsgBox "Xem lai cot D So chung tu khong dong nhat"
GoTo thoat
End If



Dim cotA As Range
Set cotA = NKC1.Range("a50:a65536")
demsodong = Application.WorksheetFunction.CountA(cotA)


Dim sochungtu As Range
Set sochungtu = NKC1.Range("c2")

If sochungtu = 0 Or sochungtu = "" Then
MsgBox "Khong thuc hien ghi phieu vi so chung tu RONG !!!"
GoTo thoat
End If



Dim ngay As Range
Set ngay = NKC1.Range("c3")
Dim diengiai As Range
Set diengiai = NKC1.Range("c4")
Dim hovaten As Range
Set hovaten = NKC1.Range("c5")
Dim taikhoanno As Range
Set taikhoanno = NKC1.Range("c7")

Dim tentaikhoanno As Range
Set tentaikhoanno = NKC1.Range("e7")
Dim taikhoanco As Range
Set taikhoanco = NKC1.Range("c8")
Dim tentaikhoanco As Range
Set tentaikhoanco = NKC1.Range("e8")
Dim madoituongno As Range
Set madoituongno = NKC1.Range("f7")
Dim tendoituongno As Range
Set tendoituongno = NKC1.Range("g7")
Dim madoituongco As Range
Set madoituongco = NKC1.Range("f8")
Dim tendoituongco As Range
Set tendoituongco = NKC1.Range("g8")
Dim sotien As Range
Set sotien = NKC1.Range("c9")
Dim kemtheo As Range
Set kemtheo = NKC1.Range("c10")
Dim chungtugoc As Range
Set chungtugoc = NKC1.Range("c11")

'Ghi du lieu
If sotien = 0 Then
MsgBox "So tien khong duoc bang khong"
GoTo thoat
End If
NKC1.Range("a" & 50 + demsodong + 1).Value = "X"
NKC1.Range("b" & 50 + demsodong + 1).Value = ngay
NKC1.Range("c" & 50 + demsodong + 1).Value = ngay
NKC1.Range("d" & 50 + demsodong + 1).Value = sochungtu
NKC1.Range("e" & 50 + demsodong + 1).Value = diengiai
NKC1.Range("f" & 50 + demsodong + 1).Value = taikhoanno
NKC1.Range("g" & 50 + demsodong + 1).Value = tentaikhoanno
NKC1.Range("h" & 50 + demsodong + 1).Value = taikhoanco
NKC1.Range("i" & 50 + demsodong + 1).Value = tentaikhoanco
NKC1.Range("j" & 50 + demsodong + 1).Value = sotien
NKC1.Range("k" & 50 + demsodong + 1).Value = madoituongno
NKC1.Range("l" & 50 + demsodong + 1).Value = tendoituongno
NKC1.Range("m" & 50 + demsodong + 1).Value = madoituongco
NKC1.Range("n" & 50 + demsodong + 1).Value = tendoituongco
NKC1.Range("w" & 50 + demsodong + 1).Value = hovaten
NKC1.Range("fv" & 50 + demsodong + 1).Value = kemtheo
NKC1.Range("fw" & 50 + demsodong + 1).Value = chungtugoc
thoat:
End Sub


------Kết thúc code ghi dữ liệu------

 Chèn tiếp đoạn code :
------Code ghi dữ liệu vào sổ Nhật ký chung------

   
Sub ghisonhatkychung1()
On Error Resume Next
ShowAllData_allsheet
Dim NKC1 As Worksheet
Set NKC1 = Sheets("NKC1")
Set cotDNKC1 = NKC1.Range("d50:d65536")
demsochungtups = Application.WorksheetFunction.CountA(cotDNKC1)
Set cotAnkc1 = NKC1.Range("a50:a65536")
demdongghiso = Application.WorksheetFunction.CountA(cotAnkc1)
If demsochungtups <> demdongghiso Then
MsgBox "Xem lai cot D So chung tu khong dong nhat"
GoTo thoat
End If

Dim SoNhatKyChung1 As Worksheet
Set SoNhatKyChung1 = Sheets("SoNhatKyChung1")
SoNhatKyChung1.Unprotect
If kiemtratrung_sochungtu_SoNhatKyChung1 = "trung" Then
MsgBox "Bi nhap trung chung tu - vui long kiem tra lai Sheet SoNhatKyChung1 !!!"
GoTo thoat
End If
sochungtu = UCase(NKC1.Range("c2").Value)

If kiemtradanhap_sochungtu_SoNhatKyChung1(sochungtu) = "nhap roi" Then

MsgBox "So chung tu nay da nhap vao sheet SoNhatKyChung1 !!!"


GoTo thoat
End If


If sochungtu = "" Or sochungtu = 0 Then
MsgBox "Khong duoc de trong So Chung Tu"
GoTo thoat
End If

Dim cotAsct As Range
Set cotAsct = NKC1.Range("a50:a65536")
Dongchungtu = Application.WorksheetFunction.CountA(cotAsct)
If Dongchungtu = 0 Then
MsgBox "Khong co du lieu Phat Sinh !!! "
GoTo thoat
End If

Dim cotASoNhatKyChung1Sapxep As Range
Set cotASoNhatKyChung1Sapxep = SoNhatKyChung1.Range("a50:a65536")
DongSoNhatKyChung1Sapxep = Application.WorksheetFunction.CountA(cotASoNhatKyChung1Sapxep)

SoNhatKyChung1.Select
'Sap xep
Range("A51:iv" & 50 + DongSoNhatKyChung1Sapxep).Select
ActiveWorkbook.Worksheets("SoNhatKyChung1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("SoNhatKyChung1").Sort.SortFields.Add Key:= _
Range("d51:d" & 50 + DongSoNhatKyChung1Sapxep), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption _
:=xlSortNormal
With ActiveWorkbook.Worksheets("SoNhatKyChung1").Sort
.SetRange Range("A51:iv" & 50 + DongSoNhatKyChung1Sapxep)
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With

If kiemtratrung_sochungtu_SoNhatKyChung1 = "trung" Then
MsgBox "Bi nhap trung chung tu - vui long kiem tra lai Sheet SoNhatKyChung1 !!!"
GoTo thoat
End If

Dim cotASoNhatKyChung1 As Range
Set cotASoNhatKyChung1 = SoNhatKyChung1.Range("a50:a65536")
Dongnhap = Application.WorksheetFunction.CountA(cotASoNhatKyChung1)

Dim cotDsochungtu1 As Range
Set cotDsochungtu1 = SoNhatKyChung1.Range("d50:d65536")
kiemsohoason = Application.CountIf(cotDsochungtu1, sochungtu)
If kiemsohoason >= 1 Then

TraLoi = MsgBox("So chung tu Nay Da Co Roi - Ghi De Du lieu cu ?", vbYesNoCancel)
If TraLoi = vbYes Then

r_dau = 50
r_cuoi = 50 + Dongnhap + 2
'Trich du lieu
For I_min = r_dau + 1 To r_cuoi - 1
If SoNhatKyChung1.Range("d" & I_min).Value = sochungtu Then
R_SUA_MIN = SoNhatKyChung1.Range("d" & I_min).Row
Exit For
Else
If I_min = r_cuoi - 1 Then
MsgBox "KO CO CHUNG TU CAN SUA "
GoTo thoat
End If
End If
Next
For I_max = r_cuoi - 1 To r_dau + 1 Step -1
If SoNhatKyChung1.Range("d" & I_max).Value = sochungtu Then
R_SUA_Max = SoNhatKyChung1.Range("d" & I_max).Row
Exit For
Else
If I_max = r_dau + 1 Then
MsgBox "KO CO CHUNG TU CAN SUA "
GoTo thoat
End If
End If
Next

sodongPS = R_SUA_Max - (R_SUA_MIN - 1)
'Xoa du lieu cu
SoNhatKyChung1.Rows(R_SUA_MIN & ":" & R_SUA_Max).Delete
'Dem lai dong nhap sau khi xoa
Dongnhap = Application.WorksheetFunction.CountA(cotASoNhatKyChung1)

'Ghi du lieu moi vao dong cuoi
SoNhatKyChung1.Range("A" & 50 + Dongnhap + 1 & ":" & "iv" & 50 + Dongnhap + Dongchungtu).Value = _
NKC1.Range("A51:" & "iv" & 50 + Dongchungtu).Value


'Ghi lai so chung tu
SoNhatKyChung1.Range("d" & 50 + Dongnhap + 1 & ":" & "d" & 50 + Dongnhap + Dongchungtu).Value = _
UCase(sochungtu)

End If
GoTo thoat
End If
'Ghi du lieu moi vao dong cuoi
SoNhatKyChung1.Range("A" & 50 + Dongnhap + 1 & ":" & "iv" & 50 + Dongnhap + Dongchungtu).Value = _
NKC1.Range("A51:" & "iv" & 50 + Dongchungtu).Value
'Ghi lai so chung tu
SoNhatKyChung1.Range("d" & 50 + Dongnhap + 1 & ":" & "d" & 50 + Dongnhap + Dongchungtu).Value = _
UCase(sochungtu)

NKC1.Range("A51:" & "iv" & 50 + Dongchungtu).ClearContents
'Xoa du lieu
NKC1.Range("c2").Value = ""
NKC1.Range("c3").Value = ""
NKC1.Range("c4").Value = ""
NKC1.Range("c5").Value = ""
NKC1.Range("c6").Value = ""
NKC1.Range("c7").Value = ""
NKC1.Range("c8").Value = ""
NKC1.Range("c9").Value = ""
NKC1.Range("c10").Value = ""
NKC1.Range("c11").Value = ""
NKC1.Range("c2").Select

SoNhatKyChung1.Range("A" & 50 + Dongnhap + 1).Select
thoat:
SoNhatKyChung1.Select

MsgBox "Thuc hien xong !!!"
SoNhatKyChung1.Protect
End Sub


------Kết thúc Code ghi dữ liệu vào sổ Nhật ký chung------

----Chèn hằng số----

Public HS_donghientai
----Kế thúc Chèn hằng số----
Để gán code lệnh vào nút Ghi dữ liệu và nút Vào Sổ nhật ký vui lòng xem hướng dẫn : gán code lệnh VBA hay đoạn code Macro vào nút Shapes click vào link sau để xem hướng dẫn : http://www.dichvuketoanplus.com/2017/11/gan-code-lenh-vba-hay-doan-code-macro-vao-nut-shapes.html

Theo hướng dẫn trên bạn tạo Shapes 1 chèn đoạn text "Ghi dữ liệu" và Shapes 2 Chèn Text "Vào Sổ Nhật Ký Chung"

Sau đó chèn code lệnh "ghiNKC1" vào Shapes "Ghi dữ liệu"  và code lệnh "ghisonhatkychung1" vào Shapes "Vào Sổ Nhật Ký Chung".


Tạo công thức Sheet NKC1 :

Ô E2 :   =IF(COUNTIF(SoNhatKyChung1!$D$50:$D$65536,UPPER(NKC1!C2))>=1,"Chöùng Töø Coù Roài","Tieáp tuïc")

Ô G2 : =COUNTA(SoNhatKyChung1!D50:D65536)

Ô E7 : =VLOOKUP(C7,DMTK1!$A$50:$B$65536,2,0)

Ô E8 : =VLOOKUP(C8,DMTK1!$A$50:$B$65536,2,0)

Related Post

Tạo bảng nhập chứng từ vào sổ nhật ký chung
4/ 5
Oleh