cuongnguyencuong
Thành viên mới
![](/diendan/data/PhoToDanhHieu/gold.gif)
- Tham gia
- 8/5/14
- Bài viết
- 43
- Được thích
- 1
Mọi người ơi, ai biết thì giúp mình lập 1 sổ cái bằng vba Excel nhé. cám ơn mọi người nhiều.
Type TCong
DkNo As Long
DkCo As Long
PSNo As Long
PSCo As Long
End Type
Sub SoCaiTK()
Dim Tm, Tk, Kq(), Tng, Dng, i, j, k
Dim mS As TCong
Tm = Sheet3.Range("A3:M" & Sheet3.[k65536].End(3).Row)
Tk = Sheet8.[L9]: Tng = Sheet8.[L6]: Dng = Sheet8.[L7]
For i = 1 To UBound(Tm, 1)
If Tm(i, 5) & Tm(i, 6) <> "" Then
Tm(i, 7) = Tm(i, 5)
Tm(i, 8) = Tm(i, 6)
ElseIf Tm(i, 3) & Tm(i, 4) <> "" Then
Tm(i, 7) = Tm(i, 3)
Tm(i, 8) = Tm(i, 4)
End If
Next
ReDim Kq(1 To 50000, 1 To 9)
For i = 1 To UBound(Tm, 1)
If Tm(i, 8) < Tng And Tm(i, 11) Like Tk & "*" Then
mS.DkNo = mS.DkNo + Tm(i, 13)
ElseIf Tm(i, 8) < Tng And Tm(i, 12) Like Tk & "*" Then
mS.DkCo = mS.DkCo + Tm(i, 13)
ElseIf Tm(i, 8) >= Tng And Tm(i, 8) <= Dng And Tm(i, 11) Like Tk & "*" Then
k = k + 1
Kq(k, 1) = Tm(i, 9)
Kq(k, 2) = Tm(i, 7)
Kq(k, 3) = Tm(i, 8)
Kq(k, 4) = Tm(i, 10)
Kq(k, 7) = Tm(i, 12)
Kq(k, 8) = Tm(i, 13)
mS.PSNo = mS.PSNo + Tm(i, 13)
ElseIf Tm(i, 8) >= Tng And Tm(i, 8) <= Dng And Tm(i, 12) Like Tk & "*" Then
k = k + 1
Kq(k, 1) = Tm(i, 9)
Kq(k, 2) = Tm(i, 7)
Kq(k, 3) = Tm(i, 8)
Kq(k, 4) = Tm(i, 10)
Kq(k, 7) = Tm(i, 11)
Kq(k, 9) = Tm(i, 13)
mS.PSCo = mS.PSCo + Tm(i, 13)
End If
Next
Sheet8.[A12:I50000].Clear: Sheet8.[H11] = 0: Sheet8.[I11] = 0
If mS.DkNo > mS.DkCo Then Sheet8.[H11] = mS.DkNo - mS.DkCo
If mS.DkCo > mS.DkNo Then Sheet8.[I11] = mS.DkCo - mS.DkNo
k = k + 2
Kq(k, 4) = "Cong phat sinh trong ky : "
Kq(k, 8) = mS.PSNo * 1
Kq(k, 9) = mS.PSCo * 1
k = k + 1
Kq(k, 4) = "So du cuoi ky"
If mS.DkNo - mS.DkCo + mS.PSNo - mS.PSCo > 0 Then Kq(k, 8) = mS.DkNo - mS.DkCo + mS.PSNo - mS.PSCo
If mS.DkCo - mS.DkNo + mS.PSCo - mS.PSNo > 0 Then Kq(k, 9) = mS.DkCo - mS.DkNo + mS.PSCo - mS.PSNo
With Sheet8.Range("A12:I" & 11 + k)
.Value = Kq
.Borders.LineStyle = xlContinuous
.Borders.Weight = xlThin
End With
Sheet8.Range("A12:I" & 11 + k - 2).Borders(xlInsideHorizontal).Weight = xlHairline
Sheet8.Cells(k + 10, 1).Resize(2, 9).Font.Bold = True
Sheet8.Cells(12, "G").Resize(k).HorizontalAlignment = xlLeft
Sheet8.Cells(12, "H").Resize(k, 2).NumberFormat = "#,##0"
End Sub
Type TCong
[COLOR=#ff0000]DkNo As Double
DkCo As Double
PSNo As Double
PSCo As Double
NoLk As Double
CoLk As Double[/COLOR]
End Type
Sub SoCaiTK()
Dim Tm, Tk, Kq(), Tng, Dng, i, j, k
Dim mS As TCong[COLOR=#ff0000], Cl As Range[/COLOR]
Tm = Sheet3.Range("A3:M" & Sheet3.[k65536].End(3).Row)
Tk = Sheet8.[G4]: Tng = Sheet8.[K5]: Dng = Sheet8.[K6]
[COLOR=#ff0000]Set Cl = Sheet11.Range("D3:D1000").Find(Tk)
If Not Cl Is Nothing Then
mS.DkNo = Cl.Offset(, 2).Value
mS.DkCo = Cl.Offset(, 3).Value
Set Cl = Nothing
End If[/COLOR]
For i = 1 To UBound(Tm, 1)
If Tm(i, 5) & Tm(i, 6) <> "" Then
Tm(i, 7) = Tm(i, 5)
Tm(i, 8) = Tm(i, 6)
ElseIf Tm(i, 3) & Tm(i, 4) <> "" Then
Tm(i, 7) = Tm(i, 3)
Tm(i, 8) = Tm(i, 4)
End If
Next
ReDim Kq(1 To 50000, 1 To 11)
For i = 1 To UBound(Tm, 1)
If Tm(i, 8) < Tng And Tm(i, 11) Like Tk & "*" Then
mS.DkNo = mS.DkNo + Tm(i, 13)
If Tm(i, 8) >= DateSerial(Year(Dng), 1, 1) Then mS.NoLk = mS.NoLk + Tm(i, 13)
ElseIf Tm(i, 8) < Tng And Tm(i, 12) Like Tk & "*" Then
mS.DkCo = mS.DkCo + Tm(i, 13)
If Tm(i, 8) >= DateSerial(Year(Dng), 1, 1) Then mS.CoLk = mS.CoLk + Tm(i, 13)
ElseIf Tm(i, 8) >= Tng And Tm(i, 8) <= Dng And Tm(i, 11) Like Tk & "*" Then
k = k + 1
Kq(k, 1) = Tm(i, 9)
Kq(k, 2) = Tm(i, 7)
Kq(k, 3) = Tm(i, 8)
Kq(k, 4) = Tm(i, 10)
Kq(k, 7) = Tm(i, 12)
Kq(k, 8) = Tm(i, 13)
mS.PSNo = mS.PSNo + Tm(i, 13)
mS.NoLk = mS.NoLk + Tm(i, 13)
If mS.DkNo - mS.DkCo + mS.PSNo - mS.PSCo > 0 Then Kq(k, 10) = mS.DkNo - mS.DkCo + mS.PSNo - mS.PSCo
If mS.DkCo - mS.DkNo + mS.PSCo - mS.PSNo > 0 Then Kq(k, 11) = mS.DkCo - mS.DkNo + mS.PSCo - mS.PSNo
ElseIf Tm(i, 8) >= Tng And Tm(i, 8) <= Dng And Tm(i, 12) Like Tk & "*" Then
k = k + 1
Kq(k, 1) = Tm(i, 9)
Kq(k, 2) = Tm(i, 7)
Kq(k, 3) = Tm(i, 8)
Kq(k, 4) = Tm(i, 10)
Kq(k, 7) = Tm(i, 11)
Kq(k, 9) = Tm(i, 13)
mS.PSCo = mS.PSCo + Tm(i, 13)
mS.CoLk = mS.CoLk + Tm(i, 13)
If mS.DkNo - mS.DkCo + mS.PSNo - mS.PSCo > 0 Then Kq(k, 10) = mS.DkNo - mS.DkCo + mS.PSNo - mS.PSCo
If mS.DkCo - mS.DkNo + mS.PSCo - mS.PSNo > 0 Then Kq(k, 11) = mS.DkCo - mS.DkNo + mS.PSCo - mS.PSNo
End If
Next
Sheet8.[A12:K50000].Clear: Sheet8.[J11] = 0: Sheet8.[K11] = 0
If mS.DkNo > mS.DkCo Then Sheet8.[J11] = mS.DkNo - mS.DkCo
If mS.DkCo > mS.DkNo Then Sheet8.[K11] = mS.DkCo - mS.DkNo
k = k + 2
Kq(k, 4) = "Cong phat sinh trong ky : "
Kq(k, 8) = mS.PSNo
Kq(k, 9) = mS.PSCo
k = k + 1
Kq(k, 4) = "Luy ke phat sinh tu dau nam " & Year(Tng) & " :"
Kq(k, 8) = mS.NoLk
Kq(k, 9) = mS.CoLk
k = k + 1
Kq(k, 4) = "So du cuoi ky"
If mS.DkNo - mS.DkCo + mS.PSNo - mS.PSCo > 0 Then Kq(k, 10) = mS.DkNo - mS.DkCo + mS.PSNo - mS.PSCo
If mS.DkCo - mS.DkNo + mS.PSCo - mS.PSNo > 0 Then Kq(k, 11) = mS.DkCo - mS.DkNo + mS.PSCo - mS.PSNo
With Sheet8.Range("A12:K" & 11 + k)
.Value = Kq
.Borders.LineStyle = xlContinuous
.Borders.Weight = xlThin
End With
Sheet8.Range("A12:K" & 11 + k - 3).Borders(xlInsideHorizontal).Weight = xlHairline
Sheet8.Cells(k + 9, 1).Resize(3, 11).Font.Bold = True
Sheet8.Cells(12, "G").Resize(k).HorizontalAlignment = xlLeft
Sheet8.Cells(12, "H").Resize(k, 4).NumberFormat = "#,##0"
End Sub
Em bị 1 lỗi nhỏ là ....em coppy hết code của anh qua file sổ của em, mỗi lần em bấm nút "Tạo sổ" thì nó hiện định dạng sổ hết về Font VNI-Times. Vậy phải làm sao đây anh ?
Đây là code tạo sổ cái;
[/QUMã:Type TCong DkNo As Long DkCo As Long PSNo As Long PSCo As Long End Type Sub SoCaiTK() Dim Tm, Tk, Kq(), Tng, Dng, i, j, k Dim mS As TCong Tm = Sheet3.Range("A3:M" & Sheet3.[k65536].End(3).Row) Tk = Sheet8.[L9]: Tng = Sheet8.[L6]: Dng = Sheet8.[L7] For i = 1 To UBound(Tm, 1) If Tm(i, 5) & Tm(i, 6) <> "" Then Tm(i, 7) = Tm(i, 5) Tm(i, 8) = Tm(i, 6) ElseIf Tm(i, 3) & Tm(i, 4) <> "" Then Tm(i, 7) = Tm(i, 3) Tm(i, 8) = Tm(i, 4) End If Next ReDim Kq(1 To 50000, 1 To 9) For i = 1 To UBound(Tm, 1) If Tm(i, 8) < Tng And Tm(i, 11) Like Tk & "*" Then mS.DkNo = mS.DkNo + Tm(i, 13) ElseIf Tm(i, 8) < Tng And Tm(i, 12) Like Tk & "*" Then mS.DkCo = mS.DkCo + Tm(i, 13) ElseIf Tm(i, 8) >= Tng And Tm(i, 8) <= Dng And Tm(i, 11) Like Tk & "*" Then k = k + 1 Kq(k, 1) = Tm(i, 9) Kq(k, 2) = Tm(i, 7) Kq(k, 3) = Tm(i, 8) Kq(k, 4) = Tm(i, 10) Kq(k, 7) = Tm(i, 12) Kq(k, 8) = Tm(i, 13) mS.PSNo = mS.PSNo + Tm(i, 13) ElseIf Tm(i, 8) >= Tng And Tm(i, 8) <= Dng And Tm(i, 12) Like Tk & "*" Then k = k + 1 Kq(k, 1) = Tm(i, 9) Kq(k, 2) = Tm(i, 7) Kq(k, 3) = Tm(i, 8) Kq(k, 4) = Tm(i, 10) Kq(k, 7) = Tm(i, 11) Kq(k, 9) = Tm(i, 13) mS.PSCo = mS.PSCo + Tm(i, 13) End If Next Sheet8.[A12:I50000].Clear: Sheet8.[H11] = 0: Sheet8.[I11] = 0 If mS.DkNo > mS.DkCo Then Sheet8.[H11] = mS.DkNo - mS.DkCo If mS.DkCo > mS.DkNo Then Sheet8.[I11] = mS.DkCo - mS.DkNo k = k + 2 Kq(k, 4) = "Cong phat sinh trong ky : " Kq(k, 8) = mS.PSNo * 1 Kq(k, 9) = mS.PSCo * 1 k = k + 1 Kq(k, 4) = "So du cuoi ky" If mS.DkNo - mS.DkCo + mS.PSNo - mS.PSCo > 0 Then Kq(k, 8) = mS.DkNo - mS.DkCo + mS.PSNo - mS.PSCo If mS.DkCo - mS.DkNo + mS.PSCo - mS.PSNo > 0 Then Kq(k, 9) = mS.DkCo - mS.DkNo + mS.PSCo - mS.PSNo With Sheet8.Range("A12:I" & 11 + k) .Value = Kq .Borders.LineStyle = xlContinuous .Borders.Weight = xlThin End With Sheet8.Range("A12:I" & 11 + k - 2).Borders(xlInsideHorizontal).Weight = xlHairline Sheet8.Cells(k + 10, 1).Resize(2, 9).Font.Bold = True Sheet8.Cells(12, "G").Resize(k).HorizontalAlignment = xlLeft Sheet8.Cells(12, "H").Resize(k, 2).NumberFormat = "#,##0" End Sub
Anh có thể giúp em tạo Function Tổng quát dạng này được không ạBạn chép Code sau thay vào để sử lý:
1/ Lấy số dư trên DMTK
2/Đổi biến Long sang Double để đối phó với số tiền VN quá lớn
Mã:Type TCong [COLOR=#ff0000]DkNo As Double DkCo As Double PSNo As Double PSCo As Double NoLk As Double CoLk As Double[/COLOR] End Type Sub SoCaiTK() Dim Tm, Tk, Kq(), Tng, Dng, i, j, k Dim mS As TCong[COLOR=#ff0000], Cl As Range[/COLOR] Tm = Sheet3.Range("A3:M" & Sheet3.[k65536].End(3).Row) Tk = Sheet8.[G4]: Tng = Sheet8.[K5]: Dng = Sheet8.[K6] [COLOR=#ff0000]Set Cl = Sheet11.Range("D3:D1000").Find(Tk) If Not Cl Is Nothing Then mS.DkNo = Cl.Offset(, 2).Value mS.DkCo = Cl.Offset(, 3).Value Set Cl = Nothing End If[/COLOR] For i = 1 To UBound(Tm, 1) If Tm(i, 5) & Tm(i, 6) <> "" Then Tm(i, 7) = Tm(i, 5) Tm(i, 8) = Tm(i, 6) ElseIf Tm(i, 3) & Tm(i, 4) <> "" Then Tm(i, 7) = Tm(i, 3) Tm(i, 8) = Tm(i, 4) End If Next ReDim Kq(1 To 50000, 1 To 11) For i = 1 To UBound(Tm, 1) If Tm(i, 8) < Tng And Tm(i, 11) Like Tk & "*" Then mS.DkNo = mS.DkNo + Tm(i, 13) If Tm(i, 8) >= DateSerial(Year(Dng), 1, 1) Then mS.NoLk = mS.NoLk + Tm(i, 13) ElseIf Tm(i, 8) < Tng And Tm(i, 12) Like Tk & "*" Then mS.DkCo = mS.DkCo + Tm(i, 13) If Tm(i, 8) >= DateSerial(Year(Dng), 1, 1) Then mS.CoLk = mS.CoLk + Tm(i, 13) ElseIf Tm(i, 8) >= Tng And Tm(i, 8) <= Dng And Tm(i, 11) Like Tk & "*" Then k = k + 1 Kq(k, 1) = Tm(i, 9) Kq(k, 2) = Tm(i, 7) Kq(k, 3) = Tm(i, 8) Kq(k, 4) = Tm(i, 10) Kq(k, 7) = Tm(i, 12) Kq(k, 8) = Tm(i, 13) mS.PSNo = mS.PSNo + Tm(i, 13) mS.NoLk = mS.NoLk + Tm(i, 13) If mS.DkNo - mS.DkCo + mS.PSNo - mS.PSCo > 0 Then Kq(k, 10) = mS.DkNo - mS.DkCo + mS.PSNo - mS.PSCo If mS.DkCo - mS.DkNo + mS.PSCo - mS.PSNo > 0 Then Kq(k, 11) = mS.DkCo - mS.DkNo + mS.PSCo - mS.PSNo ElseIf Tm(i, 8) >= Tng And Tm(i, 8) <= Dng And Tm(i, 12) Like Tk & "*" Then k = k + 1 Kq(k, 1) = Tm(i, 9) Kq(k, 2) = Tm(i, 7) Kq(k, 3) = Tm(i, 8) Kq(k, 4) = Tm(i, 10) Kq(k, 7) = Tm(i, 11) Kq(k, 9) = Tm(i, 13) mS.PSCo = mS.PSCo + Tm(i, 13) mS.CoLk = mS.CoLk + Tm(i, 13) If mS.DkNo - mS.DkCo + mS.PSNo - mS.PSCo > 0 Then Kq(k, 10) = mS.DkNo - mS.DkCo + mS.PSNo - mS.PSCo If mS.DkCo - mS.DkNo + mS.PSCo - mS.PSNo > 0 Then Kq(k, 11) = mS.DkCo - mS.DkNo + mS.PSCo - mS.PSNo End If Next Sheet8.[A12:K50000].Clear: Sheet8.[J11] = 0: Sheet8.[K11] = 0 If mS.DkNo > mS.DkCo Then Sheet8.[J11] = mS.DkNo - mS.DkCo If mS.DkCo > mS.DkNo Then Sheet8.[K11] = mS.DkCo - mS.DkNo k = k + 2 Kq(k, 4) = "Cong phat sinh trong ky : " Kq(k, 8) = mS.PSNo Kq(k, 9) = mS.PSCo k = k + 1 Kq(k, 4) = "Luy ke phat sinh tu dau nam " & Year(Tng) & " :" Kq(k, 8) = mS.NoLk Kq(k, 9) = mS.CoLk k = k + 1 Kq(k, 4) = "So du cuoi ky" If mS.DkNo - mS.DkCo + mS.PSNo - mS.PSCo > 0 Then Kq(k, 10) = mS.DkNo - mS.DkCo + mS.PSNo - mS.PSCo If mS.DkCo - mS.DkNo + mS.PSCo - mS.PSNo > 0 Then Kq(k, 11) = mS.DkCo - mS.DkNo + mS.PSCo - mS.PSNo With Sheet8.Range("A12:K" & 11 + k) .Value = Kq .Borders.LineStyle = xlContinuous .Borders.Weight = xlThin End With Sheet8.Range("A12:K" & 11 + k - 3).Borders(xlInsideHorizontal).Weight = xlHairline Sheet8.Cells(k + 9, 1).Resize(3, 11).Font.Bold = True Sheet8.Cells(12, "G").Resize(k).HorizontalAlignment = xlLeft Sheet8.Cells(12, "H").Resize(k, 4).NumberFormat = "#,##0" End Sub