Giúp code gán công thức lũy tiến cho sheet được tạo!!! (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

mrkhanhvu

Thành viên mới
Tham gia
28/10/10
Bài viết
11
Được thích
1
Xin chào a/c/e diễn đàn!
Tôi đang gặp khó khăn gán công thức cho một ô lũy tiến, file gửi kèm ghi rõ yêu cầu cần có.
Pro nào biết xin chỉ giúp...
Chân thành cám ơn!!!
 

File đính kèm

Xin chào a/c/e diễn đàn!
Tôi đang gặp khó khăn gán công thức cho một ô lũy tiến, file gửi kèm ghi rõ yêu cầu cần có.
Pro nào biết xin chỉ giúp...
Chân thành cám ơn!!!

Mỗi ngày mỗi tạo hay bạn muốn hễ nhập ngày nào là lấy số của sheet đã tạo cuối cùng vậy bạn?
 
Upvote 0
Mỗi ngày mỗi tạo hay bạn muốn hễ nhập ngày nào là lấy số của sheet đã tạo cuối cùng vậy bạn?
ý mình ở đây là công thức tính lũy tiến ở sheet vừa được tạo = ô tổng của sheet vừa tạo + ô lũy tiến của sheet cuối cùng (sheet ngay trước sheet vừa được tạo)
 
Upvote 0
ý mình ở đây là công thức tính lũy tiến ở sheet vừa được tạo = ô tổng của sheet vừa tạo + ô lũy tiến của sheet cuối cùng (sheet ngay trước sheet vừa được tạo)

Do máy tôi, hiện tại không có controls Calendar nên không chắc chắn rằng bài tôi làm là ổn định, bạn tải file về và nạp lại cái Calendar vào UserForm và toàn bộ code trong form sẽ như sau:

Tôi làm một hàm vừa có tính chất kiểm tra, vừa lấy ngày Max, bởi lũy tiến dựa vào ngày lớn nhất:

[GPECODE=vb]
Private Function CheckSheet() As Date
On Error Resume Next
Dim Sh As Worksheet, MyDate1 As Date, MyDate2 As Date
For Each Sh In ThisWorkbook.Sheets
If Sh.Name <> "sheetbase" Then
MyDate1 = Sh.Name
If MyDate1 > MyDate2 Then MyDate2 = MyDate1
End If
Next
CheckSheet = MyDate2
End Function[/GPECODE]

Như thế thì không cần cái hàm WsExit của bạn nữa!

Và toàn bộ thủ tục trong form sẽ được viết như sau:

Mã:
Private MyDate1 As Date

Private Sub UserForm_Initialize()
    Calendar1 = Date
    txtngay = Format(Date, "dd-mm-yy")
    MyDate1 = txtngay
End Sub

Private Sub cmdexit_Click()
    Unload Me
End Sub

Private Sub Calendar1_Click()
    txtngay = Format(Calendar1, "dd-mm-yy")
    MyDate1 = txtngay
End Sub

Private Sub cmdok_Click()
    If Me.txtngay = "" Then
        MsgBox "BAN CHUA CHON NGAY!", , "THONG BAO!"
        txtngay.SetFocus
    Else
        Dim MyDate2 As Date
        MyDate2 = CheckSheet()
        [COLOR=#008000]'Truong hop khong co sheet co ten ngay-thang-nam nao
        'thi tao sheet moi va cong thuc chi bang o B5:[/COLOR]
        If MyDate2 = 0 Then
            Sheets("sheetbase").Copy After:=Sheets(Sheets.Count)
            ActiveSheet.Name = txtngay
            Range("B1") = MyDate1
            Range("B2").Formula = "=B5"
            Range("B1").Select
            Unload Me
        [COLOR=#008000]'Truong hop Ngay tao ra nho hon ngay cua sheet hien tai
        'thi bao nhap lai ngay moi:[/COLOR]
        ElseIf MyDate2 >= MyDate1 Then
            MsgBox "NGAY NAY DA DUOC TAO! BAN PHAI CHON NGAY KHAC!", , "THÔNG BÁO!"
            txtngay = ""
            txtngay.SetFocus
        ElseIf MyDate2 < MyDate1 Then
            Sheets("sheetbase").Copy After:=Sheets(Sheets.Count)
            ActiveSheet.Name = txtngay
            Range("B1") = MyDate1
            Range("B2").Formula = "=B5+" & "'" & Format(MyDate2, "dd-mm-yy") & "'!B2"
            Range("B1").Select
            Unload Me
        End If
    End If
End Sub

Nếu là tôi, thì tôi sẽ không làm như bạn, tôi chỉ cần làm cơ sở dữ liệu là có thể chỉ dùng đúng 1 sheet cho tất cả các ngày!
 

File đính kèm

Upvote 0
Do máy tôi, hiện tại không có controls Calendar nên không chắc chắn rằng bài tôi làm là ổn định, bạn tải file về và nạp lại cái Calendar vào UserForm và toàn bộ code trong form sẽ như sau:

Tôi làm một hàm vừa có tính chất kiểm tra, vừa lấy ngày Max, bởi lũy tiến dựa vào ngày lớn nhất:

[GPECODE=vb]
Private Function CheckSheet() As Date
On Error Resume Next
Dim Sh As Worksheet, MyDate1 As Date, MyDate2 As Date
For Each Sh In ThisWorkbook.Sheets
If Sh.Name <> "sheetbase" Then
MyDate1 = Sh.Name
If MyDate1 > MyDate2 Then MyDate2 = MyDate1
End If
Next
CheckSheet = MyDate2
End Function[/GPECODE]

Như thế thì không cần cái hàm WsExit của bạn nữa!

Và toàn bộ thủ tục trong form sẽ được viết như sau:

Mã:
Private MyDate1 As Date

Private Sub UserForm_Initialize()
    Calendar1 = Date
    txtngay = Format(Date, "dd-mm-yy")
    MyDate1 = txtngay
End Sub

Private Sub cmdexit_Click()
    Unload Me
End Sub

Private Sub Calendar1_Click()
    txtngay = Format(Calendar1, "dd-mm-yy")
    MyDate1 = txtngay
End Sub

Private Sub cmdok_Click()
    If Me.txtngay = "" Then
        MsgBox "BAN CHUA CHON NGAY!", , "THONG BAO!"
        txtngay.SetFocus
    Else
        Dim MyDate2 As Date
        MyDate2 = CheckSheet()
        [COLOR=#008000]'Truong hop khong co sheet co ten ngay-thang-nam nao
        'thi tao sheet moi va cong thuc chi bang o B5:[/COLOR]
        If MyDate2 = 0 Then
            Sheets("sheetbase").Copy After:=Sheets(Sheets.Count)
            ActiveSheet.Name = txtngay
            Range("B1") = MyDate1
            Range("B2").Formula = "=B5"
            Range("B1").Select
            Unload Me
        [COLOR=#008000]'Truong hop Ngay tao ra nho hon ngay cua sheet hien tai
        'thi bao nhap lai ngay moi:[/COLOR]
        ElseIf MyDate2 >= MyDate1 Then
            MsgBox "NGAY NAY DA DUOC TAO! BAN PHAI CHON NGAY KHAC!", , "THÔNG BÁO!"
            txtngay = ""
            txtngay.SetFocus
        ElseIf MyDate2 < MyDate1 Then
            Sheets("sheetbase").Copy After:=Sheets(Sheets.Count)
            ActiveSheet.Name = txtngay
            Range("B1") = MyDate1
            Range("B2").Formula = "=B5+" & "'" & Format(MyDate2, "dd-mm-yy") & "'!B2"
            Range("B1").Select
            Unload Me
        End If
    End If
End Sub

Nếu là tôi, thì tôi sẽ không làm như bạn, tôi chỉ cần làm cơ sở dữ liệu là có thể chỉ dùng đúng 1 sheet cho tất cả các ngày!
trước tiên cám ơn bạn đã chỉ giúp...
theo yêu cầu là mỗi ngày phải gửi báo cáo bằng 1 sheet nên ko dùng 1 sheet chung cho các ngày được.
và mình cũng chưa dành về việc làm cơ sở dữ liệu lắm.
đoạn code trước đó cũng nhờ bạn làm giúp cho mà cách đây 2 năm rùi
để mình áp dụng koi vận hành có trục trặc gì...làm phiền bạn nữa nha, hj. thanks...
 
Upvote 0

Bài viết mới nhất

Back
Top Bottom