L
Xin chào các Bạn,
Xin trao đổi với các bạn 1 kinh nghiệm thực tế.
Số là trong quá trình nhập liệu trên Access, tôi thường phải nhập những dãy số zero dài giống như: 1000000 (một triệu), 10000000 (mười triệu), 100000000 (một trăm triệu), ... Rất dễ bị dư hoặc thiếu 1 vài số zero, lỗi này là "sai 1 ly đi 1 dặm". Để tránh cái sai này, tôi tạo 1 tiện ích nạp từ viết tắt sao cho: thay vì ghi con số dài như trên tôi chỉ cần ghi 1T hoặc 10T, 100T là chương trình hiểu ngay từ nguyên và cho nạp đúng từ nguyên đã đăng ký trước.
Tôi làm như sau:
1. tạo 1 bảng ghi quy ước viết tắt gồm có 2 fields: tutat (là Primary key) và tunguyen, đặt tên Table này là "Viettat".
2. Viết 1 function như sau:
Function Ghitat()
'
Dim SubSt As String, Tunguyen As String
Dim i As Integer, nStart As Integer
Dim MySt As String 'Toan bo chuoi trong Textbox
Dim LastSt As String 'Chuoi tu vi tri con tro dang xet -> chuoi chuoi Myst
Dim sKq As String
Dim ActiveF As Form
Dim TbRec As Recordset
Dim Hoi
Set TbRec = CurrentDb.OpenRecordset("viettat", dbOpenSnapshot)
Set ActiveF = Screen.ActiveForm
If TbRec.RecordCount = 0 Then
Set TbRec = Nothing
Exit Function
End If
'Xac dinh vi tri noi con tro
nStart = ActiveF.ActiveControl.SelStart
ActiveF.ActiveControl.SelLength = ActiveF.ActiveControl.Width - nStart
LastSt = Trim(ActiveF.ActiveControl.SelText)
'Chuyen con tro ve dau cau
ActiveF.ActiveControl.SelStart = 0
ActiveF.ActiveControl.SelLength = nStart
MySt = Trim(ActiveF.ActiveControl.SelText)
sKq = ""
For i = Len(MySt) To 1 Step -1
SubSt = Mid(MySt, i, 1)
If SubSt = Chr(32) Then
Exit For
Else
sKq = SubSt & sKq
End If
Next i
TbRec.FindFirst "[tutat]='" & sKq & "'"
If TbRec.NoMatch = False Then
Tunguyen = Trim(TbRec("tu"))
ActiveF.ActiveControl.Value = Left(MySt, Len(MySt) - Len(sKq)) & Tunguyen & " " & LastSt
Else
Hoi = Eval("MsgBox('Tu tat nay chua duoc dang ky.' & chr(10) & 'Cho dang ky khong?@Bam YES neu dong y, bam NO neu khong.@', 4, 'Dang ky tu tat')")
If Hoi = 6 Then
DoCmd.OpenForm "Viettat"
Screen.ActiveForm.ActiveControl.Value = sKq
Screen.ActiveForm.ActiveControl.SelStart = Len(sKq)
End If
End If
ActiveF.ActiveControl.SelStart = nStart + Len(Tunguyen)
Set TbRec = Nothing
End Function
3. Tạo 1 Macro tên là Autokeys, trong Macro này tôi gán tổ hợp phím tắt Ctrl+T cho function Ghitat() nêu trên.
4. Sử dụng: Cho đăng ký bảng quy ước viết tắt vào bảng "Viettat", sau đó khi nào cần nhập từ tắt ở bất kỳ ô nhập li65u nào trong Form bất kỳ, tôi chỉ cần nhập từ tắt đã đăng ký và gõ tổ hợp phím Ctrl+T, lập tức chương trình sẽ điền ngay từ nguyên thay thế cho từ tắt.
Xin chú ý: trước khi gõ tổ hợp phím Ctrl+T phải bảo đảm con trỏ đang được đặt ở ngay kế sau ký tự cuối cùng trong từ tắt, không được có khỏang cách.
Các Bạn làm thử xem có lý không?
Xin trao đổi với các bạn 1 kinh nghiệm thực tế.
Số là trong quá trình nhập liệu trên Access, tôi thường phải nhập những dãy số zero dài giống như: 1000000 (một triệu), 10000000 (mười triệu), 100000000 (một trăm triệu), ... Rất dễ bị dư hoặc thiếu 1 vài số zero, lỗi này là "sai 1 ly đi 1 dặm". Để tránh cái sai này, tôi tạo 1 tiện ích nạp từ viết tắt sao cho: thay vì ghi con số dài như trên tôi chỉ cần ghi 1T hoặc 10T, 100T là chương trình hiểu ngay từ nguyên và cho nạp đúng từ nguyên đã đăng ký trước.
Tôi làm như sau:
1. tạo 1 bảng ghi quy ước viết tắt gồm có 2 fields: tutat (là Primary key) và tunguyen, đặt tên Table này là "Viettat".
2. Viết 1 function như sau:
Function Ghitat()
'
Dim SubSt As String, Tunguyen As String
Dim i As Integer, nStart As Integer
Dim MySt As String 'Toan bo chuoi trong Textbox
Dim LastSt As String 'Chuoi tu vi tri con tro dang xet -> chuoi chuoi Myst
Dim sKq As String
Dim ActiveF As Form
Dim TbRec As Recordset
Dim Hoi
Set TbRec = CurrentDb.OpenRecordset("viettat", dbOpenSnapshot)
Set ActiveF = Screen.ActiveForm
If TbRec.RecordCount = 0 Then
Set TbRec = Nothing
Exit Function
End If
'Xac dinh vi tri noi con tro
nStart = ActiveF.ActiveControl.SelStart
ActiveF.ActiveControl.SelLength = ActiveF.ActiveControl.Width - nStart
LastSt = Trim(ActiveF.ActiveControl.SelText)
'Chuyen con tro ve dau cau
ActiveF.ActiveControl.SelStart = 0
ActiveF.ActiveControl.SelLength = nStart
MySt = Trim(ActiveF.ActiveControl.SelText)
sKq = ""
For i = Len(MySt) To 1 Step -1
SubSt = Mid(MySt, i, 1)
If SubSt = Chr(32) Then
Exit For
Else
sKq = SubSt & sKq
End If
Next i
TbRec.FindFirst "[tutat]='" & sKq & "'"
If TbRec.NoMatch = False Then
Tunguyen = Trim(TbRec("tu"))
ActiveF.ActiveControl.Value = Left(MySt, Len(MySt) - Len(sKq)) & Tunguyen & " " & LastSt
Else
Hoi = Eval("MsgBox('Tu tat nay chua duoc dang ky.' & chr(10) & 'Cho dang ky khong?@Bam YES neu dong y, bam NO neu khong.@', 4, 'Dang ky tu tat')")
If Hoi = 6 Then
DoCmd.OpenForm "Viettat"
Screen.ActiveForm.ActiveControl.Value = sKq
Screen.ActiveForm.ActiveControl.SelStart = Len(sKq)
End If
End If
ActiveF.ActiveControl.SelStart = nStart + Len(Tunguyen)
Set TbRec = Nothing
End Function
3. Tạo 1 Macro tên là Autokeys, trong Macro này tôi gán tổ hợp phím tắt Ctrl+T cho function Ghitat() nêu trên.
4. Sử dụng: Cho đăng ký bảng quy ước viết tắt vào bảng "Viettat", sau đó khi nào cần nhập từ tắt ở bất kỳ ô nhập li65u nào trong Form bất kỳ, tôi chỉ cần nhập từ tắt đã đăng ký và gõ tổ hợp phím Ctrl+T, lập tức chương trình sẽ điền ngay từ nguyên thay thế cho từ tắt.
Xin chú ý: trước khi gõ tổ hợp phím Ctrl+T phải bảo đảm con trỏ đang được đặt ở ngay kế sau ký tự cuối cùng trong từ tắt, không được có khỏang cách.
Các Bạn làm thử xem có lý không?