Tìm thủ thuật nhanh hơn với chức năng tìm trong Blog

Hiển thị các bài đăng có nhãn Form. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn Form. Hiển thị tất cả bài đăng

23/5/19

Thay đổi địa chỉ của đối tượng WebBrowser bằng VBA

WebBrowser là đối tượng giúp bạn duyệt web trong access. Ta có thể ứng dụng trong việc dùng access đăng nhập vào web, lấy dữ liệu về (ví dụ tỷ giá, KQ Xổ Số...) và tải dữ liệu lên web như gửi báo cáo...
Để thay đổi Address của WebBrowser, ta phải gõ đầy đủ như sau


WebBrowser0.ControlSource = "=""URL"""


Ví dụ:


WebBrowser0.ControlSource = "=""http://tonghop.thuthuataccess.com/2009/11/lay-ve-so-seri-cpu-trong-access.html"""

3/10/13

Đưa danh sách các form vào listbox

Tác giả : paulsteigel
Nguồn: http://thuthuataccess.com

Hàm sau sẽ giúp bạn liệt kê các form trong Chương trình và đưa vào 1 listbox.

8/10/10

Hướng dẫn tạo form chỉ cho phép mở một số lần cố định

hướng dẫn này cho phép chúng ta tạo 1 form chỉ cho phép người dùng mở 5 lần.
Có thể dùng ràng buộc người dùng phải đăng ký để dùng tiếp.

----------------------------------------------------------
Tác giả và demo: Cafe Via He
Site: http://thuthuataccess.co.cc/forum
Vui lòng giữ tên tác giả và site nếu bạn dùng hoặc chia sẻ code này.
------------------------------------------------
Tạo 1 table tên là FormInfo(FormName,times)
Formname: Text
Times: number

1 Form tên là demo
Trong đó, vẽ 1 textbox tên là txtT để thể hiện số lần mở form. Các yếu tố màu mè khác. Form sẽ có dung nhan như sau
[Image: solanmoform.png]
Trong sự kiện Openform, bạn dùng code sau:
Code:
Private Sub Form_Open(Cancel As Integer)
DoCmd.SetWarnings False
Dim frm As String
Dim t As Integer

    frm = DCount("formname", "Forminfo", "formname='" & Me.Name & "'")
    t = Nz(DLookup("times", "Forminfo", "formname='" & Me.Name & "'"), 0)
  
If frm = 0 Then 'Neu form chua mo lan nao
    t = t + 1
    DoCmd.RunSQL "Insert into Forminfo(formname,times) values('" & Me.Name & "'," & t & ")"
    txtT = t  
ElseIf frm > 0 And t < 5 Then 'Cong don so lan mo form
    t = t + 1
    DoCmd.RunSQL "Update FormInfo set Times =" & t
    txtT = t
ElseIf frm > 0 And t = 5 Then ' Neu da mo form duoc 5lan
    MsgBox "This form was opened 5 times" & vbCrLf & vbCrLf & "Expired!!!"
    Cancel = True
End If

End Sub

Và nếu form này mở quá 5 lần thì chương trình sẽ không cho mở form nữa!
[Image: exspire5lan.png]


Demo Download

Nếu bạn muốn mở form quá 5 lần thì chương trình tự thoát ra, bạn thay dòng
Cancel=true
Bằng dòng
Docmd.quit
Chúc thành công!

DownLoad Demo
Để thảo luận thêm về chủ đề này, mời vào topic:
http://thuthuataccess.co.cc/forum/thread-273.html

6/10/10

Ràng buộc số record được nhập vào 1 Form nhập chứng từ

Share by: Noname
Site: http://thuthuataccess.com
----------------------------------------
Như các bạn đã biết, có vài loại chứng từ, nhất là các chứng từ in sẵn khống chế số lượng record được viết ra. ( Vì dụ Hóa đơn đỏ)

Vì vậy, thủ thuật này cho phép ta khống chế số lượng record được nhập trong 1 form.
Để xử lý, chúng ta dùng event before_BeforeInsert Của form như sau:


22/9/10

Tạo Label nhấp nháy

Share by : hungtano - KHPT
Hỏi:
Tôi có 1 form. Tôi muốn khi người dùng mở form này thì thanh tiêu đề của form (form caption) nhấp nháy dòng chữ : dữ liệu đã bị khóa ! Tôi phải làm sao ?

Đáp:
Bạn dùng 2 sự kiện của form: Open và Timer

6/9/10

Tham chiếu các đối tượng trên form con

