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

  • Thread starter handung107
  • Ngày gửi
H

handung107

Cao cấp
28/8/04
576
15
0
VN
www.giaiphapexcel.com
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
 
Khóa học Quản trị dòng tiền
H

handung107

Cao cấp
28/8/04
576
15
0
VN
www.giaiphapexcel.com
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
 
H

handung107

Cao cấp
28/8/04
576
15
0
VN
www.giaiphapexcel.com
Đâ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.
 
T

Tuanktcdcn

Lão già ham vui
18/6/04
549
52
28
47
Hà Nội
www.bluesofts.net
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ó.
 
levanduyet

levanduyet

Welcome
16/10/04
537
19
18
HCM
my.opera.com
Tuanktcdcn nói:
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
 
B

Bình_OverAC

Over Abnormal / Crazy
14/5/04
846
10
18
42
Nha Trang
Tuanktcdcn nói:
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
 
H

handung107

Cao cấp
28/8/04
576
15
0
VN
www.giaiphapexcel.com
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ì ?
 
T

Tuanktcdcn

Lão già ham vui
18/6/04
549
52
28
47
Hà Nội
www.bluesofts.net
levanduyet nói:
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.
 
levanduyet

levanduyet

Welcome
16/10/04
537
19
18
HCM
my.opera.com
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
 
T

Tuanktcdcn

Lão già ham vui
18/6/04
549
52
28
47
Hà Nội
www.bluesofts.net
DM2.jpg

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".
Cac ban Download "List.zip" ve tham khao
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
'=======================================================
 

Đính kèm

  • LIST.zip
    13.3 KB · Lượt xem: 1,520
Sửa lần cuối:
levanduyet

levanduyet

Welcome
16/10/04
537
19
18
HCM
my.opera.com
To: Tuanktcdcn,
Thật sự ra thì với chương trình của bạn đối với những người chưa biết hay mới bắt đầu học thì cũng...hơi bị khó ! Còn đối với bạn nào hiểu được đoạn code của bạn thì vẫn có thể sử dụng các control khác mà không gặp vấn đề gì!
Vậy thì vấn đề của chúng ta là làm thế nào chương trình chúng ta dễ sử dụng cho người dùng (dĩ nhiên như ở trên tôi đã nói là phải biết VBA mới đưa đoạn code vào và làm theo hướng dẫn của người viết!). Như ý kiến của bạn về vấn đề sử dụng phím TAB thì tôi tán thành. Còn vấn đề phím Enter thì tôi không tán thành. Về vấn đề bẫy các phím nào theo tôi nghĩ cũng cần các bạn góp ý, trước khi upload các đoạn code khác.
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.
Mong các bạn góp thêm ý kiến cho vấn đề này, để cuối cùng chúng ta có thể dễ dàng sử dụng.
Chúc các bạn khoẻ.
Lê Văn Duyệt
 
B

Bình_OverAC

Over Abnormal / Crazy
14/5/04
846
10
18
42
Nha Trang
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é.
 
B

Bình_OverAC

Over Abnormal / Crazy
14/5/04
846
10
18
42
Nha Trang
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
 
levanduyet

levanduyet

Welcome
16/10/04
537
19
18
HCM
my.opera.com
To: OVerAC,
Cách này Anh cũng đã bàn với em rồi, nếu em muốn dùng short-cut.
Chúc em...cua...được...hihihi
Lê Văn Duyệt
 
H

handung107

Cao cấp
28/8/04
576
15
0
VN
www.giaiphapexcel.com
Thật vui, khi đề tài này sôi nổi quá. Riêng đối với ý kiến của OverAc thì chị rất tán đồng và sẽ bàn lại với em trong một chủ đề khác : "Database trong KT trên Excel". Chủ đề này Duyệt đã khoá, nhưng chị vẫn nghĩ sẽ có ngày đề cập lại. Excel không thể thiết kế Database đúng nghĩa, nhưng một danh sách dữ liệu chứa trên Excel, và phải thiết kế thế nào cho thuận lợi là vấn đề rất nên thảo luận. Riêng 2 bảng chọn dữ liệu của Tuấn và Duyệ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
 
T

Tuanktcdcn

Lão già ham vui
18/6/04
549
52
28
47
Hà Nội
www.bluesofts.net
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ó.
 
Sửa lần cuối:
N

nguoiconxunui

Khách vãng lai
29/6/04
1,280
215
63
Bình Định
aso2pc.co.cc
Có một chút vấn đề: ai copy nguyên si theo bài hướng dẫn của anh Duyệt thì đổi "MaVatTu" trong Sub NhapDuLieu() thành "MaSanPham" (phải hông ta?)
 
H

handung107

Cao cấp
28/8/04
576
15
0
VN
www.giaiphapexcel.com
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
 
R

ROSE1976

Guest
27/10/04
6
0
0
47
Quận 12
Chao Handung107
Minh da xem qua ve ke toan bang Excel cua ban do la ke toan bang Excel NHP. Tuyet lam. Minh rat cam on ban. Nhung ban oi ban co the giup minh duoc khong ?
Ban co the huong dan cho minh cach hop box ve chon in phieu Thu - chi duoc khong ?
Ban lam rat hay, minh thi khong lam duoc, Chi can Click vao o chon la co the chon duoc phieu in.
Neu duoc xin ban danh chut thoi gian mail cho minh nhe.
E-mail cua minh : tuanthanh5291@yahoo.com
 

Xem nhiều

Webketoan Zalo OA