Tạo bảng chọn dữ liệu trong Excel

Offline Hà Nội 2014 tại Đồ Sơn-Hải Phòng
Chương trình từ thiện năm 2014 tại xã Tân Mỹ, huyện Trà Ôn, tỉnh Vĩnh Long




Trang 1/5 12345 CuốiCuối
kết quả từ 1 tới 10 trên 46
36,451 lượt xem
  1. Thành viên cấp cao Hình đại diện của handung107
    Tham gia ngày
    Aug 2004
    Địa chỉ
    VN
    Bài gửi
    582
    Post Thanks / Like
    handung107 vẫn chưa có mặt trong diễn đàn

    Tạo bảng chọn dữ liệu trong Excel

    Chúng ta lại trở về đề tài này cũng với Source Code của bạn Levanduyet, mà tôi tin rằng khi các bạn làm được, các bạn sẽ thất thuận tiện vô cùng.
    Để bắt đầu, chúng ta hãy soạn "vật liệu". các bạn hãy chuẩn bị cho tôi 2 DS, một đặt tên là DSKH và một đặt tên là DMMH tại sheet DS.

    1/Tạo Form :

    Các bạn hãy vào cửa sổ VBA. Click vào nút Insert UserForm trên thanh công cụ. Bạn vào View/Toolbox để lấy hộp công cụ ra ngoài.

    Form của chúng ta gồm : 1 Textbox, 2 Command Button và 1 Listview

    Nếu trên hộp công cụ, bạn không thấy công cụ Listview, bạn phải vào Tool / Additional Control, bạn đánh dấu vào hộp kiểm Microsoft Listview Control 6.0 (SP4).

    Bạn đặt tên cho các đối tượng của Form như sau : (nếu không có cửa sổ Properties Windows bạn hãy vào View/Properties Windows )

    Tại hộp Properties có các thuộc tính cần lưu ý sau :

    - Tên : dùng trong đoạn Code
    - Caption : thể hiện ra bên ngoài
    - Font : font chữ thể hiện

    Bạn Click vào từng đối tượng và đặt tên như sau :

    - Form : Name : frmChonMa; Caption : Chọn Mã
    -Textbox : Name : TxtMa
    - Command Button 1 : Name : CmdNhap, Caption : Nhập Mã
    - Command Button 2 : Name : CmdThoat; Caption : Thoát
    - Listview : Name : LVMa

    Sau đó, bạn vào cửa sổ Code của Form ChonMa và Copy đoạn Code của Form vào.

    Tiếp tục, bạn Insert/Module và Copy Code của Module vào.

    Tại Sheet nào bạn muốn bảng chọn thể hiện, bạn sẽ chép Source Code vào Sheet đó, và bạn sửa các chữ số ở phần Target.Column cho đúng với vị trí cột của các bạn.

    Nếu bạn biết sơ về VBA, bạn sẽ thấy công việc đơn giản và dễ dàng vô cùng. Chúc các bạn thành công

    Xem thêm các bài viết mới nhất trong cùng chuyên mục này:


  2. Khu vực quảng cáo
    Tham gia ngày
    Always
    Địa chỉ
    Advertising world
    Bài gửi
    Many

     

  3. Welcome Hình đại diện của levanduyet
    Tham gia ngày
    Oct 2004
    Địa chỉ
    HCM
    Bài gửi
    534
    Post Thanks / Like
    levanduyet vẫn chưa có mặt trong diễn đàn
    Nếu các bạn muốn form của mình hiện ra tại vị trí mình muốn thì bạn có thể kết hợp các bài viết ở thread này.
    http://www.unifiedtech.net.au/webket...5844#post35844
    Chúc các bạn thành công.
    Lê Văn Duyệt

  4. Thành viên cấp cao Hình đại diện của handung107
    Tham gia ngày
    Aug 2004
    Địa chỉ
    VN
    Bài gửi
    582
    Post Thanks / Like
    handung107 vẫn chưa có mặt trong diễn đàn
    Khi bạn nhấp chuột phải tại các cột Mã KH hay Mã MH, các bảng chọn sẽ hiện ra. Và ở ô TextBox, nếu bạn gõ ký tự nào, trong Listview, DS sẽ chuyển đến vị trí ký tự tương ứng. Bạn chọn xong các Mã thì nhấn nút Nhập, tại vị trí con trỏ sẽ hiện Mã bạn lựa chọn. Bạn chỉ cần 1 Form duy nhất để nhập nhiều loại DS khác nhau thông qua hàm :

    Sub NhapDuLieuMaMH()
    On Error Resume Next
    Call Dataselector("DMMH")
    End Sub

    Giả sử bạn có thêm DSNV, bạn hãy Copy đoạn mả trên và sẽ thay NhapDuLieuMaMH() bằng NhapDuLieuMNV() chẳng hạn, và Call Dataselector("DMMH"), bằng Call Dataselector("DSNV"). Hy vọng các bạn khám phá thêm những điều lý thú từ đây

  5. Thành viên cấp cao Hình đại diện của handung107
    Tham gia ngày
    Aug 2004
    Địa chỉ
    VN
    Bài gửi
    582
    Post Thanks / Like
    handung107 vẫn chưa có mặt trong diễn đàn
    Đây là nguyên văn bài của Levanduyet, nằm ở đề tải "Thủ thuật Excel", tôi đưa vào đây để các bạn theo dõi.

    TẠO BẢNG CHỌN DỮ LIỆU (DATA SELECTOR)

    Trong các doanh nghiệp nhỏ dữ liệu thường được bố trí trên Excel. Một số chủ doanh nghiệp không quan tâm đến việc bố trí các dữ liệu này. Công việc thiết kế và sử dụng dữ liệu này hoàn toàn giao cho các kế toán viên. Một số kế toán viên khi thiết kế và bố trí các dữ liệu lại không quan tâm đến việc sử dụng lại các dữ liệu sau này khi doanh nghiệp phát triển. Việc thiết kế các bảng lưu trữ, các bảng mã cho khách hàng, nhân viên bán hàng, các sản phẩm bán ra,...là công việc rất quan trọng ban đầu để móc nối các dữ liệu với nhau trong công việc sử lý số liệu như: theo dõi công nợ, theo dõi doanh số, phân tích theo các yêu cầu...vv.

    Vấn đề tôi đặt ra ở đây là khi móc nối các dữ liệu với nhau bạn sẽ phải làm việc nhiều đến việc lựa chọn một số mã từ các bảng mã. Làm sao để công việc lựa chọn của bạn được dễ dàng? Liệu Excel có cung cấp cho ta công cụ này không? Vâng, Excel có cung cấp cho ta một số công cụ nhưng theo kinh nghiệm bản thân, tôi nghĩ cách tốt nhất vẫn là tự mình thiết kế cho mình một bảng chọn. Còn các số liệu khác bạn có thể lấy ra từ các hàm chuẩn của Excel.

    Ở đây tôi xin đưa ra một ví dụ nhỏ về việc tạo bảng chọn, để chọn mã sản phẩm từ bảng sản phẩm.

    Ví dụ trong sheet MaSanPham, tôi có bảng mã sản phẩm như sau:

    1/Đặt tên vùng :

    Tôi đặt tên cho vùng A2:B570 có tên là MaSanPham. Bằng cách đánh dấu vùng A2:B570 vào Insert / Name / Define. Trong hộp thoại phần Names in Workbook bạn gõ và MaSanPham , sau đó nhấn nút OK.

    2/ Phần 2 : Thiết kế form để người dùng chọn lựa mã sản phẩm.

    Từ cửa sổ Excel bạn nhấn tổ hợp phím Alt + F11. Cửa sổ VBE xuất hiện, sau đó bạn chọn Insert/UserForm . Ta đặt tên form là frmDataSelector, thuộc tính Caption là Data Selector. Trên form ta đặt các đối tượng gồm có:

    - 1 TextBox có tên là TxtCode
    - 1 nút lệnh có tên là cmdOK
    - 1 nút lệnh có tên là cmdCancel
    - 1 ListView có tên là LVDataSelector. (Đối tượng ListView trên thanh Toolbox, nếu không có bạn phải vào Tools/Additional Controls và chọn

    3/ Phần 3: Copy đoạn mã sau vào Module. Đoạn mã trong Module, bạn không cần sửa chỗ nào cả.

    Sau đó bạn chọn Insert/Module đặt tên Module là DataSelector và gõ vào các hàm và thủ tục sau:

    Option Explicit
    '''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''
    Function RangeNameExists(Nname) As Boolean
    ' Kiem tra xem Ten bang co ton tai hay khong?
    ' Neu ton tai thi tra ve TRUE
    Dim n As Name
    RangeNameExists = False
    For Each n In ActiveWorkbook.Names
    If UCase(n.Name) = UCase(Nname) Then
    RangeNameExists = True
    Exit Function
    End If
    Next n
    End Function
    '''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''
    ' Day la ham de xuat cac du lieu tu Bang da duoc dat ten
    ' sang mot mang
    '''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''
    Function TableToArray(ByVal TableName As String)
    Dim arr
    Dim vRange As Range
    Dim i As Long, j As Long, m As Long, n As Long
    If Not RangeNameExists(TableName) Then Exit Function 'Neu khong ton tai thi thoat
    On Error Resume Next
    Set vRange = Range(TableName)
    i = vRange.Rows.count
    j = vRange.Columns.count
    ReDim arr(1 To i, 1 To j)
    For m = 1 To i
    For n = 1 To j
    arr(m, n) = vRange(m, n).Value
    Next n
    Next m
    TableToArray = arr
    Set vRange = Nothing
    End Function
    '''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''
    'Chuyen tu mang sang ListView va dinh dang ListView
    '''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''
    Sub ArrayToListview(ByVal VlistView As Listview, ByVal InputArray)
    Dim m As Long
    Dim i As Integer, j As Integer
    Dim bHang As Long, bCot As Long, bHeader As Integer
    Dim it As ListItem
    Dim anItem
    If Not IsObject(VlistView) Then Exit Sub
    On Error Resume Next
    'Dem so hang va so cot trong InputArray
    bHang = UBound(InputArray, 1)
    bCot = UBound(InputArray, 2)
    'Dinh dang ListView
    VlistView.View = lvwReport
    VlistView.FullRowSelect = True
    VlistView.MultiSelect = False
    VlistView.Gridlines = True
    VlistView.LabelEdit = lvwManual
    VlistView.HideColumnHeaders = True
    bHeader = VlistView.ColumnHeaders.count
    Select Case bHeader 'Xac dinh so cot cua ListView
    Case Is < bCot
    For i = bHeader + 1 To bCot
    VlistView.ColumnHeaders.Add i
    Next i
    Case Is = bCot
    'Khong lam gi ca
    Case Is > bCot
    'Khong lam gi ca
    End Select
    'Dien cac gia tri tu Inputarray vao Listview
    For i = 1 To bHang
    For j = 1 To bCot
    anItem = InputArray(i, j)
    If j = 1 Then
    Set it = VlistView.ListItems.Add()
    it.Text = anItem
    Else
    it.SubItems(j - 1) = anItem
    End If
    Next j
    Next i
    'Dat do rong cac cot
    For i = 1 To bCot
    VlistView.ColumnHeaders(i).Width = 150
    Next i
    Set it = Nothing
    Exit Sub
    Tbloi:
    MsgBox "Xin loi, khong the dua mang vao Listview " , vbCritical, "Th?b?
    End Sub
    '''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''
    'Dua tu bang vao mang, sau do dua tu mang vao Listview
    'Va di nhien ban cung co the chuyen tu bang vao ListView

    Sub NhapDuLieu()
    On Error Resume Next
    Call DataSelector("MaVatTu")
    End Sub

    Sub DataSelector(Tenbang As String)
    Dim bMang1
    On Error Resume Next
    bMang1 = TableToArray(Tenbang)
    Call ArrayToListview(frmDataSelector.LVDataSelector, bMang1)
    frmDataSelector.Show
    End Sub

    (Chỗ cần thay thế là frmDataselector và LVDataselector, nếu bạn dùng tên khác)

    4/Phần 4 : Đoạn Code của Form : Đoạn Code này có những chỗ cần sửa, tôi sẽ đưa ra cụ thể, bạn hãy sửa cho phù hợp

    Đoạn mã của frmDataSelector như sau:

    Private Sub cmdCancel_Click()
    Unload Me 'Thoat
    End Sub

    (CmdCancel sẽ được thay thế nếu bạn dùng tên khác cho nút Button )

    Private Sub cmdOK_Click()

    Dim bGiatrichon
    On Error Resume Next
    bGiatrichon = LVDataSelector.SelectedItem.Text
    ActiveCell.Value = bGiatrichon 'Dat gia tri ban chon vao o hien tai
    End Sub

    (CmdOK sẽ được thay thế nếu bạn dùng tên khác cho nút Button, LVDataselector cũng được thay thế nếu bạn dùng tên khác )

    'Muc dich cua ham sau nham cuon danh sach trong Listview den ma tuong tu
    'trong danh sach khi nguoi su dung go vao Textbox txtCode cac ky tu dau tien cua ma.

    Private Sub txtCode_Change()
    Dim it As ListItem
    On Error Resume Next
    btim = Me.txtCode.Text
    Set it = Me.LVDataSelector.FindItem(btim, lvwText, , lvwPartial)
    bindex = it.Index
    Me.LVDataSelector.ListItems.Item(bindex).Selected = True
    Me.LVDataSelector.ListItems.Item(bindex).EnsureVis ible
    Set it = Nothing
    End Sub

    (TxtCode và LVDataselector là chỗ cần thay thế)

    Giả sử bây giờ tôi muốn lấy mã sản phẩm từ bảng MaSanPham, trong sheet MaSanPham, khi tôi nhấn chuột phải ở cột 1 của Sheet2 thì đoạn mã trong Sheet2 như sau:

    5/Phần 5 : Đoạn mã của Sheet

    Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As _ Boolean)
    If Target.Column = 1 Then
    Cancel = True
    Call NhapDuLieu
    End If
    End Sub

    Đoạn Code này bạn cần lưu ý : Target.Column = 1, hay một số nào khác tuỳ bạn muốn bảng chọn hiện ra ở cột nào khi Click chuột phải

    Bây giờ bạn hãy trở về cửa sổ Excel, chọn một ô bất kỳ ở cột 1 của Sheet2, bạn nhấn chuột phải thì frmDataSelector hiện ra , bạn hãy thử gõ vào các ký tự đầu tiên của mã sản phẩm bạn cần...và bạn sẽ thấy nó hoạt động như thế nào.

    Bạn có thể cải tiến đoạn mã trong module DataSelector bằng việc sát nhập hàm TableToArray và thủ tục ArrayToListview thành một.

    Chúc các bạn thành công.

  6. Lão già ham vui Hình đại diện của Tuanktcdcn
    Tham gia ngày
    Jun 2004
    Địa chỉ
    Hà Nội
    Tuổi
    37
    Bài gửi
    509
    Post Thanks / Like
    Tuanktcdcn vẫn chưa có mặt trong diễn đàn
    Có rất nhiều cách để làm được việc này. Nếu các bạn mà vận dụng các Control từ ActiveX (Treeview,Listview,..) thì hay nhưng với người chưa biết hay mới bắt đầu học thì chắc không thể hiểu được.
    Chúng ta nếu viết thì nên viết ở dạng đơn giản nhất mà vẫn thực hiện được, có thể dùng các Control trong Toolbox của EXCEL cho đơn giản mà cũng nhiều lợi thế của nó.

  7. Welcome Hình đại diện của levanduyet
    Tham gia ngày
    Oct 2004
    Địa chỉ
    HCM
    Bài gửi
    534
    Post Thanks / Like
    levanduyet vẫn chưa có mặt trong diễn đàn
    Trích nguyên văn Nguyên văn bởi Tuanktcdcn
    Có rất nhiều cách để làm được việc này. Nếu các bạn mà vận dụng các Control từ ActiveX (Treeview,Listview,..) thì hay nhưng với người chưa biết hay mới bắt đầu học thì chắc không thể hiểu được.
    Chúng ta nếu viết thì nên viết ở dạng đơn giản nhất mà vẫn thực hiện được, có thể dùng các Control trong Toolbox của EXCEL cho đơn giản mà cũng nhiều lợi thế của nó.
    Vâng, cám ơn ý kiến của Tuan.
    Có một cách khác là dùng các phím Enter, Tab để bẫy người dùng và dùng luôn bảng Excel để chọn. Ví dụ khi người dùng Click phím Enter thì sẽ đưa người dùng đến bảng tính để chọn (người dùng chỉ sẽ di chuyển bằng phím mủi tên), nếu người dùng Enter ở hàng nào thì coi như người dùng chọn mã đó.
    Bạn Tuan có cách nào hay không, xin giới thiệu.
    Lê Văn Duyệt

  8. Over Abnormal / Crazy Hình đại diện của Bình_OverAC
    Tham gia ngày
    May 2004
    Địa chỉ
    Nha Trang
    Tuổi
    32
    Bài gửi
    824
    Post Thanks / Like
    Bình_OverAC vẫn chưa có mặt trong diễn đàn
    Trích nguyên văn Nguyên văn bởi Tuanktcdcn
    Có rất nhiều cách để làm được việc này. Nếu các bạn mà vận dụng các Control từ ActiveX (Treeview,Listview,..) thì hay nhưng với người chưa biết hay mới bắt đầu học thì chắc không thể hiểu được.
    Chúng ta nếu viết thì nên viết ở dạng đơn giản nhất mà vẫn thực hiện được, có thể dùng các Control trong Toolbox của EXCEL cho đơn giản mà cũng nhiều lợi thế của nó.
    Em cũng không hiểu lắm
    Nhờ bác giúp hộ, post lên một ví dụ để mọi người cùng tham khảo

  9. Thành viên cấp cao Hình đại diện của handung107
    Tham gia ngày
    Aug 2004
    Địa chỉ
    VN
    Bài gửi
    582
    Post Thanks / Like
    handung107 vẫn chưa có mặt trong diễn đàn
    Rất mong chủ đề này được tất cả các bạn tham gia sôi nổi, vì đối với những bạn đã rành về VBA, thì không có gì khó khăn cho các bạn, và chắc các bạn cũng có những thiết kế riêng để thuận lợi khi nhập dữ liệu, như thế, chúng ta sẽ trao đổi học hỏi được nhiều hơn.
    Còn đối với các bạn chưa rành về VBA, tôi đề nghị các bạn theo dõi File và phần đầu của chủ đề, cũng không khó lắm, nếu các bạn đặt tên các đối tượng của Form giống với File, và các bạn khoan tìm hiểu các đoạn Code, các bạn chỉ cần Copy và Paste lại đúng như hướng dẫn thôi.
    Thật ra, khi đưa loạt bài này, tôi luôn đặt mình vào vị trí các bạn chưa rành về VBA để hiểu các bạn sẽ gặp những trở ngại gì, khó khăn gì. Tôi cũng mong rằng các bạn hãy mạnh dạn góp ý, vì chủ yếu là chúng ta sẽ học hỏi được nhiều hơn cáxc bạn cứ im lặng, bản thân chúng tôi cũng không thể biết hết các bạn cần gì ?

  10. Lão già ham vui Hình đại diện của Tuanktcdcn
    Tham gia ngày
    Jun 2004
    Địa chỉ
    Hà Nội
    Tuổi
    37
    Bài gửi
    509
    Post Thanks / Like
    Tuanktcdcn vẫn chưa có mặt trong diễn đàn
    Trích nguyên văn Nguyên văn bởi levanduyet
    Vâng, cám ơn ý kiến của Tuan.
    Có một cách khác là dùng các phím Enter, Tab để bẫy người dùng và dùng luôn bảng Excel để chọn. Ví dụ khi người dùng Click phím Enter thì sẽ đưa người dùng đến bảng tính để chọn (người dùng chỉ sẽ di chuyển bằng phím mủi tên), nếu người dùng Enter ở hàng nào thì coi như người dùng chọn mã đó.
    Bạn Tuan có cách nào hay không, xin giới thiệu.
    Lê Văn Duyệt
    Em thấy cách của anh cũng hay đấy nhưng chỉ nên dùng các phím khác ngoài phím TAB và ENTER vì mọi người dùng EXCEL đã rất quen với động tác này. Nếu có thể anh post lên được không?
    Thực ra em muốn viết VBA tận dụng hết những công cụ của EXCEL (vì nó dễ học cho người mới bắt đầu). Hiện em mới viết mã cho bảng chọn dữ liệu như ở A-Excel. Nếu anh em muốn xem thử thì em sẽ post lên.

  11. Welcome Hình đại diện của levanduyet
    Tham gia ngày
    Oct 2004
    Địa chỉ
    HCM
    Bài gửi
    534
    Post Thanks / Like
    levanduyet vẫn chưa có mặt trong diễn đàn
    Chào Tuan,
    Tuan thử post bài lên thử xem, để cùng nhau chia sẻ. Duyệt cũng thấy đề tài này hay đấy.
    Lê Văn Duyệt


Thread Information

Users Browsing this Thread

Hiện tại có 1 người đang truy cập đề tài này gồm: (0 thành viên và 1 khách)

Visitors found this page by searching for:

tạo 1 textbox và command để lọc dữ liệu trong vba excel

tao csdl chung cho excellọc một sheet theo list boxcach tao lua chon du lieu tu sheet khac trong exceltạo nút lựa chọn trong excelcach tao list view trong excelcach tao form trong vbatạo bảng chọn dữ liệu trong excel 2007tạo dữ liệu tung ô trong excel 2007cách tạo button lựa chọn kết quả trong exceltao nut lưa chon trong exelHuong dan lam list phim bang exceltạo form lọc dữ liệu trong excelllàm tree view trong excel 2007đặt tên cho listbox excelquan ly bang exeldùng treeview trong excellist view trong excelcach design treeview trong excellExcel quản lý cửa hàngtạo form trong excellọc dữ liệu trong listboxlọc dữ liệu trung trong litsboxcách tạo treeview trong exceltạo bảng chọn dữ liệu trong excel