Thien
Thành viên thường trực




- Tham gia
- 23/6/06
- Bài viết
- 352
- Được thích
- 113








Vì Data của bạn quá lộn xộn nên không muốn làm theo Advance Filter. Thôi thì dùng vòng lặp vậy.Thien đã viết:Các bác không hiểu ý mình rùi.
File của mình hiện tại khi muốn in sổ cái của TK nào thì chọn số TK rùi phải chọn Chọn Nonblanks sau khi chọn mã tài khoản tạI ô D2 để in ra giấy.
Nếu có nhiều TK phát sinh thì thao tác này được lặp lại nhiều lần. Nay mình muốn nhờ viết dủm 1 cái macro làm việc đó.
Nếu in ra từng sheet, tên mỗi sheet là số TK có số liệu phát sinh.
Đây là bài toán thật mình đang làm. Rất mong nhận được sự hỗ trợ từ GPE.
PS: Mr BeBe đâu rùi.
Cảm ơn nhiều.
Thien đã viết:Cảm ơn BeBe & Thunghi nhiều lắm.
Nhưng có điều giữ nguyên cấu trúc file của mình có được không.
Rất mong nhận được sự giúp đỡ.
Chân thành cảm ơn




Sub TaoNhieuSC()
With Application
.Calculation = xlCalculationManual
.ScreenUpdating = False
.DisplayAlerts = False
End With
Dim i As Integer, Rows As Integer
S09.Visible = xlSheetVisible
Rows = S99.Cells(2, 3).Value
For i = 1 To Rows
With Application
.Calculation = xlCalculationAutomatic
End With
S03.Range("D2").Value = Range("Dmtk").Cells(i, 1).Value
With Application
.Calculation = xlCalculationManual
End With
'mo file socai cung folder
Workbooks.Open Filename:=ThisWorkbook.Path & "\socai.xls"
Call TaoSoCai
Next i
S03.Select
Selection.AutoFilter Field:=7
S09.Visible = xlSheetHidden
With Application
.Calculation = xlCalculationAutomatic
.ScreenUpdating = True
.DisplayAlerts = True
End With
S03.Select
Range("d2").Select
End Sub
Bạn xem thử thế nào.Sub TaoSoCai()
'Xoa tmp
Windows("insocai.xls").Activate
S09.Select
Cells.Select
Selection.ClearContents
Selection.ClearFormats
'copy socai va dan vao tmp
S03.Select
Selection.AutoFilter Field:=7, Criteria1:="<>"
Range("Socai").Select
Selection.Copy
S09.Select
Range("a1").Select
ActiveSheet.Paste
Application.CutCopyMode = False
'tao so moi & preview
S09.Copy After:=Sheets(2)
Sheets("tmp (2)").Select
'mosang va dat ten
Sheets("tmp (2)").Move Before:=Workbooks("socai.xls").Sheets(1)
Windows("socai.xls").Activate
Sheets("tmp (2)").Name = Sheets("tmp (2)").Range("D2").Value
ActiveWorkbook.Save
ActiveWindow.Close
End Sub




Cái này của NVSonPublic Sub Add_name()
Dim i As Long 'NVSON
For i = 1 To Range("rngName").Rows.Count
ActiveWorkbook.Names.Add Name:=Range("rngName").Cells(i, 1).Value, RefersTo:="=" & Range("rngReplace").Cells(i, 1).Value
Next i
End Sub
Public Sub ThayThe()
On Error Resume Next 'NVSON
Dim i As Long, StrText As String
Dim KQ
For i = 1 To ActiveWorkbook.Names.Count
Err.Clear
KQ = WorksheetFunction.Match(ActiveWorkbook.Names(i, 1, 1).NameLocal, Range("rngName"), 0)
If Err.Number = 0 Then
StrText = WorksheetFunction.Index(Range("rngReplace"), KQ, 1)
ActiveWorkbook.Names.Add Name:=ActiveWorkbook.Names(i, 1, 1).NameLocal, RefersTo:="=" & StrText
End If
Next i
End Sub
Sub Link_Paste_Names()
On Error GoTo thoat 'NVSON
Dim row1 As Integer, col1 As Integer
Dim i As Integer
row1 = ActiveCell.Row
col1 = ActiveCell.Column
For i = 1 To ActiveWorkbook.Names.Count
Cells(row1 + i - 1, col1) = ActiveWorkbook.Names(i, 1, 1).NameLocal
Cells(row1 + i - 1, col1 + 1) = Mid(ActiveWorkbook.Names(i, 1, 1).RefersTo, 2)
Cells(row1 + i - 1, col1 + 1).Select
Selection.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:=ActiveWorkbook.Names(i, 1, 1).RefersTo
Next i
thoat:
End Sub
Do tôi đặt rngName là offset()Public Sub Add_name()
Dim i As Long 'NVSON
For i = 1 To Range("rngName").Rows.Count
ActiveWorkbook.Names.Add Name:=Range("rngName").Cells(i, 1).Value, RefersTo:="=" & Range("rngReplace").Cells(i, 1).Value
Next i
End Sub