Hỏi:
Mình có 3 form: form ong noi, form cha, form cháu
form cha là subform của form ong noi, form cháu là subform của form cha
Một query mà có điều kiện là từ 1 textbox thuộc form cháu thì diều kiện đó cú pháp ghi như thế nào? Đại ý là:
vi dụ:
Nếu textbox1 thuộc From ông nội cú pháp: forms!ongnoi.textbox1
Nếu textbox2 thuộc form Cha cú pháp: forms!ongnoi!Cha.form.textbox2
Nếu textbox3 thuộc from cháu thì cú pháp như thế nào?
Xin cảm ơn các bài trả lời của các bạn

13/3/10

Tùy biến chọn file Excel để Import vào Acces

Chú ý, để sử dụng được các đối tượng có sẵn của Office, bạn phải khai báo sữ dụng thư viện Office bằng cách vào cửa sổ VBA, Menu Tool--> references, chọn Microsoft Office 11.0 library. (chọn 10.0 đối với AccessXP)


Và bây giờ bắt đầu:

Tạo 1 form tên là frmTest
Vẽ 1 Textbox tên là txtPath.
Vẽ 1 nút nhấn là cmdSelectfile
Vẽ 1 textBox đặt là txtRange để bạn nhập tên sheet muốn import vào
Vẽ 1 Textbox đặt tên là txtTable để bạn nhập tên Table muốn lưu
Vẽ 1 nút nhấn có tên cmdImport
Tạo 1 module copy đoạn code sau vào:

Function getFile(Tit As String, formatName As String, formatType As String)
Dim dlgOpen As FileDialog
Set dlgOpen = Application.FileDialog(msoFileDialogOpen)
With dlgOpen
.Title = Tit
.Filters.Clear
.Filters.Add formatName, formatType
.AllowMultiSelect = False
result = .Show
If (result <> 0) Then
getFile = Trim(dlgOpen.SelectedItems.Item(1))
End If
End With

End Function

Và lưu thành tên Module 1
Trong event Onclick của nút cmdSelectfile, ta nhập như sau:

Private Sub cmdSelectfile_Click()
Me![txtPath] = getFile("c:\", "Select the Excel File", "*.xls")
End Sub

Trong event Click của nút cmdImport, ta nhập như sau:
Private Sub cmdImport_Click()

DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel8, txtTenTable, txtPath, True, txtRange
MsgBox "import thanh cong"
End Sub

Giờ sử dụng: đầu tiên ta click vào nút cmdSelectfile để chọn file Excel muốn import
Nhập tên Sheet muốn import vào txtRange (ví dụ: Sheet1:A1:H300)
Nhập tên table muốn lưu. (Ví dụ: Table1)
Và nhấn Nút Import
Rồi hưởng thành quả

DownloadDemo

____________________________________________________________________________________
Thảo luận thêm: http://thuthuataccess.co.cc/forum

1/2/10

Mở Form từ listbox, combobox

ạo một combo box từ mẫu biểu nào mà bạn muốn chọn để mở mẫu biểu đầu tiên. Combo box được thiết lập các thuộc tính sau:
Name: List of forms
Data: Value list (để cài đặt thuộc tính Row Suorce type)
Event: [On Enter]
' Đoạn mã xử lý như sau:
Private Sub Listofforms_enter()
   Dim MyDb as Database
   Dim MyContainer as Container
   Dim I as integer
   Dim list as string
   Set MyDb = DBEngine.Workspace(0).Database(0)
   Set My Container = MyDb.Containers("Forms")
   List = " "
   For I=0 to MyContainer.Documents.count - 1
   List = List & MyContainer.Documents(I).name & ";"
   Next I
   me![List of Forms].Row Suorce = Left(List, Len(list)-1)
End sub
' Nhập tiếp thuộc tính After Update của Combo box
Private Sub ListofForms_AfterUpdate()
   Docmd.OpenForm me![ListofForms)
End Sub

Sưu Tầm
____________________________________________________________________________________
Thảo luận thêm: http://thuthuataccess.com/forum

KeyCode các phím trên bàn phím

Một số bạn trong lập trình thường có nhu cầu bắt sự kiện các phím đặt biệt như Shift, ALT, Enter, Tab... và quan trọng là phải biết mã của chúng để chặn sự kiện. Thường ta ứng dụng việc này vào việc gán phím tắt cho 1 số hành động như thêm mới, sửa , xóa, in...
Ta có thể thiết kế 1 form để liệt kê code các phím thông thường như sau:
bạn vẽ lên form 1 ListBox với tên là List1, 1 commandButton tên Command1 và copy code sau vào form.

Đoạn code này sẽ ứng với các mã các ký tự trên bàn phím. Lưu Ý sẽ không lấy được các mã của phím đặt biệt do đó bạn phải nhớ các mã đó như: Enter: 13, Esc: 27, KeyUp -> Key Down: 37 ->40 ...

Code:
'Đoạn code này sẽ liệt kê mã của các ký tự trên bàn phím
Private Sub Command1_Click()
Dim i As Integer

For i = 1 To 255
List1.AddItem i & vbTab & Chr(i)
Next
End Sub

Để lấy được Các phím đặt biệt, bạn vẽ 1 text box. ví dụ tên text1
Ta có sự kiện keydow như sau:

Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
Select Case (KeyCode)

Case "8"
MsgBox "Backspace Keyis " & KeyCode

Case "9"
MsgBox "Tap Key is " & KeyCode

Case "12"
MsgBox "Clear Key is " & KeyCode

Case "13"
MsgBox "Enter Key is " & KeyCode

Case "16"
MsgBox "Shift Key is " & KeyCode

Case "17"
MsgBox "Control Key is " & KeyCode

Case "27"
MsgBox "Esc Key is " & KeyCode

Case "32"
MsgBox "SpaceBar Key is " & KeyCode

Case "112"
MsgBox "F1 Key is " & KeyCode

Case "113"
MsgBox "F2 Key is " & KeyCode

Case "114"
MsgBox "F3 Key is " & KeyCode

Case "115"
MsgBox "F4 Key is " & KeyCode

Case "116"
MsgBox "F5 Key is " & KeyCode

Case "117"
MsgBox "F6 Key is " & KeyCode

Case "118"
MsgBox "F7 Key is " & KeyCode

Case "119"
MsgBox "F8 Key is " & KeyCode

Case "120"
MsgBox "F9 Key is " & KeyCode

Case "121"
MsgBox "F10 Key is " & KeyCode

Case "122"
MsgBox "F11 Key is " & KeyCode

Case "123"
MsgBox "F12 Key is " & KeyCode

Case Else
MsgBox "you is press " & KeyCode

End Select

End Sub

Chú ý: bạn có thể thay các Messege box bằng các đoạn code/lệnh mình muốn khi có sự kiện đó xảy ra trên form textbox đó. Thủ thuật này có thể áp dụng với các Object khác của Access có hỗ trợ event key enter/ keyup/ keydown...
____________________________________________________________________________________
Thảo luận thêm: http://thuthuataccess.com/forum

28/1/10

Bắt lỗi khi nhập liệu sai và người dùng đóng form

Hỏi: Tôi tạo form nhập liệu, và muốn bắt lỗi khi người dùng nhập sai nhưng muốn đóng form thì hiện ra thông báo : " Có dữ liệu bị lỗi, Bạn có muốn đóng không?" Vậy tôi phải bắt lỗi thế nào?

Đáp:
(theo hướng dẫn anh phatnq2002 trên DKT)
Để bắt được lỗi này, bạn phải kết hợp hai sự kiện Form_Error và Form_UnLoad.


Bạn nên tạo một biến dùng chung cho module (nghĩa là khai báo ở vùng Declaration của Form Module), ví dụ Dim hasError As Boolean chẳng hạn

Cái sự kiện bạn bắt bao gồm 2 cái:

1. là Form_Unload: sự kiện này xảy ra trước Close. Do vậy nếu Cancel=True ở đây đồng nghĩa với việc hủy Close.

Private Sub Form_Unload(Cancel As Integer)
If hasError Then
If MsgBox("Có dữ liệu bị lỗi, Bạn có muốn đóng không?", vbYesNo) = vbNo Then
Cancel = True
Else
DoCmd.RunCommand acCmdUndo
End If
End If
End Sub

2. là Form_Error

Private Sub Form_Error(DataErr As Integer, Response As Integer)
Respponse = acDataErrContinue
hasError = True
Select Case DataErr
Case 2169
MsgBox "Co loi khi luu du lieu."
Case Else
MsgBox "Err No." & DataErr & vbCrLf & "Err Mess: " & Error(DataErr)
End Select
End Sub
____________________________________________________________________________________
Thảo luận thêm: http://thuthuataccess.com/forum

14/1/10

Chặn ghi trùng dữ liệu với Validaction

Hỏi:
Trong Validation Ruler của Table hoặc Form có cách nào để chặn không cho ghi dữ liệu trùng không các bạn.
Vì mình có 1 Form nhập thông tin khách hàng,mình không muốn số Mobile trùng nhau ,nên mình muốn đặt Validation Ruler không cho nhập trùng có được không,để nếu mình gõ sai nó báo luôn.Các bạn đừng bảo mình thiết lập khóa chính hay Index (No duplicates) nhé ,vì như thế phải nhập hết thông tin của 1 bản ghi thì nó mới báo trùng,như thế mất công lắm.
 Đáp:
Giả sử bạn có 1 table là Customers(maKH,phone,...), 1 form tên là Customers
Trong form nhập thông tin khách hàng, textbox phone Bạn đặt các thuộc tính như sau:
ValidationRule property:
DLookUp("[Phone]","Customer","[Phone] = '" & [Forms]![Customer]![Phone] & "' and [CusID] <>'" & [Forms]![Customer]![CusID] & "'") Is Null


ValidationText property : "Số phone này đã được nhập , vui lòng xem lại"

Demo

____________________________________________________________________________________
Thảo luận thêm: http://thuthuataccess.com/forum

12/1/10

Sort List theo Alphabe

Mới lang thang tìm thấy 1 đoạn code cho phép Sort 1 Listbox theo Alphabe. Mời mọi người tham khảo, có gì thắc mắc cứ comment hỏi nhé!
Function SortListBox(objListBox As ListBox)
Dim intFirst As Integer
Dim intLast As Integer
Dim intNumItems As Integer
Dim i As Integer
Dim j As Integer
Dim strTemp As String
Dim MyArray() As Variant

'Re-Dim the array
ReDim MyArray(objListBox.ListCount - 1)

'Get upper and lower boundary
intFirst = LBound(MyArray)
intLast = UBound(MyArray)

'Set array values
For i = LBound(MyArray) To UBound(MyArray)
MyArray(i) = objListBox.ItemData(i)
Next i

'Loop through array values to determine sort
For i = intFirst To intLast - 1
For j = i + 1 To intLast
If MyArray(i) > MyArray(j) Then
strTemp = MyArray(j)
MyArray(j) = MyArray(i)
MyArray(i) = strTemp
End If
Next j
Next i

'Remove all items
For i = intLast - 1 To intFirst Step -1
objListBox.RemoveItem i
Next i

'Add all items in order
For i = intFirst To intLast - 1
objListBox.AddItem MyArray(i), i
Next

End Function
 Bạn tạo 1 module mới rồi copy đoạn code trên vào.
tạo 1 form, tạo 1 listbox và 1 nút nhất. Để tên mặc định hết cho nhanh nha.
Row source type của lis bạn chọn Value list
Row Source bạn điền: "Rượu;Socola;Bánh;Bao Bì;Bột Ngọt;Cà Chua;Chanh;Đường;Gạo;Hành;Kem Đánh Răng;Khoai Tây;Mì Gói;Mức;Muối;Ớt;Sữa;Tiêu;Hộp quẹt"

hoặc gì tùy bạn

Trong event click nút nhấn, bạn gọi:
Private Sub Command1_Click()
Call SortListBox(List0)
End Sub

Mời xem demo:
SortList
____________________________________________________________________________________
Thảo luận thêm: http://thuthuataccess.co.cc/forum

Tùy biến kích thước Form


Bạn hoaipnb vừa sưu tầm 1 đoạn code rất thú vị có thể tăng/ giảm kích thước form theo 1 hằng số cho trước trong table.
Tuy nhiên, vì thiếu thông tin nên bạn ấy chưa biết sử dụng thế nào.
Nhân đó mình đã chế biến lại thành 1 form có 2 nút cho phép tăng/giảm kích thước.

Đầu tiên, ta qua cửa sổ VBA thêm 1 module mới. Copy đoạn code sau vào:
Private Sub FormReSize(giatri As Single)

Me.InsideHeight = Me.InsideHeight / giatri
Me.InsideWidth = Me.InsideWidth / giatri
Dim ctrl As Control
For Each ctrl In Me.Controls
ctrl.Height = ctrl.Height / giatri
ctrl.Width = ctrl.Width / giatri
ctrl.Left = ctrl.Left / giatri
ctrl.Top = ctrl.Top / giatri
Next
Me.Repaint

End Sub
Sau đó, trong form, ta tạo hai nút tăng/ giảm kích thước, để cho nhanh mình để tên mặc định . Và gọi thủ tục trên :
Private Sub Command0_Click()
FormReSize 1.1
End Sub

Private Sub Command1_Click()
FormReSize 0.9
End Sub

Bạn có thể thay thế chỗ mình tô đỏ cho phù hợp với sở thích của mình. Mời Xem chương trình demo:
DownLoad
____________________________________________________________________________________
Thảo luận thêm: http://thuthuataccess.com/forum

Trình tự các sự kiện khi mở-đóng 1 form/report

Khi ta mở/ đóng form thì có 1 chuỗi các sự kiện diễn ra, Nếu biết điều đó ta có thể chặn các sự kiện để cài mã vào cho thích hợp.
Theo đó, khi bạn mở form/report thì trình tự  các sự kiện như sau:
Open → Load → Resize → Activate → Current

Khi đóng form, trình tự các sự kiện  như sau:

Unload → Deactivate → Close

 ------------------
Từ điều này cho thấy, nếu ta muốn chỉnh kích thước các đối tượng thì phải gọi trước sự kiện resize. Tức là Load hoặc open, nếu ta gọi sau (active) thì không có tác dụng.
Tương tự, ta muốn gọi 1 form, điền vào 1 tham số và nhảy setforcut 1 form khác, lấy giá trị từ form này thì phải gọi nó ở sự kiện Current. Vì chưa Active thì nó chưa được điền giá trị vào đó.
....
Tương tự, khi đóng form/report. Ta cũng có thể bẫy chặn các sự kiện nhằm lưu hệ thống . Cụ thể khi form không còn hiện nữa (unload), ta vẫn có thể lưu dữ liệu vì nó chưa hoàn toàn close...

21/12/09

Tạo số phiếu tăng theo mẫu : date+STT

 Hôm trước mình giới thiệu thủ thuật tạo số phiếu tăng tự động theo đoạn code của anh phatnq2002  trang Dân Kế Toán
Tạo số chứng từ tăng dần và reset mỗi tháng

Hôm nay, mình giới thiệu đoạn code tạo số chứng từ tăng dần theo mẫu dạng: dd/mm/yy + số TT
Để số thứ tự tự động tăng dần để trường STT là Text. Đồng thời ta thêm 1 trường couter kiểu Number - Integer để đếm số phiếu trong ngày. Trường này sẽ tăng khi bạn nhập phiếu mới với giá trị = max giá trị ngày đó.

15/12/09

Tạo số chứng từ tăng và reset khi sang tháng khác

Hỏi: Tôi muốn chứng từ phát sinh trong tháng thì tăng tự động, qua tháng tính lại từ đầu.

Đáp:

Dim so
so = DMax("SOCT", "table", "Year(ngayhachtoan) = " & Year(Date()) & " AND Month(ngayhachtoan) = " & Month(Date()))
If Nz(so, 0) = 0 Then
soct = "0001"
Else
soct = Right("000" & CInt(so) + 1, 4)
End If


Trả lời của phatnq2002  trang Dân Kế Toán
____________________________________________________________________________________
Thảo luận thêm tại: http://thuthuataccess.co.cc/forum

Thiết kế textbox, command ...sao cho đẹp

Hỏi: Một số form mình thiết kế các textbox, command, combobox theo hình thức thủ công, mặc dù mình đã O kỹ rồi nhưng thấy cũng chưa hài lòng lắm.
Các bạn làm ơn chỉ mình cách làm sao để: canh đều trái phải; kích thước dài, rộng bằng nhau để xem cho đẹp mắt hơn.
Đáp:
Access cung cấp cho ta công cụ Align và Size ( Click chuột phải vào tập các đối tượng đã chọn hoặc vào menu Format)

Đối với Align, ta có: (dùng chỉnh vị trí của đối tượng : Lable, Combobox, Textbox, button...)
Left: Canh theo đối tượng ngoài cùng phía bên trái
Right:Canh theo đối tượng ngoài cùng phía bên phải
Top:Canh theo đối tượng trên cùng
Bottom: Canh theo đối tượng thấp nhất

Đối với size của đối tượng ta có:
To Tallest : Format Chiều Cao của các đối tượng theo đối tượng có chiều cao lớn nhất
To Shortest Makes :Format Chiều cao của các đối tượng theo đối tượng có chiều cao nhỏ nhất
To Widest Makes:Format chiều rộng của các đối tượng theo đối tượng có chiều rộng lớn nhất
To Narrowest :Format chiều rộng của các đối tượng theo đối tượng có chiều rộng nhỏ nhất

To Fit: Format size đối tượng phù hợp với nội dung (chữ hoặc hình) của nó
To Grid: Format size đối tượng vừa với lưới định sẵn của Access
____________________________________________________________________________________
Thảo luận thêm tại: http://thuthuataccess.com/forum

Format có điều kiện cho field trong Access

Hỏi:Tôi có bảng
tblViDu:
TK
111:Tiền mặt Mẹ,
1111:Tiền việt nam Con.
Em muốn là sau khi mở bảng xem ở chế độ Datasheet thì chữ Mẹ thành màu đỏ,Chữ Con thành Màu xanh thì đinh dạng như thế nào?

7/12/09