Trang 1/2 1 2 cuốicuối
Hiển thị kết quả tìm kiếm từ 1 đến 10 trên tổng số: 13
  1. #1
    Tham gia ngày
    05 2006
    Nơi Cư Ngụ
    TP HCM
    Bài gởi
    1,470
    Cảm ơn
    1,222
    Được cảm ơn 16,380 lần trong 1,309 bài viết

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

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


    Bài của Lê văn Duyệt


    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:

    Code:
    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

    Code:
    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

    Code:
    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

    Code:
    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:

    Code:
    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 )

    Code:
    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.

    Code:
    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
    Code:
    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.
    thay đổi nội dung bởi: handung107, 15-11-07 lúc 02:29 PM


  2. #2
    Tham gia ngày
    05 2006
    Nơi Cư Ngụ
    TP HCM
    Bài gởi
    1,470
    Cảm ơn
    1,222
    Được cảm ơn 16,380 lần trong 1,309 bài viết
    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


  3. #3
    Tham gia ngày
    05 2006
    Nơi Cư Ngụ
    TP HCM
    Bài gởi
    1,470
    Cảm ơn
    1,222
    Được cảm ơn 16,380 lần trong 1,309 bài viết
    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


  4. #4
    Tham gia ngày
    05 2006
    Nơi Cư Ngụ
    TP HCM
    Bài gởi
    1,470
    Cảm ơn
    1,222
    Được cảm ơn 16,380 lần trong 1,309 bài viết

    Bài viết của Tuanktcdcn


    Chương trình sẽ mở một List (danh sách mã trong danh mục) DMDVKH khi bạn Click chuột phải trên Sheet "Nhan Ma".

    Việc tra tìm một mã rất tiện, cho phép tìm theo "Mã", "Tên" hay "Công nợ"
    Trình tự công việc như sau:
    'Dat ten vung chua danh muc la DMDVKH
    'Tai Sheet can nhan ma dat ten la Nhan Ma

    'ALT+F11
    ' Mở ThisWorkbook (ClickDbl trên ThisWorkbook), xoá tất cả và và copy đoạn mã mau xanh (blue)
    '================================================= ======

    Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
    If Sh.Name <> "Nhan Ma" Then Exit Sub
    dm.Show 1
    Cancel = True
    End Sub
    '================================================= ======

    'Tạo Form. Trên Form tạo các đối tượng:
    Texbox đặt tên (Name) là TB - dùng để vào thông tin cần tìm
    ListBox đặt tên (Name) là LB - dùng để chứa danh mục "DMDVKH"
    Command đặt tên (Name) là Chon - dùng để chọn mã cần tìm
    Command đặt tên (Name) là ESC - dùng để huỷ bỏ việc chọn

    ClickDbl trên FORM, xoá tất cả và copy đoạn mã màu xanh (blue)

    '================================================= ======

    Private Sub UserForm_Initialize()
    Chon.Default = True 'Khi nhấn phím ENTER sẽ chạy sự kiện trong Command "Chọn"
    Thoat.Cancel = True 'Khi nhấn phím ESC sẽ thoát và không nhận mã
    With LB
    .ColumnCount = 3 'Nhận 3 cột
    .BoundColumn = 1 'Ngầm định nhận dữliệu ở cột 1 trong ListBox
    .ColumnWidths = "40,140,50" 'Độ rộng của 3 cột
    .RowSource = "DMDVKH" ' "DMDVKH" được tạo ra khi bạn đặt tên bảng DMDVKH trong Sheet có tên DMDVKH
    TB.text = ActiveCell.Value
    End With
    TB_Change

    End Sub
    '================================================= ======
    Private Sub Chon_Click() 'Sự kiện khi Click chuột vào Command "Chọn"
    ActiveCell.Value = LB.text
    Unload Me
    End Sub
    '================================================= ======
    Private Sub Thoat_Click() 'Sự kiện khi Click chuột vào Command "ESC" hay nhấn phím ESC
    Unload Me
    End Sub
    '================================================= ======
    Private Sub LB_Click() 'Sự kiện khi Click chuột vào IistBox
    If LB.ListIndex = 0 Then
    'MsgBox "Ban khong duoc chon tieu de cua bang!", vbCritical, "Loi du lieu"
    Chon.Enabled = False
    Else
    Chon.Enabled = True
    End If
    End Sub
    '================================================= ======
    Private Sub LB_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    If Chon.Enabled Then
    Chon_Click
    End If
    End Sub
    '================================================= ======
    Private Sub LB_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    TB.text = LB.List(LB.ListIndex, 1)
    End Sub
    '================================================= ======
    Private Sub LB_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    TB.text = LB.List(LB.ListIndex, 1)
    End Sub
    '================================================= ======
    Private Sub TB_Change()
    Dim cValue, I
    cValue = LCase(Trim(TB.Value))

    For I = 1 To LB.ListCount - 1

    If LCase(Trim(LB.List(I, 0))) = cValue Then
    LB.ListIndex = I
    Exit For
    End If

    If InStr(LCase(Trim(LB.List(I, 1))), cValue) <> 0 Then
    LB.ListIndex = I

    Exit For
    End If

    If InStr(LCase(Trim(LB.List(I, 2))), cValue) Then
    LB.ListIndex = I
    Exit For
    End If

    Next I
    End Sub


  5. #5
    Tham gia ngày
    05 2006
    Nơi Cư Ngụ
    TP HCM
    Bài gởi
    1,470
    Cảm ơn
    1,222
    Được cảm ơn 16,380 lần trong 1,309 bài viết

    Ý kiến của Duyệt

    Một vấn đề tôi muốn đưa ra thảo luận là:
    _Làm thế nào để bẫy các phím?
    _Kỹ thuật nào được sử dụng?
    _Các Even nào có thể được sử dụng cho mục đích này.

  6. Có 4 thành viên cảm ơn handung107 về bài viết này:


  7. #6
    Tham gia ngày
    05 2006
    Nơi Cư Ngụ
    TP HCM
    Bài gởi
    1,470
    Cảm ơn
    1,222
    Được cảm ơn 16,380 lần trong 1,309 bài viết

    Ý kiến của Bình OverAC

    Em có một kinh nghiệm khi lập database cho các bảng mã. Xin được trình bày cùng các bác nhé.
    Bảng mã được lập cần có 2 loại1. Loại 1 là loại mã tự đặt theo yêu cầu kiểm soát của người lập trình. Loại 2 là mã cho người dùng lập. Tại sao?
    Rất đơn giản là vì đôi khi người dùng còn muốn đổi luôn mã do mình đặt ra trước đây. Đây cũng là một yêu cầu tương đối phổ biến đặt biệt là đối với các đối tượng tương đối nhiều và có nhu cầu tăng liên tục. Khi có nhiều đối tượng mới, người dùng có thể dể dàng bị nhầm lẩn, nhập trùng, nhập mã sai yêu cầu ban đầu đặt ra. Khi cơ sở dử liệu chỉ có một loại mã là mã do người dùng lập thì chắc chắn rằng người lập trình phải dựa trên mã này. Lưu trử dử liệu theo mã này. Nhưng khi mã này bị thay đổi thì sao! Dò tìm lại các mẩu tin có chứa nó và điều chỉnh! Khó thực hiện!! và làm cho chương trình chậm.
    Khi có một loại mã do chính chương trình lập thì OK người dùng muốn đổi mã thì cứ việc vì cơ sở dử liệu không dựa trên loại mã này đâu. dử liệu vì thế không bị xáo trộn.
    Đấy là kinh nghiệm xương máu của chính bảng thân em với một cơ sở dử liệu về khách hàng với hơn 600 khách hàng và trung bình mỗi ngày có thêm khoảng 5-6 khách hàng mới… hichic đặt biệt là khi em không thể nào nhớ nổi đối với những khách hàng dùng nhiều tên (tên tiếng anh, tên tiếng viêt, tên tắc…..) nghe cứ mà lộn tùng phèo cả lên.
    Trên thực tế thì em thấy những chương trình lớn đều theo cách này.
    Đây là kinh nghiệm của chính bản thân em, em nghĩ là E Fans của mình cũng cần lưu ý vấn đề này. Mong rằng các bác nào lập trình đọc được cái kinh nghiệm nhỏ nhoi này của em thì đừng cười nhé.

  8. Có 11 thành viên cảm ơn handung107 về bài viết này:


  9. #7
    Tham gia ngày
    05 2006
    Nơi Cư Ngụ
    TP HCM
    Bài gởi
    1,470
    Cảm ơn
    1,222
    Được cảm ơn 16,380 lần trong 1,309 bài viết

    Bình OverAC

    Thêm nửa:
    Nhắc nhỏ các bạn có tham khảo cái dataselector của bác levanduyet và cái list của bác Tuân.
    Cả hai cái này đều dựa trên một sự khởi đầu bằng một cái click phải chuột. Nhưng đây là vấn đề mà ngày xưa có lần em đả trình bày với anh Duyệt. Đó là phải dùng chuột thì không tiện đối với những người chuyên sử dụng phím như em.
    Thế thì phải làm sao đây đối vơi những người chuyên sử dụng phím nhưng muốn dùng 2 cái trên.
    Cách làm này hơi ngây ngô mong rằng anh duyệt và anh Tuân đừng cười.
    1. Chèn thêm một module vào file list.
    2. Gõ vào đoạn code sau:
    '================================
    Public Sub khoidau()
    dm.show
    End Sub
    '================================
    3.Vào Tool --> Macro --> Macros... (hoặc nhấn Alt + F8)
    Chọn cái thằng nào tên là khoidau kia sau đó nhấn nút Options...
    Rồi bây giờ bạn nhìn vào mục shortcut key xem. bạn có thấy một ô trống có chữ Ctrl đằng trước và một con nhắy trong ô trống này.
    Hãy đặt shortcutkey cho nó đi, nó sẽ ở dạng "Ctrl + ..." ( bạn có thể đè thêm phím shift nếu muốn shortcut key đó nằm ở dạng "Ctrl + Shift + ....")

    Cách 2:
    1. Vào Tool --> macro --> Record new macro..
    Bạn sẽ thấy một bảng hiện lên.
    Hãy nhấn cài shortcut key cho nó đi.
    Đặt tên cho nó như bạn thích (nhớ là tên không có khoản trắng, và ký tự đặt biệt) hay bạn đặt như tôi là khoidau.
    Đây là cách bạn thu một macro, nhưng thật ra bạn không cần thu nên hãy nhấn ngay vào phím stop trên một toolbar mới xuất hiện ngay trên bảng tính Excel.
    Nhấn Alt + F11 để vào màn hình Visual Basic Editor. Xem ở file LIST có thêm một module (có thể là module1).
    Xem mã của module này bạn sẽ thấy như sau:

    Sub khoidau()
    '
    ' khoidau Macro
    ' Macro recorded 07/03/2005 by NguyenBinh
    '
    ' Keyboard Shortcut: Ctrl+Shift+H
    '
    End Sub

    Bạn có thể xoá hết những dòng có dấu ' đứng đằng trước, thêm một dòng
    dm.show ở giữa
    và nó trở thành như sau:

    Sub khoidau()
    dm.Show
    End Sub

    Xong rồi! bạn đã có một cái LIST giống như cái của bác Tuân có điều bây giờ bạn có thể dùng phím tắt với nó.
    Khi có cái này rồi bạn có thể vào view code của đối tượng This workbook xoá hết nội dung để có thể dùng chuột phải bình thường trên sheet này.

    Ui dài quá. Chúc các bạn hiểu được những gì tôi nói

  10. Có 14 thành viên cảm ơn handung107 về bài viết này:


  11. #8
    Tham gia ngày
    05 2006
    Nơi Cư Ngụ
    TP HCM
    Bài gởi
    1,470
    Cảm ơn
    1,222
    Được cảm ơn 16,380 lần trong 1,309 bài viết
    Nếu không muốn sử dụng chuột phải, gán phím tắt như OverAC đề nghị cũng được, còn không thì thay đoạn Source Code ở WorkSheet như sau :

    Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
    On Error Resume Next
    Set myRange = Intersect(Range("C5:C300"), Target)
    If Not myRange Is Nothing Then
    Call NhapDuLieuMaKH
    End If
    End Sub

    Thay vì :

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

    Như vậy, khi sử dụng các phím mũi tên sang phải, trái, trên, dưới nếu con trỏ rơi vào cột C (nếu bạn muốn cột khác, thì thay đổi tùy thích) thì ngay lập tức bảng chọn sẽ hiện ra thôi

  12. Có 13 thành viên cảm ơn handung107 về bài viết này:


  13. #9
    Tham gia ngày
    05 2006
    Nơi Cư Ngụ
    TP HCM
    Bài gởi
    1,470
    Cảm ơn
    1,222
    Được cảm ơn 16,380 lần trong 1,309 bài viết

    Ý kiến của Tuânktcdcn

    Dùng phím tắt
    Dùng theo OverAC theo thiết kế Macro cũng đượng và dễ thực hiện hoặc bạn có thể làm theo cách của VBA
    1) ALT+F11 (vào môi trường lạp trình VBA)
    2) Vào Menu Insert\Module
    3 Copy đoạn mẵ dùng phím tắt F4 để mở DM sau:

    '============================================
    Sub OpenDM()
    dm.Show 1
    End Sub
    '========Tạo phím tắt F4 để gọi thủ tục "OpenDM"=
    Sub AUTO_OPEN() 'Tự động chạy khi mở Workbook
    Application.OnKey "{F4}", "OpenDM"
    End Sub
    '========Huỷ phím F4 khi thoát===============
    Sub AUTO_CLOSE() 'Tự động chạy khi close Workbook
    Application.OnKey "{F4}"
    End Sub
    '=======================================

    *) Nếu bạn muốn dùng các phím chức năng kết hợp khác thì làm như sau:
    Nếu Shift+F4 thì "+{F4}"
    Nếu CTRL+F4 thì "^{F4}"
    Nếu ALT +F4 thì "%{F4}"
    *) Nếu không phải là F4 thì bạn có thể đổi theo cấu trúc gọi
    "{Tên phím}"
    VD Nếu dùng ALT+F3 thì "%{F3}"
    *) Thực tế thì việc quản lý mã hay đối tượng trong CSDL là một bài toán quan trọng như mã TK, mã KH, mã nhà CC, mã VLSPHH,...
    Trong bất kỳ một PM nào thì cũng phải làm tốt việc này nếu không sẽ rất nguy hiểm cho việc quản lý. Nếu chúng ta dùng trên Excel để lập và chọn mã thì cần phải "chủ động" thôi nếu không viết VBA cho nó.

  14. Có 14 thành viên cảm ơn handung107 về bài viết này:


  15. #10
    Tham gia ngày
    05 2006
    Nơi Cư Ngụ
    TP HCM
    Bài gởi
    1,470
    Cảm ơn
    1,222
    Được cảm ơn 16,380 lần trong 1,309 bài viết
    Tạo ListBox di chuyển vị trí theo con trỏ chuột

    --------------------------------------------------------------------------------

    Cũng như Data Selector, bạn chuẩn bị cho tôi 1 ListBox, nhưng bạn hãy dùng thanh công cụ View / Toolbars / Control Toolbox. ListBox có tên là ListBox1. Bạn đặt thuộc tính cho ListBox này như sau : (chọn nút Properties trên thanh công cụ )
    - Column Count : 3 (nếu bảng dữ liệu của bạn có 3 cột)
    - Column Bound : 1 (nếu bạn muốn dữ liệu ở cột 1 của CSDL thể hiện trong Cell )
    - ListFillRange : DMKH (hay tên của bảng dữ liệu tuỳ ý )

    Bạn đặt thêm CheckBox có tên là CheckBox1. CheckBox này sẽ giúp bạn mở tắt ListBox khi cần thiết.
    Đặt tên cho bảng dữ liệu bạn muốn thể hiện trong ListBox là DMKH. Tên cho vùng nhập dữ liệu là MaKH, Sheet là Data
    Click chuột phải lên Sheet Data để vào cửa sổ VBA của Worksheet. Bạn chép đoạn Code vào, chỉ sửa như sau :
    Set Target = Range("MaKH") : MaKH là tên dãy bạn muốn dữ liệu thể hiện khi Click chọn ListBox


