Module về xử lý ngày trong VBA

  • Thread starter levanduyet
  • Ngày gửi
L

levanduyet

Welcome
16/10/04
535
11
18
HCM
my.opera.com
#1
Thưa các bạn,
Lắm lúc các bạn sẽ hơi bực bội khi phải xử lý các hàm về ngày.
Tôi xin cung cấp các hàm mà tôi sưu tầm được. Trong Module này có hàm DNgay, hàm này được tôi phát triển, có dùng class clstring. Hàm này sẽ kiểm tra dữ liệu ngày mình nhập vào một textbox, sau đó nó sẽ kiểm tra và thông báo cũng như làm cho thích hợp. Tôi đã thử dùng nhiều lần. Mong ý kiến đóng góp của các bạn.
Chúc các bạn thành công.
Lê Văn Duyệt
levanduyet@gmail.com
 
F

ForestC

Thành viên sơ cấp
11/1/05
377
1
0
39
E'rywhere
#2
Em dùng mấy cái code của anh và em đã giải quyết được 1 vấn đề nhỏ về ngày tháng mà em cần, đó là Daysinmonth() để biết được ngày đó trong tháng đó có bao nhiêu ngày,

Anh à, em nhờ anh viết giúp em một cái : cũng như thế nhưng hàm đó fải trả về ngày cuối cùng của 1 tháng nào đó, VD: eomonth(a1) trả về 31/01/2004 chẳng hạn, ví dụ A1 ở đây = 02/01/04 hoặc một ngày nào khác cũng đươc. ...
 
W

WhoamI

Thành viên thân thiết
#3
MaiCa nói:
Anh à, em nhờ anh viết giúp em một cái : cũng như thế nhưng hàm đó fải trả về ngày cuối cùng của 1 tháng nào đó, VD: eomonth(a1) trả về 31/01/2004 chẳng hạn, ví dụ A1 ở đây = 02/01/04 hoặc một ngày nào khác cũng đươc. ...
Cái hàm này có rồi mà! chính là cái hàm eomonth() đó ạ! Ngoài ra nếu muốn trả về ngày T6 nếu ngày cuối tháng là ngày T7,CN thì anh tham khảo ở topic này nè:http://www.unifiedtech.net.au/webketoan/forum/showthread.php?p=29250#post29250
 
L

levanduyet

Welcome
16/10/04
535
11
18
HCM
my.opera.com
#4
WhoamI nói:
Cái hàm này có rồi mà! chính là cái hàm eomonth() đó ạ!
To: WhoamI,
Thế mới là WhoamI chứ ! Maica không chịu đọc kỹ gì hết ! Phạt em đấy.
Thôi chúc các bạn tìm được gì mình mong muốn.
À mà này, tụi em nghiên cứu thêm các hàm của PUP6 mà anh đưa lên xem sao...Có nhiều hàm hay lắm đấy!
Tự thưởng cho mình một...hi hi hi... viên vitamin...go go go.
Lê Văn Duyệt
 
V

VuOem

Guest
#5
Ai co phan mem ke toan Free khong cho to xin mot ban. Thanks
 
Sửa lần cuối bởi điều hành viên:
S

SA_DQ

Thành viên thân thiết
29/6/05
435
38
28
61
HCM city
#6
Hàm Biến ngày thành chuổi đây!

Function MaNgay(IStt as Integer, Optional Dat As Date :biggrin: ) as String
Dim Chu As String, ii As Integer, Chu0 as String

Chu="@0123456789ABCDEFG......Z"
if Dat < #2/1/1900# then Dat = Date() :biggrin:
ii= Year(Dat())-1997: Chu0=Mid(Chu,ii \ 3,1)
ii = 12* (ii mod 3):
ii = Month(Dat())+ ii: Chu0=Chu0 & Mid(Chu,ii,1)
ii= Day(Dat()): Chu0=Chu0 & Mid(Chu,ii,1)
ii=IStt\36: Chu0=Chu0 & Mid(Chu,ii + 1,1) '!
ii=IStt mod 36: Chu0=Chu0 & Mid(Chu,ii + 1,1) '!
MaNgay=Chu0
End Function :lol:
' Công dụng của nó là mã hoá các trật tự các hoá đơn trong thế kỷ 21 được tốt lành Với điều kiện một ngày chỉ xuất 36*36 hoá đơn mà thôi! :atom:
 
