Nhờ các anh chị trong diễn đàn sửa giúp code tự động tạo mã cho họ và tên (2 người xem)

  • Thread starter Thread starter Blad01
  • Ngày gửi Ngày gửi
Liên hệ QC

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

Blad01

Thành viên thường trực
Tham gia
6/10/07
Bài viết
350
Được thích
28
Xin chúc các anh chị trong diễn đàn những ngày cuối tuần vui vẻ, hạnh phúc.
Em có mấy vấn đề xin các anh chị giúp đỡ như sau:

(1) Em có tìm google và tìm được một đoạn code của bác TQChanh bên diễn đàn webketoan (hình như bác này bên diễn đàn mình có nickname ChanhTQ@) hướng dẫn cách tự động tạo mã họ và tên. Em đọc mà chưa biết cách áp dụng cho file dữ liệu của em. Mong các bác xem và sửa đoạn code cho phù hợp với file dữ liệu của em với ạ.
- Mục đích của em như sau: Khi bấm vào nút GHI VÀ THÊM trên Form thì mã đảng viên sẽ được tạo vào cột C (như file đính kèm).
- Quy luật tạo mã như sau: Mã gồm 5 ký tự, 3 ký tự đầu viết tắt bởi các chữ cái in hoa trong chuỗi Họ Và Tên (HVT) + 2 ký tự cuối là số tự nhiên (dùng để phân biệt những người trùng tên).
+ 3 ký tự đầu là các nguyên âm. ví dụ: Â, Ă,... => A; Ô, Ơ,... => O; Đ => F, Ư => U, Ê => E,.... (bảng chữ cái chuyển nguyên âm em đã liệt kê trong sheets"Futro" của file đính kèm rồi ạ. Ví dụ: Nguyễn Đình Đông => Mã: NFF00 hay Nguyễn Đình Đồng => Mã: NFF01
+ Những ai không có tên lót thì chữ thứ 2 trong 3 ký tự đầu là chữ 'J'. Ví dụ: Nguyễn Nam ==> Mã: NJN00
Mã:
Code của bác TQChanh bên diễn đàn Webketoan như sau (xin phép bác):
[COLOR=#000000][COLOR=#007700]Function [/COLOR][COLOR=#0000BB]KiemNguyenAm[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]StrC [/COLOR][COLOR=#007700]As [/COLOR][COLOR=#0000BB]String[/COLOR][COLOR=#007700]) As [/COLOR][COLOR=#0000BB]String 
 Dim sRng [/COLOR][COLOR=#007700]As [/COLOR][COLOR=#0000BB]Range 
  
 Set sRng [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]Range[/COLOR][COLOR=#007700]([/COLOR][COLOR=#DD0000]"NgAm"[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]Find[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]Left[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]StrC[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700]), , [/COLOR][COLOR=#0000BB]xlFormulas[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]xlWhole[/COLOR][COLOR=#007700]) 
 If [/COLOR][COLOR=#0000BB]sRng Is Nothing Then 
    KiemNguyenAm [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]Left[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]StrC[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700]) 
 Else 
    [/COLOR][COLOR=#0000BB]KiemNguyenAm [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]sRng[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]Offset[/COLOR][COLOR=#007700](, [/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]Value 
 End [/COLOR][COLOR=#007700]If 
[/COLOR][COLOR=#0000BB]End [/COLOR][COLOR=#007700]Function 
------
[COLOR=#000000][COLOR=#007700]Function [/COLOR][COLOR=#0000BB]TachTen[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]hoten [/COLOR][COLOR=#007700]As [/COLOR][COLOR=#0000BB]String[/COLOR][COLOR=#007700]) As [/COLOR][COLOR=#0000BB]String 
 hoten [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]Trim[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]hoten[/COLOR][COLOR=#007700]) 
 If [/COLOR][COLOR=#0000BB]hoten [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#DD0000]"" [/COLOR][COLOR=#0000BB]Then 
    TachTen [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#DD0000]"" 
 [/COLOR][COLOR=#007700]Else 
    [/COLOR][COLOR=#0000BB]vt [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]InStrRev[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]hoten[/COLOR][COLOR=#007700], [/COLOR][COLOR=#DD0000]" "[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]Len[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]hoten[/COLOR][COLOR=#007700])) 
    If [/COLOR][COLOR=#0000BB]vt [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]0 Then 
        TachTen [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]hoten 
    [/COLOR][COLOR=#007700]Else 
        [/COLOR][COLOR=#0000BB]TachTen [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]Mid[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]hoten[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]vt [/COLOR][COLOR=#007700]+ [/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700]) 
    [/COLOR][COLOR=#0000BB]End [/COLOR][COLOR=#007700]If 
 [/COLOR][COLOR=#0000BB]End [/COLOR][COLOR=#007700]If 
[/COLOR][COLOR=#0000BB]End [/COLOR][COLOR=#007700]Function 
-----
[COLOR=#000000][COLOR=#007700]Function [/COLOR][COLOR=#0000BB]Lot[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]Ho [/COLOR][COLOR=#007700]As [/COLOR][COLOR=#0000BB]String[/COLOR][COLOR=#007700]) As [/COLOR][COLOR=#0000BB]String 
 Dim VT [/COLOR][COLOR=#007700]As [/COLOR][COLOR=#0000BB]Byte 
  
 Ho [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]Trim[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]Ho[/COLOR][COLOR=#007700]) 
 If [/COLOR][COLOR=#0000BB]Ho [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#DD0000]"" [/COLOR][COLOR=#0000BB]Then 
    Lot [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#DD0000]"Er" 
 [/COLOR][COLOR=#007700]Else 
    [/COLOR][COLOR=#0000BB]VT [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]InStrRev[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]Ho[/COLOR][COLOR=#007700], [/COLOR][COLOR=#DD0000]" "[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]Len[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]Ho[/COLOR][COLOR=#007700])) 
    If [/COLOR][COLOR=#0000BB]VT [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]0 Then 
        Lot [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#DD0000]"J" 
    [/COLOR][COLOR=#007700]Else 
        [/COLOR][COLOR=#0000BB]Lot [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]KiemNguyenAm[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]Mid[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]Ho[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]VT [/COLOR][COLOR=#007700]+ [/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700])) 
    [/COLOR][COLOR=#0000BB]End [/COLOR][COLOR=#007700]If 
 [/COLOR][COLOR=#0000BB]End [/COLOR][COLOR=#007700]If 
[/COLOR][COLOR=#0000BB]End [/COLOR][COLOR=#007700]Function [/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR]

(2) Xin nhờ các anh chị viết giúp em đoạn code tìm kiếm dữ liệu theo ngày nhập dữ liệu (cột D); hoặc có thể tìm theo 2 tiêu chí cùng lúc là tìm tên cơ quan và tìm theo ngày nhập dữ liệu (xem trong Form).

(3) Em sử dụng combobox để nhập dữ liệu vào bảng tính. trong phần Properties của ComboBox tại phần Style em để 2-fmStyleDropDownList. Em phải làm thế nào để sau khi bấm nút thêm dữ liệu thì các ComboBox sẽ trống dữ liệu để tiếp tục cho lần nhập sau.

Em rất mong các anh chị giúp đỡ (code trong File đính kèm là em được bác ChanhTQ@ và một số anh chị trong diễn đàn giúp đỡ).

Nhờ Admin xóa giúp em đề tài: http://www.giaiphapexcel.com/forum/...nh-chị-viết-giúp-code-thông-báo-dữ-liệu-trùng
 

File đính kèm

Lần chỉnh sửa cuối:
1./ Bạn chép hàm tự tạo này vô Module1:
PHP:
Function Ma35(HoTen As String) As String
 Dim VTr As Byte:                       Dim sRng As Range
 Dim Tmp As String
  
 If Len(HoTen) < 3 Then Exit Function
 Ma35 = UCase$(Left(HoTen, 1)):         HoTen = HoTen & " "
 Do
    VTr = InStr(HoTen, " "):            If VTr < 1 Then Exit Do
    Ma35 = Ma35 & UCase$(Left(HoTen, 1))
    HoTen = Mid(HoTen, VTr + 1, Len(HoTen))
 Loop
 Ma35 = RTrim$(Ma35)
 If Len(Ma35) = 2 Then
    Ma35 = Left(Ma35, 1) & "J" & Right(Ma35, 1)
 ElseIf Len(Ma35) > 3 Then
    Ma35 = Left(Ma35, 1) & Right(Ma35, 2)
 ElseIf Len(Ma35) = 1 Then
    Ma35 = "GPE.COM":                   Exit Function
 End If
 For VTr = 1 To 3
    Tmp = Mid(Ma35, VTr, 1)
    If Asc(Tmp) < 91 Then
    Else
        Set sRng = Range("NguyenAm").Find(Tmp, , xlFormulas, xlWhole)  '*'
        If Not sRng Is Nothing Then
            Ma35 = Replace(Ma35, Tmp, sRng.Offset(, 1).Value)
        End If
    End If
 Next VTr
 Ma35 = Ma35 & "00"
End Function

2./ Đây là fần đầu của macro cho nút 'GHI & THÊM' của bạn:
Mã:
Private Sub CmdGhi_Click()
 Dim Ma05 As String, Tmp As String
 Dim Rws As Long, J As Long, Num As Integer
 Dim Arr()
 
 Ma05 = Ma35(Me!txtTenDV.Text)          '[COLOR="#0000CD"]Tao Mã Mói[/COLOR]'
 Rws = [C6].End(xlDown).Offset(1).Row   '[COLOR="#0000CD"]Xác Dinh Dòng Cuói[/COLOR]'
 Arr() = [C6].Resize(Rws).Value         '[COLOR="#0000CD"]Ghi Mã Cu Vô Mãng[/COLOR]'
 For Num = 0 To 99                      '[COLOR="#0000CD"]Vòng Lap Theo Thú Tu Tang Cua Mã[/COLOR]'
    Tmp = Left(Ma05, 3) & Right("0" & CStr(Num), 2)
    For J = 1 To UBound(Arr())          '[COLOR="#0000CD"]Vòng Lap Theo Du Liêu Cu[/COLOR]'
        If Arr(J, 1) = Tmp Then         '[COLOR="#0000CD"]Néu Da Có Mã[/COLOR]'
            Tmp = "00":                 Exit For
        End If
    Next J
    If Len(Tmp) > 3 Then                '[COLOR="#0000CD"]Néu Chua Có[/COLOR]'
1 '[COLOR="#0000CD"]Thêm Mã Cho Dang Viên Mói:[/COLOR]'
        Cells(Rws, "C").Value = Tmp:    Exit For
    End If
 Next Num
2 '[COLOR="#0000CD"]Thêm Ho & Tên Dang Viên Mói:[/COLOR]'
 Cells(Rws, "D").Value = Me!txtTenDV.Text
3 ' [COLOR="#0000CD"][B]Ban Viét Tiép Di . . . .[/B][/COLOR]'
 
End Sub

Chúc thành công!
 
Lần chỉnh sửa cuối:
Upvote 0
(2) Xin nhờ các anh chị viết giúp em đoạn code tìm kiếm dữ liệu theo ngày nhập dữ liệu (cột D); hoặc có thể tìm theo 2 tiêu chí cùng lúc là tìm tên cơ quan và tìm theo ngày nhập dữ liệu (xem trong Form).

Để thực hiện việc này bạn cần trãi qua các công đoạn sau:

1./ Tạo mới hay chép nút lệnh cũ 'Tìm Mã' sang nút lệnh 'Tìm Ngày'

2./ Chép macro này gắn vô nút lệnh mới có của bạn
PHP:
Private Sub CmdTimNgay_Click()
 Dim fDat As Date, lDat As Date, Rws As Long, J As Long, W As Integer, Dm As Byte
 Dim Arr()
 Dim MyFormat As String
 
4 fDat = Me!TxtfDat.Value
5 lDat = Me!TxtlDat.Value
 Rws = [d6].CurrentRegion.Rows.Count
 ReDim dArr(1 To 99, 1 To 16)           '*'
 Arr() = [a6].Resize(Rws, 29).Value
 For J = 1 To UBound(Arr())
    If Arr(J, 4) >= fDat And Arr(J, 4) <= lDat Then
        W = W + 1:          dArr(W, 1) = W
        For Dm = 2 To 6
            dArr(W, Dm) = Arr(J, Dm)
        Next Dm
        dArr(W, 7) = Arr(J, 12)
    End If
 Next J
 If W Then
    Sheets("FuTro").[AA2].Resize(99, 16).Value = dArr()
 End If
End Sub

Chú í:

(1) Các dòng lệnh có đánh số là tên các Controls mình đã đổi so với tên hiện có trên Form của bạn.
Còn lí do đổi tên ư?: Để fân biệt dễ hơn giữa các Control

(2) Nhập vô các Control này các chuỗi như đã có ở cột [D] của bạn; Rõ hơn là chuỗi dạng "MM/DD/yyyy"

(3) Mình mới cho xuất hiện kết quả trên ListBox chưa đủ các trường; Trường nào thiếu bạn làm tiếp

(Hiện tại: Nếu cần thống kê từ 6/1/2016 cho đến 9/1/2016 ta sẽ nhận được 4 dòng dữ liệu kết quả.)

Chúc ngày cuối tuần vui vẻ!
 
Upvote 0
Em cảm ơn HYen17 và SA_DQ (nút cảm ơn đi đâu rồi vậy). Các bác có thể viết code thêm một số vấn đề khác giúp em được không ạ:
(1) Em muốn tìm theo 2 tiêu chí cùng lúc đó là: tìm theo tên cơ quan và tìm theo ngày tháng.

(2) Em muốn khi click (1 lần) vào danh sách ở ListBox, nếu click vào đảng viên nào thì thông tin đảng viên đó sẽ hiện toàn bộ thông tin lên Form (chỉ cho xem, không cho sửa). Nếu click 2 lần liên tiếp (DblClick) vào đảng viên nào thì sẽ sửa được thông tin của đảng viên đó.

Mong các bác giúp em với ạ.
 

File đính kèm

Upvote 0
Các bác có thể viết code thêm một số vấn đề giúp em được không ạ:
(1) Em muốn tìm theo 2 tiêu chí cùng lúc đó là: tìm theo tên cơ quan và tìm theo ngày tháng.

(2) Em muốn khi click (1 lần) vào danh sách ở ListBox, nếu click vào đảng viên nào thì thông tin đảng viên đó sẽ hiện toàn bộ thông tin lên Form (chỉ cho xem, không cho sửa). Nếu click 2 lần liên tiếp (DblClick) vào đảng viên nào thì sẽ sửa được thông tin của đảng viên đó.

Mong các bác giúp em với ạ.

(1) Bạn chỉ cần sửa đổi 1 câu lệnh trong macro bài trên là được nội dung mới thôi;
Này nha:
Thay vì
Mã:
If Arr(J, 4) >= fDat And Arr(J, 4) <= lDat Then
Bạn sửa lại thành:
PHP:
If (Arr(J, 4) >= fDat And Arr(J, 4) <= lDat) and Arr(j,12)=me!cboTenCapKT.Text Then

& chúc thành công;

(2) Làm vầy chắc cố gắng cũng được; Nhưng e rằng fải đi hầu bạn kiện do CSDL chả mấy chốc thành đống rác!
 
Upvote 0
(2) Làm vầy chắc cố gắng cũng được; Nhưng e rằng fải đi hầu bạn kiện do CSDL chả mấy chốc thành đống rác!
Em chưa hiểu ý bác lắm, tại sao lại phải có nút sửa vì có những cuộc kiểm tra chưa kết luận bác ạ, vì vậy đến khi có kết luận thì em phải update thông tin cho đảng viên đó. Bac có thể giúp em nếu click vào đảng viên đó trong ListBox thì thông tin đảng viên đó sẽ hiện trong Form và có thể update thông tin luôn hoặc có thể xóa thông tin đảng viên đó trong bảng tính. Mong bác giúp đỡ.
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn tham khảo macro sau;

PHP:
Private Sub LstDS_Click()
 Dim Ma As String
 Dim Rng As Range, sRng As Range
 
 With Sheets("FuTro").[ab2]
    If Dg > 1 Then
        Ma = .Offset(Me!LstDS.ListIndex).Value
    End If
 End With
 Set Rng = Range([c5], [c5].End(xlDown))
 Set sRng = Rng.Find(Ma, , xlFormulas, xlWhole)
 If Not sRng Is Nothing Then
    Me!TxtMa.Text = sRng.Value
    Me!TxtNgayNhap.Value = sRng.Offset(, 1).Value
    Me!txtTenDV.Text = sRng.Offset(, 2).Value
' . . . . . . . . . . . . .  '
    Me!TxtSQD.Text = sRng.Offset(, 5).Value
    Me!TxtNgayKT.Value = sRng.Offset(, 6).Value
    Me!TxtCVuDg.Text = sRng.Offset(, 7).Value
    Me!TxtCVCQ.Text = sRng.Offset(, 8).Value
    Me!TxtCVDT.Text = sRng.Offset(, 9).Value
'   . . . . . . . . . . . . . . . . . . .'    
    Me!TxtKL.Text = sRng.Offset(, 14).Value
    If Me!TxtKL.Text = "C" Then
        Me!ChBKDVF.Visible = True
        Me!ChBCanTHKL.Visible = True
        Me!ChBDaTHKL.Visible = True
    End If
    
 End If
End Sub


Chú í: Các Control có tiếp đầu là Txt: TextBox; Còn ChB là các CheckBox
 
Upvote 0
Bác chanhTQ ơi. em chưa biết cách đưa thông tin từ ComboBox xuống bảng tính như thế nào. Ví dụ: ComboBox đảng viên ở các lĩnh vực có các thông tin Đảng, Nhà nước, Đoàn thể,... vậy làm thế nào để em có thể đưa các thông tin này trùng với các quy ước đã định nghĩa ở sheet"FuTro" xuống cột I trong sheet"B1-KTDV30" vậy (Đảng => A, Nhà nước =>B, Đoàn thể => C,...).
Code trên của bác nó báo lỗi ở dòng If Dg > 1 Then Bác xem lại giúp em.

Có vấn đề phát sinh mong các bác nghiên cứu giúp em: ComboBox cấp ủy viên có thể không cần nhập dữ liệu. Khi em click vào danh sách đảng viên trong ListBox nếu gặp đảng viên nào không có dữ liệu trong cột cấp ủy viên là code báo lỗi. Em đã dùng On Error Resume Next, nhưng lại sảy ra vấn đề khác đó là nếu lần trước mình đã click vào đảng viên là cấp ủy viên thì lần sau click vào đảng viên không là cấp ủy viên thì ComboBox này vẫn lưu thông tin của đảng viên trước. Làm thế nào để khắc phục ?. Mong mọi người giúp đỡ.

 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
(1) Bác ơi. em chưa biết cách đưa thông tin từ ComboBox xuống bảng tính như thế nào. Ví dụ: ComboBox đảng viên ở các lĩnh vực có các thông tin Đảng, Nhà nước, Đoàn thể,... vậy làm thế nào để em có thể đưa các thông tin này trùng với các quy ước đã định nghĩa ở sheet"FuTro" xuống cột I trong sheet"B1-KTDV30" vậy (Đảng => A, Nhà nước =>B, Đoàn thể => C,...).

(2) Code trên của bác nó báo lỗi ở dòng If Dg > 1 Then Bác xem lại giúp em.


(1) Có vài cách như sau:
Trước tiên ta gán vùng danh mục các lĩnh vực hoạt động này (gồm 2 cột) vô 1 cái tên (Name)

a./ Tạo vòng lặp duyệt tên lĩnh vực từ trên xuống dưới;
Trong khi duyệt nếu thấy trùng với trị đang có trong ComboBox thì lấy trị bên cột mã qui ước gán vô trang tính

b./ Xài fương thức Find() trị trong ComboBox với vùng tên vừa nói ban đầu

c./ Ngon lành nữa là đưa vùng gán tên vô Array & duyệt (thì sẽ là nhanh nhất; nhưng không mấy thuyết fục vì giống như xài dao mỗ đi chẻ củi vậy)

(2) Cũng chưa thật sự hiểu do sao nữa?

 
Upvote 0
Xin góp vài í với bạn về cái Form nhập liệu:

(1) Các Frame bạn xài chỉ mang tính 'đẹp' mà thôi; Nhưng khó trong thiết kế những cái khác & coi chừng giảm tốc độ xử lí các vấn đề chính khi thao tác

(2) Các nội dung kiểm tra bạn đưa vô các CheckBox; Theo mình thì nên đưa vô ComboBox

(3) Chuyện này là nhỏ: Kích thước các Control nên vừa fải; do ta chưa thiết kế xong Form, nên chuyện thêm nữa các Control là khó khăn.

Thân ái & vui vẻ nha!
 
Upvote 0
Xin góp vài í với bạn về cái Form nhập liệu:

(1) Các Frame bạn xài chỉ mang tính 'đẹp' mà thôi; Nhưng khó trong thiết kế những cái khác & coi chừng giảm tốc độ xử lí các vấn đề chính khi thao tác

(2) Các nội dung kiểm tra bạn đưa vô các CheckBox; Theo mình thì nên đưa vô ComboBox

(3) Chuyện này là nhỏ: Kích thước các Control nên vừa fải; do ta chưa thiết kế xong Form, nên chuyện thêm nữa các Control là khó khăn.

Thân ái & vui vẻ nha!
Cảm ơn bạn HYen17,
(1) Đúng như bạn nhận xét, nó chỉ mang tính trang trí. Còn hạn chế của nó đúng là bạn nói mình mới biết. Cảm ơn bạn.

(2) Vì nội dung kiểm tra có thể chọn 1 hoặc nhiều nội dung, nên nếu thiết kế bằng ComboBox thì mình chưa biết cách làm thế nào để có thể chọn một lúc từ 2 nội dung trở lên.

(3) Cảm ơn bạn, mình xin tiếp thu.

(1) Có vài cách như sau:
Trước tiên ta gán vùng danh mục các lĩnh vực hoạt động này (gồm 2 cột) vô 1 cái tên (Name)

a./ Tạo vòng lặp duyệt tên lĩnh vực từ trên xuống dưới;
Trong khi duyệt nếu thấy trùng với trị đang có trong ComboBox thì lấy trị bên cột mã qui ước gán vô trang tính

b./ Xài fương thức Find() trị trong ComboBox với vùng tên vừa nói ban đầu

c./ Ngon lành nữa là đưa vùng gán tên vô Array & duyệt (thì sẽ là nhanh nhất; nhưng không mấy thuyết fục vì giống như xài dao mỗ đi chẻ củi vậy)

Cảm ơn bác ChanhTQ@, hôm qua được bác gợi ý cách làm em đã đọc về vòng lặp nhưng thực sự chưa hiểu nhiều và vẫn chưa biết phải bắt đầu viết code thế nào. Bác nào có thể viết giúp em để em có thể nghiên cứu, học hỏi cho những bảng biểu sau được không.
 
Upvote 0
Đây là 1 cách:
PHP:
Private Sub cmdGhiVaThem_Click()
 Dim Ma05 As String, Tmp As String
 Dim Rws As Long, J As Long, Num As Integer
 Dim Arr(), Rng As Range                '*'
 
 Ma05 = Ma35(Me!txtTenDV.Text)
 With Sheets("B1-KTDV30")
 Rws = .[C6].End(xlDown).Offset(1).Row
 Arr() = [C6].Resize(Rws).Value
 For Num = 0 To 99
    Tmp = Left(Ma05, 3) & Right("0" & CStr(Num), 2)
    For J = 1 To UBound(Arr())
        If Arr(J, 1) = Tmp Then
            Tmp = "00":                 Exit For
        End If
    Next J
    If Len(Tmp) > 3 Then
'Thêm Mã Cho Dang Viên Mói:'
        Cells(Rws, "C").Value = Tmp:    Exit For
    End If
 Next Num
'Thêm Linh Vuc Hoat Dong:'
 Set Rng = Sheets("FuTro").Range("LVHD")        'Vùng Gán Tên'
 Arr() = Rng(1).Offset(, -1).Resize(Rng.Rows.Count, 2).Value
 For J = 1 To UBound(Arr())         'Vòng Lap Duyet Vùng Du Lieu'
    If Arr(J, 2) = Me!cboLinhVuc.Text Then
        Cells(Rws, "I").Value = Arr(J, 1)
        Exit For
    End If
 Next J
'Thêm Ho & Tên Dang Viên Mói:'
' . . . . . . . . .         '

 End Sub
 
Upvote 0
Đây là 1 cách:
PHP:
Private Sub cmdGhiVaThem_Click()
 Dim Ma05 As String, Tmp As String
 Dim Rws As Long, J As Long, Num As Integer
 Dim Arr(), Rng As Range                '*'
 
 Ma05 = Ma35(Me!txtTenDV.Text)
 With Sheets("B1-KTDV30")
 Rws = .[C6].End(xlDown).Offset(1).Row
 Arr() = [C6].Resize(Rws).Value
 For Num = 0 To 99
    Tmp = Left(Ma05, 3) & Right("0" & CStr(Num), 2)
    For J = 1 To UBound(Arr())
        If Arr(J, 1) = Tmp Then
            Tmp = "00":                 Exit For
        End If
    Next J
    If Len(Tmp) > 3 Then
'Thêm Mã Cho Dang Viên Mói:'
        Cells(Rws, "C").Value = Tmp:    Exit For
    End If
 Next Num
'Thêm Linh Vuc Hoat Dong:'
 Set Rng = Sheets("FuTro").Range("LVHD")        'Vùng Gán Tên'
 Arr() = Rng(1).Offset(, -1).Resize(Rng.Rows.Count, 2).Value
 For J = 1 To UBound(Arr())         'Vòng Lap Duyet Vùng Du Lieu'
    If Arr(J, 2) = Me!cboLinhVuc.Text Then
        Cells(Rws, "I").Value = Arr(J, 1)
        Exit For
    End If
 Next J
'Thêm Ho & Tên Dang Viên Mói:'
' . . . . . . . . .         '

 End Sub
Không hiểu sao code không cho ra kết quả bác à. Nó cũng không báo gì cả. Em sửa lại code của bác cho phù hợp thế này: Cells(Rws, "H").Value = Arr(J, 1)
Mã:
Private Sub cmdGhiVaThem_Click() Dim Ma05 As String, Tmp As String
 Dim Rws As Long, J As Long, Num As Integer
 Dim Arr(), Rng As Range
 Ma05 = Ma35(Me!txtTenDV.Text)          'Tao Mã Mói'
 With Sheets("B1-KTDV30")
 Rws = .[C6].End(xlDown).Offset(1).Row   'Xác Dinh Dòng Cuói'
 Arr() = [C6].Resize(Rws).Value         'Ghi Mã Cu Vô Mãng'
 For Num = 0 To 99                      'Vòng Lap Theo Thú Tu Tang Cua Mã'
    Tmp = Left(Ma05, 3) & Right("0" & CStr(Num), 2)
    For J = 1 To UBound(Arr())          'Vòng Lap Theo Du Liêu Cu'
        If Arr(J, 1) = Tmp Then         'Néu Da Có Mã'
            Tmp = "00":                 Exit For
        End If
    Next J
    If Len(Tmp) > 3 Then                'Néu Chua Có'
'Thêm Mã Cho Dang Viên Mói:'
        Cells(Rws, "C").Value = Tmp:    Exit For
    End If
 Next Num
 Set Rng = Sheets("FuTro").Range("LVHD")        'Vùng Gán Tên'
 Arr() = Rng(1).Offset(, -1).Resize(Rng.Rows.Count, 2).Value
 For J = 1 To UBound(Arr())         'Vòng Lap Duyet Vùng Du Lieu'
    If Arr(J, 2) = Me!cboLinhVuc.Text Then
        [COLOR=#b22222]Cells(Rws, "[/COLOR][COLOR=#ff0000][B]H[/B][/COLOR][COLOR=#b22222]").Value = Arr(J, 1)[/COLOR]
        Exit For
    End If
 Next J
'Thêm Ho & Tên Dang Viên Mói:'
 .Range("A" & Rws).Resize(, 29).Borders.LineStyle = 1
 Cells(Rws, "A").Value = "=Row()-5"
 Cells(Rws, "D").Value = Me!txtNgayNhap.Text
 Cells(Rws, "E").Value = Me!txtTenDV.Text
 Cells(Rws, "F").Value = Me!txtChucVu.Text
 Cells(Rws, "G").Value = Me!cboCUV.Text
 Cells(Rws, "I").Value = Me!cboLinhVuc.Text
 Cells(Rws, "K").Value = Me!cboCQL.Text
 Cells(Rws, "L").Value = Me!cboTenCapKT.Text
 Cells(Rws, "N").Value = Me!cboCKT.Text
 Cells(Rws, "O").Value = Me!txtSoQD.Text
 Cells(Rws, "P").Value = Me!txtNgayQD.Text
 Cells(Rws, "V").Value = Me!cboKL.Text
 Cells(Rws, "Z").Value = Me!txtSoTB.Text
 Cells(Rws, "AA").Value = Me!txtNgayTB.Text
 Cells(Rws, "AB").Value = Me!txtNDQD.Text
If chkQCLV.Value = True Then
        .Range("Q" & Rws) = "x"
    End If
    If chkPC.Value = True Then
        .Range("R" & Rws) = "x"
    End If
    If chkNV.Value = True Then
        .Range("S" & Rws) = "x"
    End If
    If chkDVKDL.Value = True Then
        .Range("T" & Rws) = "x"
    End If
    If chkKhac.Value = True Then
        .Range("U" & Rws) = "x"
    End If
    If chkKD.Value = True Then
        .Range("W" & Rws) = "x"
    End If
   If chkPKL.Value = True Then
        .Range("X" & Rws) = "x"
    End If
    If chkDKL.Value = True Then
        .Range("Y" & Rws) = "x"
    End If
End With
Dim ctr As Control
For Each ctr In Me.Controls
    If TypeName(ctr) = "TextBox" Then
        ctr.Text = ""
    ElseIf TypeName(ctr) = "CheckBox" Then
        ctr.Value = False
    ElseIf TypeName(ctr) = "ComboBox" Then
        ctr.Style = fmStyleDropDownCombo
        ctr.Text = ""
        ctr.Style = fmStyleDropDownList
    End If
Next ctr
txtTenDV.SetFocus
End Sub
Bác xem lại giúp em với.
 
Upvote 0
Mã:
Set Rng = Sheets("FuTro").Range("LVHD")        'Vùng Gán Tên'
 Arr() = Rng(1).Offset(, -1).Resize(Rng.Rows.Count, 2).Value
 For J = 1 To UBound(Arr())         'Vòng Lap Duyet Vùng Du Lieu'
    If Arr(J, 2) = Me!cboLinhVuc.Text Then
        Cells(Rws, "H").Value = Arr(J, 1)
        Exit For
    End If
 Next J

PHP:
Set Rng = Sheets("FuTro").Range("LVHD")        'Vùng Gán Tên'
  MsgBox Rng.Address,, Rng.Cells.Count    '*'
 Arr() = Rng(1).Offset(, -1).Resize(Rng.Rows.Count, 2).Value
 MsgBox UBound(Arr())      '*'
 For J = 1 To UBound(Arr())         'Vòng Lap Duyet Vùng Du Lieu'
    MsgBox Arr(j,2)      '*'
    If Arr(J, 2) = Me!cboLinhVuc.Text Then
        Cells(Rws, "H").Value = Arr(J, 1)
        Exit For
    End If
 Next J
 
Upvote 0
Mã:
[php]Set Rng = Sheets("FuTro").Range("LVHD")        'Vùng Gán Tên'
  MsgBox Rng.Address,, Rng.Cells.Count    '*'
 Arr() = Rng(1).Offset(, -1).Resize(Rng.Rows.Count, 2).Value
 MsgBox UBound(Arr())      '*'
 For J = 1 To UBound(Arr())         'Vòng Lap Duyet Vùng Du Lieu'
    MsgBox Arr(j,2)      '*'
    If Arr(J, 2) = Me!cboLinhVuc.Text Then
        Cells(Rws, "H").Value = Arr(J, 1)
        Exit For
    End If
 Next J[/php][/QUOTE]
Không hiểu sao code không trả kết quả về cột H trong trang tính bác ạ. Phiền bác xem giúp nguyên nhân vì sao ?
 
Lần chỉnh sửa cuối:
Upvote 0
Vậy cột [mã ĐV] & [Ho Tên ĐV] có được trả về hay không?
 
Upvote 0
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Trong trang 'FuTro' có cột/vùng được gán tên là "LVHD" Vậy bạn xem bên trái cột này có là các mã hiệu tương ứng hay không? cảm giác bạn đang chờ sung rụng vậy; Mong rằng cảm giác này sai!

Sung chẳng bao giờ tự rụng. Tôi không biết thì tôi hỏi, người ngu dốt mới dấu cái dốt của mình. Đừng nghĩ rằng mình biết về lĩnh vực mình biết mà phán người khác ngu dốt. Mong bạn HYen17 không phật lòng. Tôi đưa file lên để các bạn nghiên cứu giúp
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Bạn tự xem lại đi!

Vùng gán tên 'LVHD' ở file bài 8 là N2:N13;

Còn file bạn vừa đưa lên là M2:N7 kia mà!

& bạn dẫn chứng ai & câu nào nói hay fán người khác ngu đốt đâu nào!?!

Vĩnh biệt!
 
Upvote 0
Web KT

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

Back
Top Bottom