Các câu hỏi về Form trong Excel VBA

Liên hệ QC

Tường_Vi

Thành viên tiêu biểu
Tham gia
19/4/10
Bài viết
482
Được thích
121
Nghề nghiệp
Luôn tìm kiếm một vị trí tốt hơn
Private Sub UserForm_Initialize()
.......................
.......................
.......................
End Sub


Em xin hỏi, sự kiện khí nào mình dùng sự kiện này Initialize

Cám ơn
 
CQ bạn đang có ngàn người; Hãn hữu mới có được cao nhất là 30 người trùng tên nhau;

Vậy nên 98 dòng là thừa để chứa bằng í người trùng tên trong đơn vị.
Còn số cột ấy ư?, Sẽ bằng với số cột trong 'Data' của bạn thôi.

Bạn thử với Form này xem sao; Đang tìm theo f. name & chỉ cần nhập vài 3 từ của f. name & nhấn vô nút lệnh có mũi tên;
 

File đính kèm

  • GPE.rar
    70 KB · Đọc: 40
Upvote 0
CQ bạn đang có ngàn người; Hãn hữu mới có được cao nhất là 30 người trùng tên nhau;

Vậy nên 98 dòng là thừa để chứa bằng í người trùng tên trong đơn vị.
Còn số cột ấy ư?, Sẽ bằng với số cột trong 'Data' của bạn thôi.

Bạn thử với Form này xem sao; Đang tìm theo f. name & chỉ cần nhập vài 3 từ của f. name & nhấn vô nút lệnh có mũi tên;
Em cảm ơn bác đã giúp đỡ em!
Bác có thể giúp em thêm vấn đề này nữa được không ạ?
Như bác nói là chỉ cần đánh 3 ký tự của trường F.name rồi kích tìm kiếm là ok. Bác có thể sửa code khi em gõ 3 ký tự tìm kiếm thì trong List Box sẽ hiện tất cả những người có 3 ký tự giống như 3 ký tự tìm kiếm tự hiện lên mà không phải kích vào nút lệnh tìm kiếm, tương tự em gõ 4-20 ký tự tìm kiếm thì tự động hiện danh sách trong list Box, trường hợp ngược lại sau khi gỗ tìm kiếm em xóa từng ký tự tại ô tìm kiếm thì ở List Box cũng hiện lên danh sách thỏa mãn chuỗi ký tự còn lại không ạ?
Em cảm ơn bác nhiều, bác có thể cho em xin SĐT của bác được không ạ?
 
Upvote 0
Bạn lười quá mất rồi!

Có thể làm theo cách này: Thêm macro này (Macro sự kiện) khi nhập gì lên TextBox có tên (mình gán) là tbTim

Private Sub tbTim_Change()
CmdTim_Click
End Sub
Để khỏi báo lỗi khi nhiều dòng (quá 98) được tìm thấy, ta sửa macro cho nút lệnh mũi tên tìm như sau:
PHP:
Private Sub CmdTim_Click()
 Dim Rng As Range, sRng As Range
 Dim Rws As Long, W As Integer, Cot As Integer
 Dim MyAdd As String
 ReDim Arr(1 To 98, 1 To 6)
 [AA2].Resize(98, 6).Value = Arr()
 Rws = [b2].CurrentRegion.Rows.Count
 Set Rng = [b1].Resize(Rws)
 Set sRng = Rng.Find(Me!tbTim.Text, , xlFormulas, xlPart)
 If sRng Is Nothing Then
    MsgBox "Không tìm Ra!", , "GPE.COM Xin Chào!"
 Else
    MyAdd = sRng.Address
    Do
        W = W + 1:                  If W = 98 Then GoTo GPE         '*'
        For Cot = 0 To 5
            With Cells(sRng.Row, "A")
                Arr(W, Cot + 1) = .Offset(, Cot).Value
            End With
        Next Cot
        Set sRng = Rng.FindNext(sRng)
    Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
GPE:                                '**'
    If W Then
        [AA2].Resize(W, 6).Value = Arr()
    End If
 End If
End Sub

