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ì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)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)
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
trước tiên cám ơn bạn đã chỉ giúp...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!