Tôi có sửa lại phần bold, (xin phép Mr Hiếu), lý do if ngày > hơn thì skip (i=i+1) chớ không S01.Range("E8").Value = S01.Range("E8").Value + TKNIf Left$(TKNo, m) = TK Then ' No
If TKNffset(0, -2).Value < S01.Range("C4").Value Then ' Ngay nho hon
i = i + 1
'S01.Range("E8").Value = S01.Range("E8").Value + TKNffset(0, 7).Value
Else ' Phat Sinh
S01.Range("E8").Value = S01.Range("E8").Value + TKNffset(0, 7).Value
'i = i + 1
S01.Range("A" & i) = TKNffset(0, -3)
S01.Range("B" & i) = TKNffset(0, -2)
S01.Range("C" & i) = TKNffset(0, -1)
S01.Range("D" & i) = TKNffset(0, 1)
S01.Range("E" & i) = TKNffset(0, 7)
End If
i = i + 1
Thien đã viết:Dear Thunghi.
Cảm ơn sự nhiệt tình giúp đỡ của bạn. Mình có vài câu hỏi nhờ giải đáp:
- Code sổ cái mình copy từ file Mr Hiếu sang file của mình thì trong marco name không có tên SoCai mà có tên Module1.SoCai. Điều này mình gặp phải rất nhiều, ngay cả khi export module từ file này import sang file khác nếu giữ nguyên tên module thì không có gì còn nếu đặt lại tên khác thì bị như trên.
- Trong file Insocai-V2 của bạn cũng như trong file của mình có 1 điều mình không biết cách chỉnh là tại ô E8 & F8 mình không muốn tính bằng VBA, mà muốn giữ nguyên E8 =IF($D$2="","",VLOOKUP($D$2,CDPS,6,0)) và F8=IF($D$2="","",VLOOKUP($D$2,CDPS,6,0)). Một điều vô lý là trong code của Mr Hiếu có đặt VBA cho cả 02 ô này nhưng khi chạy code thì chỉ ô E8 bị thôi, còn ô F8 vẫn còn công thức. Điều này cũng làm cho các sổ cái được tạo ra trên từng sheet bị tính toán sai ngay tại ô E8.
Bạn xem hộ & giải thích giúp mình.
Cảm ơn nhiều.
Thân chào (TC.).
PS: Mr Hiếu sao vẫn không giúp mình giải đáp thắc mắc file mình gửi qua mail nhỉ?.








ThuNghi đã viết:Bác này chơi tôi thiệt
L994=IF(SUM(L983:L985)>SUM(L962:L980),SUM(L983:L985)-SUM(L962:L980)," ")
Thay bằng
L994=IF(SUM(L983:L985)>SUM(L962:L980),SUM(L983:L985)-SUM(L962:L980),0)
Else ' Phat Sinh
ST = IIf(WorksheetFunction.IsText(TKNffset(0, 7).Value), 0, TKN
ffset(0, 7).Value)
S01.Range("F8").Value = S01.Range("F8").Value + ST 'TKNffset(0, 7).Value
ie nếu TKNST = IIf(WorksheetFunction.IsText(TKNffset(0, 7).Value), 0, TKN
ffset(0, 7).Value)
S01.Range("E8").Value = S01.Range("E8").Value + ST
ActiveWindow.SelectedSheets.PrintPreview
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
Set TKNo = Nothing
With Application
....