Chúc vui!
 
Upvote 0
Bạn lười quá mất rồi!

Có thể làm theo cách này: Thêm macro này (Macro sự kiện) khi nhập gì lên TextBox có tên (mình gán) là tbTim

Private Sub tbTim_Change()
CmdTim_Click
End Sub
Để khỏi báo lỗi khi nhiều dòng (quá 98) được tìm thấy, ta sửa macro cho nút lệnh mũi tên tìm như sau:
PHP:
Private Sub CmdTim_Click()
 Dim Rng As Range, sRng As Range
 Dim Rws As Long, W As Integer, Cot As Integer
 Dim MyAdd As String
 ReDim Arr(1 To 98, 1 To 6)
 [AA2].Resize(98, 6).Value = Arr()
 Rws = [b2].CurrentRegion.Rows.Count
 Set Rng = [b1].Resize(Rws)
 Set sRng = Rng.Find(Me!tbTim.Text, , xlFormulas, xlPart)
 If sRng Is Nothing Then
    MsgBox "Không tìm Ra!", , "GPE.COM Xin Chào!"
 Else
    MyAdd = sRng.Address
    Do
        W = W + 1:                  If W = 98 Then GoTo GPE         '*'
        For Cot = 0 To 5
            With Cells(sRng.Row, "A")
                Arr(W, Cot + 1) = .Offset(, Cot).Value
            End With
        Next Cot
        Set sRng = Rng.FindNext(sRng)
    Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
GPE:                                '**'
    If W Then
        [AA2].Resize(W, 6).Value = Arr()
    End If
 End If
End Sub

Chúc vui!
Cảm ơn bác nhiều ạ! Bác thông cảm, em không hiểu code đâu ạ, chỉ bặp bẹ copy thôi chứ không phải em lười đâu :)
Bác có thể cho em xin SĐT để em cảm ơn Bác được không ạ?

Code rất chuẩn và phù hợp với công việc của em

Về phần
Private Sub tbTim_Change()
CmdTim_Click
End Sub

Nếu tại trường first_name mà là tiếng việt thì khi gõ vào tbTim sẽ không thể tìm được. Nếu copy vào rồi kích tìm kiếm thì lại được bác ạ. Bác xem có thể sửa nốt hộ em vấn đề này được không? Cảm ơn Bắc nhiều, chúc bác sức khỏe và công tác tốt ạ!
 
Upvote 0
Cho em hỏi muốn Use form hiện góc phải làm thế nào ạ! em xin cảm ơn
 
Upvote 0
Tôi có file nhập liệu đính kèm, hỏi nhờ các anh chị em trên diễn đàn cách khi click nhập nhiều mã hiệu (lớn hơn 1 mã hiệu) thì gộp các mã hiệu và nội dung tương ứng đó vào 1 ô như thế nào ạ, xin cảm ơn
 

File đính kèm

  • Gop du lieu khi nhap Form.xlsm
    38.8 KB · Đọc: 18
Upvote 0
Xin cho mình hỏi trường hợp này:
Mình thiết kê form nhập dự liệu vào sheet khác trên cùng một workbook. Dử liệu mình copy từ file bên ngoài gồm 12 ô vào form mình cùng tạo 12 ô để nhập liệu nhưng mình không thể copy rồi paste một phát vào form đc mà chỉ đánh vào từng ô thì tốn thời gian quá có cách nào khác phục không mấy bạn! Thân ái
 
Upvote 0
Tôi có file nhập liệu đính kèm, hỏi nhờ các anh chị em trên diễn đàn cách khi click nhập nhiều mã hiệu (lớn hơn 1 mã hiệu) thì gộp các mã hiệu và nội dung tương ứng đó vào 1 ô như thế nào ạ, xin cảm ơn
Làm vậy thì chả mấy chốc CSDL của bạn sẽ thành đống rác mà thôi!
 
Lần chỉnh sửa cuối:
Upvote 0
Cho mình hỏi khi load xong dữ liệu lên listbox, mình chọn dữ liệu trên listbox thực hiên lệnh ghi vào sheet. đồng thời xóa các item trên listbox thì phải làm sao vậy?
 
