Nhờ trợ giúp: Khi mở file hiển thị thông báo ngày sinh nhật, với chữ có dấu?!

Liên hệ QC

Tony Jaa

Thành viên chính thức
Tham gia
12/1/09
Bài viết
62
Được thích
115
Điểm
0
Tuổi
50
Nơi ở
Thailand
Nghề nghiệp
Đóng phim
Trong file đính kèm là danh sách nhân sự, có cột ngày tháng năm sinh. Các bạn dúp mình viết code sao cho khi mở file này ra thì hiện một hộp thọai thông báo họ và tên của những người có ngày tháng năm sinh trùng với ngày mở file (today()).

Đây là file dạng chữ VNI-Times có dấu, vì vậy vấn đề phức tạp phải giải quyêt theo 2 hướng:

1- Thông báo số người, tên người, chữ không dấu.
2- Thông báo số người, tên người, chữ có dấu (nếu được dạng này thì ngon hơn).

Cảm ơn các bạn nhiều!
 

File đính kèm

  • Hien thong bao ngay sinh nhat.zip
    6.3 KB · Đọc: 89
Trong file đính kèm là danh sách nhân sự, có cột ngày tháng năm sinh. Các bạn dúp mình viết code sao cho khi mở file này ra thì hiện một hộp thọai thông báo họ và tên của những người có ngày tháng năm sinh trùng với ngày mở file (today()).

Đây là file dạng chữ VNI-Times có dấu, vì vậy vấn đề phức tạp phải giải quyêt theo 2 hướng:

1- Thông báo số người, tên người, chữ không dấu.
2- Thông báo số người, tên người, chữ có dấu (nếu được dạng này thì ngon hơn).

Cảm ơn các bạn nhiều!
Ái dà... hiện tiếng Việt trên MsgBox đã khó, nay lại còn VNI-Times nữa...
Nếu bạn đồng ý chuyển sang tiếng Việt Unicode thì tôi làm giúp cho...
hoặc tham khảo tại đây:
http://www.giaiphapexcel.com/forum/showthread.php?t=22819
 
