-
Code điều khiển 1 mục trong subform
toidjtjmtoi > 19-10-17, 03:28 PM
Mình có 1 main form là A
Sub form là B
Mình muốn tạo 1 nút trên form main A nút A1 khi ấn nút đó thì nó chỉ khóa hoặc làm thay đổi giá trị 1 ô trong Sub form B thôi thì mình dùng hàm như thế nào
Ví dụ ô B1
Code của mình như này
Private Sub soluongnknvl_AfterUpdate()
If (soluongnknvl.Value > Text19.Value) Then text19 ở subfrom
DoCmd.RunMacro "mcthongbao.quasoluong"
Me.lotnumber.Locked = True Me.lotnumber ở subfrom
soluongnknvl.SetFocus
End If
End Sub
Sau khi mình ấn ok ở thông báo thì nó ko setfocus vào ô mình cần và những cái lệnh bên dưới không có tác dụng
Mình đoán là do những nút kia là ở subform mà mình đang làm việc ở main from
Thanks -
RE: Code điều khiển 1 mục trong subform
tranthanhan1962 > 19-10-17, 04:54 PM
Bạn có 2 event để xử lý việc soluongnknvl > Text19
1/ Event trên sub from
Private Sub soluongnknvl_AfterUpdate()
If (soluongnknvl.Value > Text19.Value) Then text19 ở subfrom
DoCmd.RunMacro "mcthongbao.quasoluong"
Me.lotnumber.Locked = True Me.lotnumber ở subfrom
End If
End Sub
Bỏ lệnh soluongnknvl.SetFocus ra khỏi event này. Bạn xem sau khi gõ xong giá trị con trỏ nhảy qua control nào (ví dụ text19). Bạn viết thêm 1 event vào text19
Private Sub text19_Enter()
If (soluongnknvl.Value > Text19.Value) Then
DoCmd.GoToControl "soluongnknvl"
End If
End Sub
1/ Event trên main from Giả sử nút lệnh trên form A tên N và B1 là tên control subform chứa form B (phòng ngừa bạn đặt tên subform khác tên form)
Private Sub N_Click()
If [B1].[Form]![soluongnknvl] > [B1].[Form]![Text19] Then
DoCmd.RunMacro "mcthongbao.quasoluong"
Me.B1.SetFocus
Me.B1.Form.soluongnknvl.SetFocus
End If
End Sub -
RE: Code điều khiển 1 mục trong subform
toidjtjmtoi > 20-10-17, 03:07 PM
(19-10-17, 04:54 PM)tranthanhan1962 Đã viết: Bạn có 2 event để xử lý việc soluongnknvl > Text19
1/ Event trên sub from
Private Sub soluongnknvl_AfterUpdate()
If (soluongnknvl.Value > Text19.Value) Then text19 ở subfrom
DoCmd.RunMacro "mcthongbao.quasoluong"
Me.lotnumber.Locked = True Me.lotnumber ở subfrom
End If
End Sub
Bỏ lệnh soluongnknvl.SetFocus ra khỏi event này. Bạn xem sau khi gõ xong giá trị con trỏ nhảy qua control nào (ví dụ text19). Bạn viết thêm 1 event vào text19
Private Sub text19_Enter()
If (soluongnknvl.Value > Text19.Value) Then
DoCmd.GoToControl "soluongnknvl"
End If
End Sub
1/ Event trên main from Giả sử nút lệnh trên form A tên N và B1 là tên control subform chứa form B (phòng ngừa bạn đặt tên subform khác tên form)
Private Sub N_Click()
If [B1].[Form]![soluongnknvl] > [B1].[Form]![Text19] Then
DoCmd.RunMacro "mcthongbao.quasoluong"
Me.B1.SetFocus
Me.B1.Form.soluongnknvl.SetFocus
End If
End Sub
Mình thử rồi , nó vẫn vượt qua đượcấn tab là nó nhảy sang ô khác với không focus vào ô mình cần + không khóa ô lotnumber vào
-
RE: Code điều khiển 1 mục trong subform
tranthanhan1962 > 21-10-17, 02:15 AM
post csdl lên đi bạn -
RE: Code điều khiển 1 mục trong subform
toidjtjmtoi > 21-10-17, 12:48 PM
https://www.mediafire.com/file/ygb1g1mdu...se15.accdb
File đây bạn ơi
Mình muốn là nếu nhập số lượng > số lượng đơn hàng thì không cho nhập
Thanks -
RE: Code điều khiển 1 mục trong subform
tranthanhan1962 > 22-10-17, 07:30 AM
1/File của bạn khác với các điều bạn hỏi nên mình có sửa lại đôi chút. Hai form donhang và nhapkho bạn thiết kế datasheet nên tôi phải chuyển lại sigle form và continuous.
2/Không cần phải thiết kế nút kiểm tra trên mainform chỉ cần xử lý trực tiếp trên control soluongnhapkho của sub form là đủ. Do soluongnhapkho là control cuối nên nó sẽ nhảy xuống record mới phải trả về last record rồi mới chuyển focus trở lại nó. (Lệnh focus sẽ không thực hiện trên control đang được focus)
3/Vì tôi làm trên access 64 bit nên module msgboxtiengviet sẽ bị lỗi nếu bạn sử dụng access 32 bit. Vì vậy nếu bạn sử dụng access 32 bit bạn đổi đoan mã:
thànhMã:Private Declare PtrSafe Function GetActiveWindow Lib "user32" () As LongPtr
Private Declare PtrSafe Function MessageBoxW Lib "user32" (ByVal hwnd As LongPtr, ByVal lpText As String, ByVal lpCaption As String, ByVal wType As LongPtr) As Long
cho phù hợpMã:Private Declare Function GetActiveWindow Lib "user32" () As Long
Private Declare Function MessageBoxW Lib "user32" (ByVal hwnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal wType As Long) As Long
Đã xử lý -
RE: Code điều khiển 1 mục trong subform
toidjtjmtoi > 23-10-17, 10:20 AM
(22-10-17, 07:30 AM)tranthanhan1962 Đã viết: 1/File của bạn khác với các điều bạn hỏi nên mình có sửa lại đôi chút. Hai form donhang và nhapkho bạn thiết kế datasheet nên tôi phải chuyển lại sigle form và continuous.
2/Không cần phải thiết kế nút kiểm tra trên mainform chỉ cần xử lý trực tiếp trên control soluongnhapkho của sub form là đủ. Do soluongnhapkho là control cuối nên nó sẽ nhảy xuống record mới phải trả về last record rồi mới chuyển focus trở lại nó. (Lệnh focus sẽ không thực hiện trên control đang được focus)
3/Vì tôi làm trên access 64 bit nên module msgboxtiengviet sẽ bị lỗi nếu bạn sử dụng access 32 bit. Vì vậy nếu bạn sử dụng access 32 bit bạn đổi đoan mã:
thànhMã:Private Declare PtrSafe Function GetActiveWindow Lib "user32" () As LongPtr
Private Declare PtrSafe Function MessageBoxW Lib "user32" (ByVal hwnd As LongPtr, ByVal lpText As String, ByVal lpCaption As String, ByVal wType As LongPtr) As Long
cho phù hợpMã:Private Declare Function GetActiveWindow Lib "user32" () As Long
Private Declare Function MessageBoxW Lib "user32" (ByVal hwnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal wType As Long) As Long
Đã xử lý
Cảm ơn bạn mình làm được rồi , mình là chỉ khác là bắt điều kiện ở ngay subform , giờ mình mới biết bắt điều kiện ở main formmà ko hiểu sao lệnh của mình nó không chạy