Upvote 0
Mình có cái form như trên File, Form có tác dụng là khi mình đánh dấu vùng K11:p11 hay K12:p12 hoặc Q13:Q16 nhấn Ctrl+C thì vùng dự liệu cần dán đã có trong ClipBoard rồi mình chỉ việc gọi UerForm lên và AddClipBoard thì dư liệu xẻ đc đưa vào từng textbox rồi chép giá trị đó đến các sheet chị định vào tưng ô trong các Sheet tuy vào ngày trong thang tương ứng khi ta muốn thay thế giá trị hay thêm giá trị .
----- Nhưng mình vẩn chưa làm đc việc đó, nó chỉ chép đc 1 textbox còn các texbox kac không có giá trị
-----nếu là ô có chứa giá trị như K27 thì đưa vào Form thì đc nhưng khi gia trị muốn addClipboard không đủ 6 số thì code vẩn chưa làm đc .
--- Bác nào có phương án nào sử lý việc này xin chỉ giáo e cảm ơn .
 

File đính kèm

  • TestCopyAutoMacro(GetClipboardOK)2.xlsm
    63.7 KB · Đọc: 14
Upvote 0
(1) Sao bạn không chép trực tiếp từ trang 'Index' đến các trang kia theo ngày đã định mà fải thông qua Form chi cho rườm rà làm vậy?

(2) Sao không chép trực tiếp từ các ô dữ liệu đã chọn đến các TextBox tương ứng, mà fải qua Clipboard cho mệt thần xác thêm làm chi?

(3) Sao lại fải 31 trang tính cho các ngày trong tháng; 1 trang cho dữ liệu trong tháng không được hay sao?

Bạn sẽ gặp trỡ ngại gì khi thực hiện 3 điều nêu trên?
 
Upvote 0
(1) Sao bạn không chép trực tiếp từ trang 'Index' đến các trang kia theo ngày đã định mà fải thông qua Form chi cho rườm rà làm vậy?

(2) Sao không chép trực tiếp từ các ô dữ liệu đã chọn đến các TextBox tương ứng, mà fải qua Clipboard cho mệt thần xác thêm làm chi?

(3) Sao lại fải 31 trang tính cho các ngày trong tháng; 1 trang cho dữ liệu trong tháng không được hay sao?

Bạn sẽ gặp trỡ ngại gì khi thực hiện 3 điều nêu trên?
Thât ra mình làm bên ky thuât cứ 4 tiếng mình cập nhật thông số khá nhiều và phải chuyển đi chuyện lại hơn 30 sheets nên mình có ý định làm cái form trên sheet main cho tiện và file mình up lên chỉ là demo thôi.
- mình kiểm tra code thì data clipboard qua sử lý code trim(text) thì khoảng trắng là các ô vuông mình không biết làm thế nào để sử lý đoạn text đó.
- sau khi đưa vào textbox mình phải viết code cho nó vào sheet tương ứng gồm nhiều mảng theo điều kiện nữa
- file làm việc chính do cty tạo cho nó khoá hết và nó khá chuối ( mấy thằng tây nó làm cho i mà)
 
Upvote 0
Thât ra mình làm bên ky thuât cứ 4 tiếng mình cập nhật thông số khá nhiều và phải chuyển đi chuyện lại hơn 30 sheets nên mình có ý định làm cái form trên sheet main cho tiện và file mình up lên chỉ là demo thôi.
(*) Mình kiểm tra code thì data clipboard qua sử lý code trim(text) thì khoảng trắng là các ô vuông mình không biết làm thế nào để sử lý đoạn text đó.

(*) Bạn có muốn mình thử giúp bạn macro để chép từ trang nhập đến trang ngày nào đó không?

Để vậy, ta có thể đổi tên các trang tính thành N01, N02,. . . ,N31 không?
(Chẳng qua để tiện trong việc viết macro mà thôi)
Việc quan trọng là các 31 trang chứa dữ liệu các ngày cần có cấu trục như nhau cả về hàng lẫn cột chứa dữ liệu.


