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

Thảo luận trong 'Ứng dụng Excel' bắt đầu bởi levanduyet, 18 Tháng ba 2005.

7,267 lượt xem

  1. levanduyet

    levanduyet Welcome

    Bài viết:
    535
    Đã được thích:
    11
    Giới tính:
    Nam
    Nơi ở:
    HCM
    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
     
    #1
  2. ForestC

    ForestC Thành viên sơ cấp

    Bài viết:
    377
    Đã được thích:
    1
    Nơi ở:
    E'rywhere
    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. ...
     
    #2
  3. WhoamI

    WhoamI Thành viên thân thiết

    Bài viết:
    534
    Đã được thích:
    0
    Nơi ở:
    Cố lên, cứ đi rồi sẽ tới!
    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
     
    #3
  4. levanduyet

    levanduyet Welcome

    Bài viết:
    535
    Đã được thích:
    11
    Giới tính:
    Nam
    Nơi ở:
    HCM
    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
     
    #4
  5. VuOem

    VuOem Guest

    Ai co phan mem ke toan Free khong cho to xin mot ban. Thanks
     
    Last edited by a moderator: 24 Tháng ba 2005
    #5
  6. SA_DQ

    SA_DQ Thành viên thân thiết

    Bài viết:
    433
    Đã được thích:
    38
    Nơi ở:
    HCM city
    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:
     
    Last edited: 4 Tháng tám 2005
    #6
  7. workman

    workman Thành viên sơ cấp

    Bài viết:
    372
    Đã được thích:
    0
    Nơi ở:
    Ho Chi Minh
    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à.
     
    #7
  8. SA_DQ

    SA_DQ Thành viên thân thiết

    Bài viết:
    433
    Đã được thích:
    38
    Nơi ở:
    HCM city
    Để 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:
     
    #8
  9. adam_tran

    adam_tran Steel Partner

    Bài viết:
    1,373
    Đã được thích:
    32
    Nơi ở:
    Goooogle
    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á!
     
    #9
  10. SA_DQ

    SA_DQ Thành viên thân thiết

    Bài viết:
    433
    Đã được thích:
    38
    Nơi ở:
    HCM city
    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:
     
    #10
  11. Tuanktcdcn

    Tuanktcdcn Lão già ham vui

    Bài viết:
    548
    Đã được thích:
    50
    Nơi ở:
    Hà Nội
    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)
     
    #11

Chia sẻ trang này