Vâng, nếu tiếng việt VNI-Times khó thực hiện, thì bác làm dúp em tiếng Việt Unicode cũng được. Cảm ơn bác nhiều!
Code đây:
PHP:
Sub Auto_Open()
  Dim Clls As Range, StrC As String, Check As Boolean
  With Sheet1
    StrC = Evaluate("Text1")
    For Each Clls In Range(.[M3], .[M3].End(xlDown))
      If Format(Clls, "dd/mm") = Format(Date, "dd/mm") Then
        Check = True
        StrC = StrC & Chr(10) & Clls.Offset(, -11)
      End If
    Next Clls
    If Check Then
      Application.ExecuteExcel4Macro ("ALERT(""" & StrC & """,2)")
    End If
  End With
End Sub
Và file đính kèm
 

File đính kèm

  • Hien thong bao ngay sinh nhat.xls
    36 KB · Đọc: 168
Trong file đính kèm là danh sách nhân sự, có cột ngày tháng năm sinh. Các bạn dúp mình viết code sao cho khi mở file này ra thì hiện một hộp thọai thông báo họ và tên của những người có ngày tháng năm sinh trùng với ngày mở file (today()).

Đây là file dạng chữ VNI-Times có dấu, vì vậy vấn đề phức tạp phải giải quyêt theo 2 hướng:

1- Thông báo số người, tên người, chữ không dấu.
2- Thông báo số người, tên người, chữ có dấu (nếu được dạng này thì ngon hơn).

Cảm ơn các bạn nhiều!

Gửi cho bạn tham khảo file sử dụng font VNI ( Hình như bạn quen sữ dụng font này thì phải)
Trong file có sử dụng thêm các hàm chuyển đổi font của anh Bình Admin và hàm MsgBoxUni của anh Tuân. Cám ơn hai anh
 

File đính kèm

  • Hien thong bao ngay sinh nhat.xls
    68.5 KB · Đọc: 63
Rất cảm ơn các cao thủ đã rất nhiệt tình dúp em, em xin mạn phép có vài ý thế này:

  1. Code Thông báo ngày sinh nhật của bác ndu96081631, liệt kê đầy đủ tên của tất cả những người có ngày sinh = TODAY vào chỉ trong một MsgBox, như vậy rất tiện dụng. Giá như bác ndu96081631, lấy cái code convest font (của OverAC và Anh Tuan) bên file của bác Minh Nguyet mà làm cho chữ VNI-TIMES theo file gốc của em hiển thị lên thông báo MsgBox có dấu thì hay hơn nữa (tuyệt)!
  2. Code Thông báo ngày sinh nhật của chị (đoán là chị, nhưng biết đâu lại là anh, nếu là anh thì phải mời nhậu thôi, hehe!?) Minh Nguyet, tuy đã dùng bộ code để convest fonts VNI, nhưng không hiểu tại sao khi em mở ra trên máy của mình, thì chữ hiện trên thông báo MsgBox bị lỗi, vẫn không đọc được thành chữ có dấu chuẩn. Và cách hiện thông báo mỗi người một MsgBox thì chưa được tiện cho lắm, vì giả sử Công ty em có vài ngàn người, hôm đó sinh nhật vài chục người thì việc xem và bấm tắt lần lượt các thông báo cũng mất tương đương vài chục lần.
Nếu các bác cải tiến dùm em tí nữa thì quá ngon luôn!
Em nói có gì kg phải mong các bác bỏ qua nhé!

Cảm ơn các bác nhiều, chúc các bác khỏe và ngày càng trí tuệ, thành đạt!

Thân mến!
 
Lần chỉnh sửa cuối:
Rất cảm ơn các cao thủ đã rất nhiệt tình dúp em, em xin mạn phép có vài ý thế này:

  1. Code Thông báo ngày sinh nhật của bác ndu96081631, liệt kê đầy đủ tên của tất cả những người có ngày sinh = TODAY vào chỉ trong một MsgBox, như vậy rất tiện dụng. Giá như bác ndu96081631, lấy cái code convest font (của OverAC và Anh Tuan) bên file của bác Minh Nguyet mà làm cho chữ VNI-TIMES theo file gốc của em hiển thị lên thông báo MsgBox có dấu thì hay hơn nữa (tuyệt)!

Thân mến!
Bác sửa lại cái code một chút là OK, lấy 2 file làm 1.
PHP:
Sub Auto_Open()
  Dim Clls As Range, StrC As String, Check As Boolean
  With Sheet1
    StrC = Evaluate("Text1")
    StrC = VNItoUNICODE(StrC)
    For Each Clls In Range(.[M3], .[M3].End(xlDown))
      If Format(Clls, "dd/mm") = Format(Date, "dd/mm") Then
        Check = True
        StrC = StrC & Chr(10) & VNItoUNICODE(Clls.Offset(, -11))
      End If
    Next Clls
    If Check Then
      Application.ExecuteExcel4Macro ("ALERT(""" & StrC & """,2)")
    End If
  End With
End Sub
'Ham VNItoUNICODE duoc viet boi Binh - OverAC'
'www.giaiphapexcel.com'
Function VNItoUNICODE(vnstr As String)
Dim c As String, i As Integer
Dim db As Boolean
   For i = 1 To Len(vnstr)
      db = False
      If i < Len(vnstr) Then
         c = Mid(vnstr, i + 1, 1)
         If c = "ù" Or c = "ø" Or c = "û" Or c = "õ" Or c = "ï" Or _
            c = "ê" Or c = "é" Or c = "è" Or c = "ú" Or c = "ü" Or c = "ë" Or _
            c = "â" Or c = "á" Or c = "à" Or c = "å" Or c = "ã" Or c = "ä" Or _
            c = "Ù" Or c = "Ø" Or c = "Û" Or c = "Õ" Or c = "Ï" Or _
            c = "Ê" Or c = "É" Or c = "È" Or c = "Ú" Or c = "Ü" Or c = "Ë" Or _
            c = "Â" Or c = "Á" Or c = "À" Or c = "Å" Or c = "Ã" Or c = "Ä" Then db = True
      End If
      If db Then
         c = Mid(vnstr, i, 2)
         Select Case c
            Case "aù": c = ChrW$(225)
            Case "aø": c = ChrW$(224)
            Case "aû": c = ChrW$(7843)
            Case "aõ": c = ChrW$(227)
            Case "aï": c = ChrW$(7841)
            Case "aê": c = ChrW$(259)
            Case "aé": c = ChrW$(7855)
            Case "aè": c = ChrW$(7857)
            Case "aú": c = ChrW$(7859)
            Case "aü": c = ChrW$(7861)
            Case "aë": c = ChrW$(7863)
            Case "aâ": c = ChrW$(226)
            Case "aá": c = ChrW$(7845)
            Case "aà": c = ChrW$(7847)
            Case "aå": c = ChrW$(7849)
            Case "aã": c = ChrW$(7851)
            Case "aä": c = ChrW$(7853)
            Case "eù": c = ChrW$(233)
            Case "eø": c = ChrW$(232)
            Case "eû": c = ChrW$(7867)
            Case "eõ": c = ChrW$(7869)
            Case "eï": c = ChrW$(7865)
            Case "eâ": c = ChrW$(234)
            Case "eá": c = ChrW$(7871)
            Case "eà": c = ChrW$(7873)
            Case "eå": c = ChrW$(7875)
            Case "eã": c = ChrW$(7877)
            Case "eä": c = ChrW$(7879)
            Case "où": c = ChrW$(243)
            Case "oø": c = ChrW$(242)
            Case "oû": c = ChrW$(7887)
            Case "oõ": c = ChrW$(245)
            Case "oï": c = ChrW$(7885)
            Case "oâ": c = ChrW$(244)
            Case "oá": c = ChrW$(7889)
            Case "oà": c = ChrW$(7891)
            Case "oå": c = ChrW$(7893)
            Case "oã": c = ChrW$(7895)
            Case "oä": c = ChrW$(7897)
            Case "ôù": c = ChrW$(7899)
            Case "ôø": c = ChrW$(7901)
            Case "ôû": c = ChrW$(7903)
            Case "ôõ": c = ChrW$(7905)
            Case "ôï": c = ChrW$(7907)
            Case "uù": c = ChrW$(250)
            Case "uø": c = ChrW$(249)
            Case "uû": c = ChrW$(7911)
            Case "uõ": c = ChrW$(361)
            Case "uï": c = ChrW$(7909)
            Case "öù": c = ChrW$(7913)
            Case "öø": c = ChrW$(7915)
            Case "öû": c = ChrW$(7917)
            Case "öõ": c = ChrW$(7919)
            Case "öï": c = ChrW$(7921)
            Case "yù": c = ChrW$(253)
            Case "yø": c = ChrW$(7923)
            Case "yû": c = ChrW$(7927)
            Case "yõ": c = ChrW$(7929)
            Case "AÙ": c = ChrW$(193)
            Case "AØ": c = ChrW$(192)
            Case "AÛ": c = ChrW$(7842)
            Case "AÕ": c = ChrW$(195)
            Case "AÏ": c = ChrW$(7840)
            Case "AÊ": c = ChrW$(258)
            Case "AÉ": c = ChrW$(7854)
            Case "AÈ": c = ChrW$(7856)
            Case "AÚ": c = ChrW$(7858)
            Case "AÜ": c = ChrW$(7860)
            Case "AË": c = ChrW$(7862)
            Case "AÂ": c = ChrW$(194)
            Case "AÁ": c = ChrW$(7844)
            Case "AÀ": c = ChrW$(7846)
            Case "AÅ": c = ChrW$(7848)
            Case "AÃ": c = ChrW$(7850)
            Case "AÄ": c = ChrW$(7852)
            Case "EÙ": c = ChrW$(201)
            Case "EØ": c = ChrW$(200)
            Case "EÛ": c = ChrW$(7866)
            Case "EÕ": c = ChrW$(7868)
            Case "EÏ": c = ChrW$(7864)
            Case "EÂ": c = ChrW$(202)
            Case "EÁ": c = ChrW$(7870)
            Case "EÀ": c = ChrW$(7872)
            Case "EÅ": c = ChrW$(7874)
            Case "EÃ": c = ChrW$(7876)
            Case "EÄ": c = ChrW$(7878)
            Case "OÙ": c = ChrW$(211)
            Case "OØ": c = ChrW$(210)
            Case "OÛ": c = ChrW$(7886)
            Case "OÕ": c = ChrW$(213)
            Case "OÏ": c = ChrW$(7884)
            Case "OÂ": c = ChrW$(212)
            Case "OÁ": c = ChrW$(7888)
            Case "OÀ": c = ChrW$(7890)
            Case "OÅ": c = ChrW$(7892)
            Case "OÃ": c = ChrW$(7894)
            Case "OÄ": c = ChrW$(7896)
            Case "ÔÙ": c = ChrW$(7898)
            Case "ÔØ": c = ChrW$(7900)
            Case "ÔÛ": c = ChrW$(7902)
            Case "ÔÕ": c = ChrW$(7904)
            Case "ÔÏ": c = ChrW$(7906)
            Case "UÙ": c = ChrW$(218)
            Case "UØ": c = ChrW$(217)
            Case "UÛ": c = ChrW$(7910)
            Case "UÕ": c = ChrW$(360)
            Case "UÏ": c = ChrW$(7908)
            Case "ÖÙ": c = ChrW$(7912)
            Case "ÖØ": c = ChrW$(7914)
            Case "ÖÛ": c = ChrW$(7916)
            Case "ÖÕ": c = ChrW$(7918)
            Case "ÖÏ": c = ChrW$(7920)
            Case "YÙ": c = ChrW$(221)
            Case "YØ": c = ChrW$(7922)
            Case "YÛ": c = ChrW$(7926)
            Case "YÕ": c = ChrW$(7928)
         End Select
      Else
         c = Mid(vnstr, i, 1)
         Select Case c
            Case "ô": c = ChrW$(417)
            Case "í": c = ChrW$(237)
            Case "ì": c = ChrW$(236)
            Case "æ": c = ChrW$(7881)
            Case "ó": c = ChrW$(297)
            Case "ò": c = ChrW$(7883)
            Case "ö": c = ChrW$(432)
            Case "î": c = ChrW$(7925)
            Case "ñ": c = ChrW$(273)
            Case "Ô": c = ChrW$(416)
            Case "Í": c = ChrW$(205)
            Case "Ì": c = ChrW$(204)
            Case "Æ": c = ChrW$(7880)
            Case "Ó": c = ChrW$(296)
            Case "Ò": c = ChrW$(7882)
            Case "Ö": c = ChrW$(431)
            Case "Î": c = ChrW$(7924)
            Case "Ñ": c = ChrW$(272)
         End Select
      End If
      VNItoUNICODE = VNItoUNICODE + c
      If db Then i = i + 1
   Next i
End Function
 
Các bác ơi!
Lại phiền các bác nữa rồi!

Giờ dùng rồi lại thấy phát sinh, giả sử có 2 hoặc hơn nữa những người trùng tên nhau, mà trên thông báo chỉ thể hiện mỗi tên người thôi (không thể hiện người đó thuộc bộ phận nào), thì thì mình kg biết được là sinh nhật của người nào.

Vậy các bác làm ơn sửa thêm code: sao cho thông báo hiển thị: Họ và Tên, Mã số nhân viên, Bộ phận của người đó (theo cột bộ phận tương ứng) luôn dùm em được thì ngon biết mấy.

Cảm ơn các bác nhiều!

Thân mến!
 
Các bác ơi!
Lại phiền các bác nữa rồi!

Giờ dùng rồi lại thấy phát sinh, giả sử có 2 hoặc hơn nữa những người trùng tên nhau, mà trên thông báo chỉ thể hiện mỗi tên người thôi (không thể hiện người đó thuộc bộ phận nào), thì thì mình kg biết được là sinh nhật của người nào.

Vậy các bác làm ơn sửa thêm code: sao cho thông báo hiển thị: Họ và Tên, Mã số nhân viên, Bộ phận của người đó (theo cột bộ phận tương ứng) luôn dùm em được thì ngon biết mấy.

Cảm ơn các bác nhiều!

Thân mến!
Thì thêm vào & trong dòng code này.
HoTen: -11 => BoPhan: -9...Muốn thêm vô tư vào cũng được mà dài quá thì nên lọc sang 1 sheet khác.

StrC = StrC & Chr(10) & VNItoUNICODE(Clls.Offset(, -11)) & "-" & VNItoUNICODE(Clls.Offset(, -9))
 
Cảm ơn anh ThuNghi nhiều!

Mà hình như code của anh dư đoạn này:

PHP:
StrC = VNItoUNICODE(StrC)

Vì khi em ghép đoạn code đó vào trong phần mềm của em, thì nó kg chạy. Khi em bỏ nó ra thì nó chạy (thế mới lạ)

Nhờ có các bác giúp, em được như ý!
 
Xin hỏi tác giả Topic:

Sao ta không lấy nguyên 1 Sheets mới làm hộp thoại nhỉ?

Lúc đó thì:
Khỏi lo font chữ;
Xem xong thì xóa nó đi thôi; Cần lúc nào thì tạo lại lúc đó;
Nếu bạn đang quản lý nhân sự thì số trang tính chắc không nhiều; Tăng giảm thêm 1 trang tính có đáng là bao?

Chúc vui! --=0
 
Sao ta không lấy nguyên 1 Sheets mới làm hộp thoại nhỉ?

Lúc đó thì:
Khỏi lo font chữ;
Xem xong thì xóa nó đi thôi; Cần lúc nào thì tạo lại lúc đó;
Nếu bạn đang quản lý nhân sự thì số trang tính chắc không nhiều; Tăng giảm thêm 1 trang tính có đáng là bao?

Chúc vui! --=0

Vâng, nếu được bác làm mẫu cho em xin!
 
Bạn xem thêm trong file đính kèm

PHP:
Option Explicit
 
Sub Auto_Open()
 Dim eRw As Long, jJ As Long
 Dim Sh As Worksheet, Clls As Range
 
Application.ScreenUpdating = False
For eRw = 1 To Sheets.Count
   If Sheets(eRw).Name = "SNhat" Then Exit For
Next eRw
 If eRw > Sheets.Count Then
   Sheets.Add:                ActiveSheet.Name = "SNhat"
 End If
 Sheets("SNhat").Select:            Cells.ClearContents
 Set Sh = Worksheets("Sheet1")
 eRw = Sh.Range("A65500").End(xlUp).Row
13 Sh.Range("A1:M" & eRw).Copy Destination:=[A1] '<=|'
 Columns("F:L").Delete
 
 For jJ = eRw To 3 Step -1
16   If Month(Cells(jJ, "F").Value) = Month(Date) And _
      Day(Cells(jJ, "F").Value) = Day(Date) Then   '<=|'
   Else
      Cells(jJ, "A").EntireRow.Delete
   End If
 Next jJ
End Sub
Chú í: Trong Sheets("Sheet1") có macro để xóa "SNhat" khi kích hoạt trang tính này;
Nếu macro hỏi thì bạn cứ ừ đi!
 

File đính kèm

  • GPE.rar
    13.5 KB · Đọc: 46
Chỉnh sửa lần cuối bởi điều hành viên:
Các bác ơi!
Lại phiền các bác nữa rồi!

Giờ dùng rồi lại thấy phát sinh, giả sử có 2 hoặc hơn nữa những người trùng tên nhau, mà trên thông báo chỉ thể hiện mỗi tên người thôi (không thể hiện người đó thuộc bộ phận nào), thì thì mình kg biết được là sinh nhật của người nào.

Vậy các bác làm ơn sửa thêm code: sao cho thông báo hiển thị: Họ và Tên, Mã số nhân viên, Bộ phận của người đó (theo cột bộ phận tương ứng) luôn dùm em được thì ngon biết mấy.

Cảm ơn các bác nhiều!

Thân mến!


Đây là file kết hợp cả hai file trên đáp ứng được yêu cầu
Thân
Chúc vui
 

File đính kèm

  • Hien thong bao ngay sinh nhat.xls
    64.5 KB · Đọc: 54
Phát sinh thêm vấn đề, các bác giúp sửa code dùm em nhé:

Trong bảng tính của file đã post ở trên, nếu thêm vào một cột nữa (cột số 17), và trong cột này nếu người nào có chữ Nghi viec thì sẽ không hiện thông báo ngày sinh nhật!

Cảm ơn các bác!
 
Phát sinh thêm vấn đề, các bác giúp sửa code dùm em nhé:

Trong bảng tính của file đã post ở trên, nếu thêm vào một cột nữa (cột số 17), và trong cột này nếu người nào có chữ Nghi viec thì sẽ không hiện thông báo ngày sinh nhật!

Cảm ơn các bác!

PHP:
Chúc mừng sinh nhật
Nguyễn Văn A27 - Mã số : NV0027 - Bộ phận : Bảo Trì
Nguyễn Văn A31 - Mã số : NV0031 - Bộ phận : Bảo Trì


Thích thì chiều. Xem file đính kèm
Bổ sung thêm hàng chữ "Mã số : ....." - "Bộ phận : ...." sau tên nhân viên. Chỉ có những ai chưa nghỉ việc mới hiện thông báo chúc mừng.
Chúc vui
Thân
 

File đính kèm

  • Hien thong bao ngay sinh nhat.xls
    66.5 KB · Đọc: 52
Lần chỉnh sửa cuối:
Phát sinh thêm vấn đề: Trong bảng tính của file đã post ở trên, nếu thêm vào một cột nữa (cột số 17), và trong cột này nếu người nào có chữ Nghi viec thì sẽ không hiện thông báo ngày sinh nhật!

Với macro của mình, bạn cần đổi các dòng lệnh (13), (14) & (16) như sau:

PHP:
13 Sh.[A1].Resize(eRw, 17).Copy Destination:=[A1] '<=|'
   Union(Columns("F:L"), Columns("N:P")).Delete
PHP:
 16   If Month(Cells(jJ, "F")) = Month(Date) And _
      Day(Cells(jJ, "F")) = Day(Date) And Cells(jJ, "G") = "" Then

Chúc thành công.
 
Chỉnh sửa lần cuối bởi điều hành viên:
Phát sinh thêm vấn đề, các bác giúp sửa code dùm em nhé:

Trong bảng tính của file đã post ở trên, nếu thêm vào một cột nữa (cột số 17), và trong cột này nếu người nào có chữ Nghi viec thì sẽ không hiện thông báo ngày sinh nhật!

Cảm ơn các bác!


Và đây là một kiểu khác dùng UserForm và ListBox
 

File đính kèm

  • Copy Hien thong bao ngay sinh nhat.xls
    53.5 KB · Đọc: 73
  1. Code Thông báo ngày sinh nhật của chị (đoán là chị, nhưng biết đâu lại là anh, nếu là anh thì phải mời nhậu thôi, hehe!?) Minh Nguyet.....
Thân mến!


Cám ơn các anh đã có lời. Nhưng mà em đang ở tận Bắc Ninh thì làm sao được. Mong các anh đại xá và lượng thứ cho. Khi nào có điều kiện, nhất định sẽ mới các anh một chầu túy lúy. cám ơn
Thân
 
Và đây là một kiểu khác dùng UserForm và ListBox
Dùng UserForm trong bài này cũng rất hợp lý... Nếu có thời gian rảnh, bạn hãy nghiên cứu cải tiến thêm:
- Chiều cao của UserForm tự động điều chỉnh theo số lượng người hiển thị trong Form, như thế nhìn mới đẹp
- Thêm 1 vài hiệu ứng khác, chẳng hạn như âm thanh chào mừng... vân.. vân.. và.. vân.. vân...
 
Web KT
Back
Top