Sửa lần cuối:
W

workman

Thành viên sơ cấp
22/7/05
372
0
0
46
Ho Chi Minh
#7
SA_DQ nói:
Function MaNgay(IStt as Integer) as String
Dim Chu As String, ii As Integer, Chu0 as String

Chu="@0123456789ABCDEFG......Z"
ii= Year(Date())-1997: Chu0=Mid(Chu,ii \ 3,1)
ii = 12* (ii mod 3):
ii = Month(Date())+ ii: Chu0=Chu0 & Mid(Chu,ii,1)
ii= Day(Date()): Chu0=Chu0 & Mid(Chu,ii,1)
ii=IStt\36: Chu0=Chu0 & Mid(Chu,ii,1)
ii=IStt mod 36: Chu0=Chu0 & Mid(Chu,ii,1)
MaNgay=Chu0
End Function :lol:
' Công dụng của nó là mã hoá các trật tự các hoá đơn trong thế kỷ 21 được tốt lành Với điều kiện một ngày chỉ xuất 36*36 hoá đơn mà thôi! :atom:
Xin lỗi mình chưa hiểu rõ lắm. Ý nghĩa thực tiễn của hàm này dùng làm gì thế.

Bạn cho xin tí giải thích chi tiết từng dòng lệnh được không? Tôi vốn dốt VBA mà.
 
S

SA_DQ

Thành viên thân thiết
29/6/05
435
38
28
61
HCM city
#8
Để mã hoá tạo liên hệ giữa 2 bảng Record

Hàm Đó mình vừa tu sữa lại 1 chút tí. :wall: Hãy coi như trong 1 hoá đơn có phần cố định gồm Ng mua & Ng bán; Mã ST Ng Mua/Bán, Ngày GiaoNhận . . . Còn chi tiết hàng hoá có nhiều dòng gồm DonGia, SoLuong, MatHang, DVTinh. Hai bảng này liên hệ với nhau 1-Nhiều. Liên hệ qua khoá Duy nhất Do hàm này cung cấp Có vậy bạn sẽ lập hoá đơn hay nhập liệu được thuận tiện. (Chưa rõ cho hỏi nữa!) :two:
 
adam_tran

adam_tran

Steel Partner
17/5/05
1,373
32
48
41
Goooogle
#9
Công dụng của nó là mã hoá các trật tự các hoá đơn trong thế kỷ 21 được tốt lành Với điều kiện một ngày chỉ xuất 36*36 hoá đơn mà thôi!
Híc, không rành VBA khổ thế đấy, đọc bài viết chẳng khác gì đọc bảng số pi. Theo như ý bạn thì hàm trên dùng để mã hóa số hóa đơn xuất ra để tiện quản lý, căn cứ vào số thứ tự và ngày nhập, kết quả sẽ gồm 2 ký tự là 1 tổ hợp chập 2 của 36 ký tự (@,0-9, A-Z). Tôi đoán vậy, híc, nhưng hình như bạn nhập sai ký tự gì đó khiến code nó không chạy, thí dụ dấu "/" thay vì dấu "\".
Bạn đánh đố quá!
 
S

SA_DQ

Thành viên thân thiết
29/6/05
435
38
28
61
HCM city
#10
Hàm Trả về 01 chuổi gồm 5 chữ!

Mình xin lỗi & đã sửa rồi mà; Sai ở 2 dòng gần cuối; :1luvu:
3 chữ đầu biểu thị năm, tháng & ngày cụ thể nào đó theo chiều tăng dần; 2 chữ cuối biểu thị cô gọn của 36*36 stt hoá đơn trong ngày xuất/nhập theo chiều tăng; Hàm này liên hệ giữa phần chung & chi tiết của hoá đơn! :two:
 