Chờ í kiến từ bạn & thân ái!
 
Lần chỉnh sửa cuối:
Upvote 0
(*) Bạn có muốn mình thử giúp bạn macro để chép từ trang nhập đến trang ngày nào đó không?

Để vậy, ta có thể đổi tên các trang tính thành N01, N02,. . . ,N31 không?
(Chẳng qua để tiện trong việc viết macro mà thôi)
Việc quan trọng là các 31 trang chứa dữ liệu các ngày cần có cấu trục như nhau cả về hàng lẫn cột chứa dữ liệu.


Chờ í kiến từ bạn & thân ái!
Mình mới tìm tòi vba đc 1 tuần nên cũng hạn ý trong đâu . Nên vẫn chưa có cách làm sao có bạn giúp thì còn gì bằng.
— về việc đổi tên sheet thì chắc là không đc file làm việc cũa mình do mấy thăng tây nó tạo ra nó liên quan tới nhiêu thứ nên mình không thể đề nghị đổ đc
— dư liêu các sheet thì hoàn toàn đồng nhất. Chỉ có 2 sheet tổng hợp thì khác nhưng mình vẫn chưa quan tâm tới 2 sheets đó.
Thân ái
 
Upvote 0
Mình có cái form như trên File, Form có tác dụng là khi mình đánh dấu vùng K11:p11 hay K12:p12 hoặc Q13:Q16 nhấn Ctrl+C thì vùng dự liệu cần dán đã có trong ClipBoard rồi mình chỉ việc gọi UerForm lên và AddClipBoard thì dư liệu xẻ đc đưa vào từng textbox rồi chép giá trị đó đến các sheet chị định vào tưng ô trong các Sheet tuy vào ngày trong thang tương ứng khi ta muốn thay thế giá trị hay thêm giá trị .
----- Nhưng mình vẩn chưa làm đc việc đó, nó chỉ chép đc 1 textbox còn các texbox kac không có giá trị
-----nếu là ô có chứa giá trị như K27 thì đưa vào Form thì đc nhưng khi gia trị muốn addClipboard không đủ 6 số thì code vẩn chưa làm đc .
--- Bác nào có phương án nào sử lý việc này xin chỉ giáo e cảm ơn .
Chưa hiểu bạn muốn làm cái gì, nhưng theo tôi với File này thì chỉ làm 1 sheet theo dõi, muốn ngày hoặc tháng nào thì lọc nó ra.
Nếu lọc tháng xong thì thêm code tách ngày của tháng đó.

Nói chung chỉ cần 2 sheet là đủ: 1 sheet theo dõi và 1 sheet lọc.
 
Upvote 0
Bạn chép macro này vô Module1; Tạo cho nó 1 tổ hợp để chạy như {CTRL}+{SHIFT}+C
PHP:
Sub ChuyenDuLieuTheoNgay()
 Dim Sh As Worksheet, Cls As Range

 Set Sh = ThisWorkbook.Worksheets(CStr(Day([I1].Value)))
 For Each Cls In Range("K11:P12")
    Sh.Cells(Cls.Row, Cls.Column - 8).Value = Cls.Value
 Next Cls
 For Each Cls In Range("Q13:Q16")
    Sh.Cells(Cls.Row + 1, "J").Value = Cls.Value
 Next Cls
 MsgBox "Chép Xong Ròi!"
End Sub

Nhập số liệu vô vùng qui định của 'Index' & bấm tổ hợp fím & kiểm tra lại chuyện chép

Chúc thành công!
 
Upvote 0
Chưa hiểu bạn muốn làm cái gì, nhưng theo tôi với File này thì chỉ làm 1 sheet theo dõi, muốn ngày hoặc tháng nào thì lọc nó ra.
Nếu lọc tháng xong thì thêm code tách ngày của tháng đó.

