• Code điều khiển 1 mục trong subform
  • 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  008  ấ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ã:
    Mã:
    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
    thành
    Mã:
    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
    cho phù hợp
    Đã 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ã:
    Mã:
    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
    thành
    Mã:
    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
    cho phù hợp
    Đã 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 form big green mà ko hiểu sao lệnh của mình nó không chạy