Option Explicit
Sub InNhieuSC()
With Application
.Calculation = xlCalculationManual
.ScreenUpdating = False
.DisplayAlerts = False
End With
Dim i As Integer, Rows As Integer
'S09.Visible = xlSheetVisible
Rows = S99.Cells(2, 3).Value
For i = 1 To Rows
S01.Range("D2").Value = Range("Dmtk").Cells(i, 1).Value
Call InSoCaiCT
Next i
S09.Select
Cells.ClearContents
Cells.ClearFormats
' S09.Visible = xlSheetHidden
With Application
.Calculation = xlCalculationAutomatic
.ScreenUpdating = True
.DisplayAlerts = True
End With
S01.Select
Range("d2").Select
End Sub
Sub InSoCaiCT()
With Application
.ScreenUpdating = False
.Calculation = xlCalculationManual
End With
S01.Range("A1").Value = "=TEN"
S01.Range("A1").Value = S01.Range("A1").Value
S01.Range("A2").Value = "=MST"
S01.Range("A2").Value = S01.Range("A2").Value
S01.Range("A3").Value = "=DC"
S01.Range("A3").Value = S01.Range("A3").Value
Selection.Merge True
Range("A1:B3").Select
Selection.Merge True
S01.Range("D1009").Value = "=NGAY"
S01.Range("D1009").Value = S01.Range("D1009").Value
Selection.Merge True
Range("D1015:F1009").Select
Selection.Merge True
S01.Range("C1015").Value = "=KTT"
S01.Range("C1015").Value = S01.Range("C1015").Value
S01.Range("D1015").Value = "=GIAMDOC"
S01.Range("D1015").Value = S01.Range("D1015").Value
Selection.Merge True
Range("D1015:F1015").Select
Selection.Merge True
Dim i, HC, m As Long
Dim TKNo As Range
Dim TK As String
S01.Range("E8:F8").ClearContents
TK = Left$(S01.Range("D2"), 10)
m = Len(S01.Range("D2"))
HC = S00.Range("E65000").End(xlUp).Row
i = 12
S01.Range("A12:F1006, E1007:F1007").ClearContents ' Xoa temp
S01.Range("A12:F1006").EntireRow.Hidden = False
For Each TKNo In S00.Range("E5:E" & HC)
If TKNo.Offset(0, -2) <= S01.Range("D4").Value And Len(TKNo) > 2 Then
If Left$(TKNo, m) = TK Then ' No
If TKNo.Offset(0, -2).Value < S01.Range("C4").Value Then ' Ngay nho hon
i = i + 1
'S01.Range("E8").Value = S01.Range("E8").Value + TKNo.Offset(0, 7).Value
Else ' Phat Sinh
Dim st As Long
st = IIf(WorksheetFunction.IsText(TKNo.Offset(0, 7).Value), 0, TKNo.Offset(0, 7).Value)
S01.Range("E8").Value = S01.Range("E8").Value + st
'TKNo.Offset(0, 7).Value
'S01.Range("E8").Value = S01.Range("E8").Value + TKNo.Offset(0, 7).Value
'i = i + 1
S01.Range("A" & i) = TKNo.Offset(0, -3)
S01.Range("B" & i) = TKNo.Offset(0, -2)
S01.Range("C" & i) = TKNo.Offset(0, -1)
S01.Range("D" & i) = TKNo.Offset(0, 1)
S01.Range("E" & i) = TKNo.Offset(0, 7)
End If
i = i + 1
ElseIf Left$(TKNo.Offset(0, 1), m) = TK Then ' Co
If TKNo.Offset(0, -2).Value < S01.Range("C4").Value Then ' Ngay nho hon
'S01.Range("F8").Value = S01.Range("F8").Value + TKNo.Offset(0, 7).Value
i = i + 1
Else ' Phat Sinh
st = IIf(WorksheetFunction.IsText(TKNo.Offset(0, 7).Value), 0, TKNo.Offset(0, 7).Value)
S01.Range("F8").Value = S01.Range("F8").Value + st
'S01.Range("F8").Value = S01.Range("F8").Value + TKNo.Offset(0, 7).Value
'i = i + 1
S01.Range("A" & i) = TKNo.Offset(0, -3)
S01.Range("B" & i) = TKNo.Offset(0, -2)
S01.Range("C" & i) = TKNo.Offset(0, -1)
S01.Range("D" & i) = TKNo
S01.Range("F" & i) = TKNo.Offset(0, 7)
End If
i = i + 1
End If
End If
Next
'Stop
If i > 11 Then
S01.Range("E1007").Value = WorksheetFunction.Sum(S01.Range("E12:E" & i))
S01.Range("F1007").Value = WorksheetFunction.Sum(S01.Range("F12:F" & i))
End If
If i < 20 Then i = 20
S01.Range("A" & i + 1 & ":A1006").EntireRow.Hidden = True
'ActiveWindow.SelectedSheets.PrintPreview
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
Set TKNo = Nothing
With Application
.Calculation = xlCalculationAutomatic
.ScreenUpdating = True
End With
End Sub
Option Explicit
Sub InNhieuSC()
Dim i As Integer, Rows As Integer
With Application
.Calculation = xlCalculationManual
.ScreenUpdating = False
.DisplayAlerts = False
End With
Rows = S99.Cells(2, 3).Value
For i = 1 To Rows
S01.Range("D2").Value = Range("Dmtk").Cells(i, 1).Value
Call SoCaiCT
ActiveWindow.SelectedSheets.PrintPreview
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
'Muốn chọn cái nào thì chọn
Next i
With Application
.Calculation = xlCalculationAutomatic
.ScreenUpdating = True
.DisplayAlerts = True
End With
S01.Select
Range("d2").Select
End Sub
Sub TaoNhieuSC()
Dim i As Integer, Rows As Integer
With Application
.Calculation = xlCalculationManual
.ScreenUpdating = False
.DisplayAlerts = False
End With
S09.Visible = xlSheetVisible
Rows = S99.Cells(2, 3).Value
For i = 1 To Rows
S01.Range("D2").Value = Range("Dmtk").Cells(i, 1).Value
Call SoCaiCT
Call TaoSoCai
Next i
With S09
.Cells.ClearContents
.Cells.ClearFormats
.Visible = xlSheetHidden
End With
With Application
.Calculation = xlCalculationAutomatic
.ScreenUpdating = True
.DisplayAlerts = True
End With
S01.Select
Range("d2").Select
End Sub
Sub TaoSoCai()
'Xoa tmp 'unhide row to paste
With S09
.Range("A:F").EntireRow.Hidden = False
.Cells.ClearContents
.Cells.ClearFormats
End With
'copy socai va dan vao tmp
S01.Select
Range("Socai").Select
Selection.Copy
S09.Select
Range("a1").Select
ActiveSheet.Paste
Application.CutCopyMode = False
'gan lai gia tri va xoa validation muc dich tao file chi tiet no link
S09.Range("e7:F9").Value = S09.Range("e7:F9").Value
S09.Range("A1:D6").Value = S09.Range("A1:D6").Value
S09.Range("D2").Select
With Selection.Validation
.Delete
.Add Type:=xlValidateInputOnly, AlertStyle:=xlValidAlertStop, Operator _
:=xlBetween
.IgnoreBlank = True
.InCellDropdown = True
.ShowInput = True
.ShowError = True
End With
Dim i As Long
'xac dinh dong cuoi co dl
i = S09.Range("C1006").End(xlUp).Row
If i < 20 Then i = 20
'xoa dong trong ->1006 trong sh tmp
S09.Range("A" & i + 1 & ":A1006").EntireRow.Delete Shift:=xlUp
'tao so moi & preview
S09.Copy After:=s98
Sheets("tmp (2)").Select
Sheets("tmp (2)").Name = Sheets("tmp (2)").Range("D2").Value
End Sub
Sub SoCaiCT()
With Application
.ScreenUpdating = False
.Calculation = xlCalculationManual
End With
Dim i, HC, M As Long
Dim TKNo As Range
Dim TK As String
Dim ST As Long
S01.Range("E8:F8").ClearContents
TK = Left$(S01.Range("D2"), 10)
M = Len(S01.Range("D2"))
HC = S00.Range("E65000").End(xlUp).Row
i = 12
S01.Range("A12:F1006, E1007:F1007").ClearContents ' Xoa temp
S01.Range("A12:F1006").EntireRow.Hidden = False
For Each TKNo In S00.Range("E5:E" & HC)
If TKNo.Offset(0, -2) <= S01.Range("D4").Value And Len(TKNo) > 2 Then
If Left$(TKNo, M) = TK Or Left$(TKNo.Offset(0, 1), M) = TK Then ' No Co =TK
If TKNo.Offset(0, -2).Value < S01.Range("C4").Value Then ' Ngay nho hon
i = i + 1
Else ' Phat Sinh
ST = IIf(WorksheetFunction.IsText(TKNo.Offset(0, 7).Value), 0, TKNo.Offset(0, 7).Value)
With S01
.Range("A" & i & ":C" & i).Value = Range(TKNo.Offset(0, -3), TKNo.Offset(0, -1)).Value
End With
'sotien - TKDU
With S01
If Left$(TKNo, M) = TK Then
.Range("D" & i) = TKNo.Offset(0, 1)
.Range("E8").Value = S01.Range("E8").Value + ST
.Range("E" & i) = TKNo.Offset(0, 7)
Else
.Range("D" & i) = TKNo
.Range("F8").Value = S01.Range("F8").Value + ST
.Range("F" & i) = TKNo.Offset(0, 7)
End If
End With
End If
i = i + 1
End If
End If
Next
If i > 11 Then
S01.Range("E1007").Value = WorksheetFunction.Sum(S01.Range("E12:E" & i))
S01.Range("F1007").Value = WorksheetFunction.Sum(S01.Range("F12:F" & i))
End If
If i < 20 Then i = 20
S01.Range("A" & i + 1 & ":A1006").EntireRow.Hidden = True
Set TKNo = Nothing
With Application
.Calculation = xlCalculationAutomatic
.ScreenUpdating = True
End With
End Sub