Nói chung chỉ cần 2 sheet là đủ: 1 sheet theo dõi và 1 sheet lọc.
- Mình đang viết cái VBA với mục đích là : Khi mình dùng chuột select một vùng chon và nhấn Ctr+C ( Copy) cái vùng đó thì clipboard đã lưu cả vùng chọn ấy vào trong bộ nhớ máy rồi ( bạn lick vào clipboard ngay thanh công vụ là thấy nó liên)
- Tiếp theo mình mở Form nhập liêu lên nhấn vào commandbutton có tên AddClipboard và chép cái dự liệu đó vào từng ô ( Cái này có tưởng là tại sao mấy cái Ô textbox không cho copy liên tục tương tự như ta copy một day ô như trong bảng tính excel)
- Mình tạo tiếp một commandButto thứ hai có tác dụng là "Save" nó có nhiệm vụ copy các textbox trên về sheets tuong ứng với ngày trong tháng và vào các ô tương ứng(Cái này thì mình đã thử xong rồi) .
- Nhưng vấn đề mà mình vương phải khi tạo đó là :
+ code cũa mình không chép vào từng textbox mà chi vào có cái textbox đầu tiên thôi. Cái này thì là do mình sử lý đoạn text đc lấy từ Clipboard chưa đc tôt là vì khi mình đưa đoạn text ở ngoài vào thò rất ok .
+ Nếu dư liêu sử lý là :x x x x x x thì Ham làm việc tôt nhưng dưới 6 ô thì ham làm việc không đúng.
 

File đính kèm

  • TestCopyAutoMacro(GetClipboardOK)CODA.xlsm
    61.1 KB · Đọc: 4
Upvote 0
Bạn chép macro này vô Module1; Tạo cho nó 1 tổ hợp để chạy như {CTRL}+{SHIFT}+C
PHP:
Sub ChuyenDuLieuTheoNgay()
 Dim Sh As Worksheet, Cls As Range

 Set Sh = ThisWorkbook.Worksheets(CStr(Day([I1].Value)))
 For Each Cls In Range("K11:P12")
    Sh.Cells(Cls.Row, Cls.Column - 8).Value = Cls.Value
 Next Cls
 For Each Cls In Range("Q13:Q16")
    Sh.Cells(Cls.Row + 1, "J").Value = Cls.Value
 Next Cls
 MsgBox "Chép Xong Ròi!"
End Sub

Nhập số liệu vô vùng qui định của 'Index' & bấm tổ hợp fím & kiểm tra lại chuyện chép

Chúc thành công!
Cam ơn Sa_DQ đã góp sức .
- Mình mới test xong ham chay rất ngọt bạn ơi.
- Còn cái Clipboard bạn có y tưởng nào giúp mình sử lý nó không.
-ở trong file bạn bôi vùng chon ơ sheet Index roi nhấn vào Goi Form chon AddClipboard thì nó chỉ chép hết toàn bộ giá trị vào textbox đâu tiên thôi
 

File đính kèm

  • TestCopyAutoMacro(GetClipboardOK)CODA.xlsm
    55.2 KB · Đọc: 18
Lần chỉnh sửa cuối:
Upvote 0
Sao bạn cứ mãi miết với Clipboard thế nhỉ?
Sao bạn không duyệt toàn bộ các ô cần chép & chép thẳng lên các TextBox luôn được không?
Đằng nào thì bạn cũng fải có từng í TextBox để chứa, dù bạn không chọn ô trên trang tính tương ứng với TextBox (fải chép tới)
 
Upvote 0
Sao bạn cứ mãi miết với Clipboard thế nhỉ?
Sao bạn không duyệt toàn bộ các ô cần chép & chép thẳng lên các TextBox luôn được không?
Đằng nào thì bạn cũng fải có từng í TextBox để chứa, dù bạn không chọn ô trên trang tính tương ứng với TextBox (fải chép tới)
Nếu như vậy thì mình phải copy từng ô rồi lại paste vào từng textbox và mình có cả trăm ô phải làm như thế. Nếu như copy từng day ô tới dảy ô khác như trong bảng tính excel thì mọi việc đa đơn giản rồi nhưng mình kg làm đc như vậy.
 
Upvote 0
Web KT
Back
Top Bottom