Trang 1/2 1 2 cuốicuối

Thông tin về chủ đề này

Users Browsing this Thread

Hiện có 1 người đang xem đề tài này. (0 thành viên và 1 khách)

Đề tài tương tự

  1. VBA trong Excel 2003 không chạy được trong Excel 2010
    Viết bởi ngthethat trong chuyên mục Lập Trình với Excel
    Trả lời: 5
    Bài mới gởi: 08-12-14, 08:11 PM
  2. Lỗi trong "các tập tin đi kèm trong sách Lập trình VBA trong Excel tái bản năm 2012
    Viết bởi siwtom trong chuyên mục Lập Trình với Excel
    Trả lời: 0
    Bài mới gởi: 06-07-12, 05:53 AM
  3. Chức năng Calendar không sử dụng được trong excel 2007 và một vài bản excel 2003?
    Viết bởi khacbao72 trong chuyên mục Hỏi đáp về VBA - Macro
    Trả lời: 0
    Bài mới gởi: 02-02-12, 07:09 PM
  4. Hỏi về sự khác nhau giữa Macro, code và hàm trong excel. Excel và VBA
    Viết bởi vdtam_08 trong chuyên mục Lập Trình với Excel
    Trả lời: 4
    Bài mới gởi: 12-07-11, 10:22 PM
  5. File bị hỏng định dạng excel 2003, không save lại được trong excel 2007
    Viết bởi chiphoiloithoi trong chuyên mục Những vấn đề chung
    Trả lời: 0
    Bài mới gởi: 22-04-11, 11:36 AM

Bookmarks

Bookmarks

Quyền Sử Dụng Ở Diễn Ðàn

  • Bạn không thể đăng đề tài mới
  • Bạn không thể đăng trả lời
  • Bạn không thể đăng file đính kèm.
  • Bạn không thể sửa bài viết.
  •  

Mudim v0.8 Tắt VNI Telex Viqr Tổng hợp
Chính tả Bỏ dấu kiểu mới  [Bật/Tắt (F9)]