T

Tuanktcdcn

Lão già ham vui
18/6/04
548
51
28
41
Hà Nội
www.bluesofts.net
#11
Hệ thống các hàm xử lý Ngày thường dùng

'=======Hàm cho ra thứ mấy trong Tuần
Function Thutrongtuan(Byval bDate as Date) As String
Dim Thu(7)
Thu(1)="Chủ Nhật"
Thu(2)="Thứ hai"
Thu(3)="Thứ ba"
Thu(4)="Thứ tư"
Thu(5)="Thứ năm"
Thu(6)="Thứ sáu"
Thu(7)="Thứ bảy"

Thutrongtuan=Thu(Weekday(bDate))
End Function

'=======Hàm cho một tháng có bao nhiêu ngày
Function Ngaycuathang(Byval bDate as Date) As Byte
Dim Namnhuan as Boolean
Dim Ngay as Byte,Thang as Byte
Namnhuan =(Year(bDate)/4=0)
Thang=Month(bDate)
If Thang=4 or Thang=6 or Thang=9 or Thang=11 then
Ngay=30
ElseIf Thang=2 then
If Namthuan then
Ngay=29
Else
Ngay=28
End If
Else
Ngay=31
End if
Ngaycuathang=Ngay
End Function

'=======Hàm cho ngày cuối tháng (dd/mm/yyyy)
Function NgayCuoiThang(Byval bDate as Date) As Date
Dim Ngay as Byte

Ngay=Day(bDate)

NgayCuoiThang=bDate+(Ngaycuathang-Ngay)

End Function

'=======Hàm cho một chuỗi "Ngày xx tháng xx năm xxxx"
Function NgayThangNam(Byval bDate as Date) As String
Dim Ngay as Byte,Thang as Byte
Dim Nam as Integer
Ngay=Day(bDate)
Thang=Month(bDate)
Nam=Year(bDate)
NgayThangNam="Ngay " & Ngay & " tháng " & Thang & " năm " & Nam
End Function

'=======Hàm cho một chuỗi "Ngày xx tháng xx năm xxxx" cuối tháng
Function NgayCuoiThangSTR(Byval bDate as Date) As String
NgayCuoiThangSTR=NgayThangNam(NgayCuoiThang(bDate))
End Function

'=======Hàm cho một chuỗi "Thứ - Ngày xx tháng xx năm xxxx"
Function Thu_NTN(Byval bDate as Date) As String
Thu_NTN=Thutrongtuan(bDate) & " - " & NgayThangNam(bDate)
End Function
'=======Hàm cho một chuỗi "Thứ - Ngày xx tháng xx năm xxxx" cuối tháng
Function Thu_NTN_EOM(Byval bDate as Date) As String
Dim NgaycuoiTh As Date
NgaycuoiTh=NgayCuoiThang(bDate)
Thu_NTN_EOM=Thu_NTN(NgaycuoiTh)
End Function

'==================================================
' Các bạn tự viết cho ngày đầu tháng (BOM)
Khi làm việc trên các Sheet bạn sẽ dùng các hàm đó theo các tình huống của mình.
Tham số bDate trong các hàm trên có thể là Today() hay ngay của một chứng từ, ngày của một hợp đồng, ngày thông báo công văn,....
A1=Today()
B1=Thutrongtuan(A1)
B1=Ngaycuathang(A1)
B1=NgayCuoiThang(A1)
B1=NgayThangNam(A1)
B1=NgayCuoiThangSTR(A1)
B1=Thu_NTN(A1)
B1=Thu_NTN_EOM(A1)
 

Thành viên trực tuyến

  • Gió cuốn
  • HD192
  • huygia88
  • nhannhan105
  • hoacotu0792
  • daongocnam0603
  • TinhLe 123
  • phamtuan3850
  • Dieutamhai
  • sxconkho15
  • wanbixla
  • huong_lai2212

Xem nhiều