• VBA xác định vị trí con trỏ đang Setfocus
  • VBA xác định vị trí con trỏ đang Setfocus

    Minh Tiên > 05-09-17, 11:58 AM

    Xin chào cả nhà !

    Để xác định vị trí Setfocus (Con trỏ hiện trạng) Tiên đang dùng một Biến strContro trên form.
    Cứ tại mỗi đối tượng (ObjName) có Setfocus trên form, tại thủ tục OnGotFocus Tiên gán strContro = Me.ObjName.Name và xác định vị trí cuối cùng (hiện tại) của con trỏ thông qua biến strContro.

    Xong cách này có vẻ củ chuối quá, hơn nữa tại mỗi OnGotFocus của ObjName phải gán một lần --> Nhiều quá.

    Nhờ cả nhà chỉ giáo, đoạn VBA nào xác định được ngay vị trí con trỏ đang SetFocus không ?

    Cảm ơn nhiều !
  • RE: VBA xác định vị trí con trỏ đang Setfocus

    tranthanhan1962 > 05-09-17, 01:51 PM

    Có phải bạn muốn đổi màu control khi control nào được GotFocus và trở về màu bình thường khi mất focus?
  • RE: VBA xác định vị trí con trỏ đang Setfocus

    ongke0711 > 05-09-17, 02:19 PM

    Dùng thuộc tính .ActiveControl thử xem.
    - Form: Me.ActiveControl
    - Screen.ActiveControl

    Vd: 
       Dim strContro As String
           strContro = Me.ActiveControl.Name

    Hoặc

      Dim ctlCurControl As Control
      Dim strContro As String
          Set ctlCurControl = Me.ActiveControl
          strControl = ctlCurControl.Name
  • RE: VBA xác định vị trí con trỏ đang Setfocus

    Minh Tiên > 05-09-17, 04:38 PM

    (05-09-17, 01:51 PM)tranthanhan1962 Đã viết: Có phải bạn muốn đổi màu control khi control nào được GotFocus và trở về màu bình thường khi mất focus?

    Thanks A Ân quan tâm.

    Tiên làm GotFocus và LostForcus thì OK rồi.
    Khi kết hợp MoveMouse thì bất ổn vì khi Move vào một đối tượng nào đó thì nó xóa luôn Format của GotFocus.
    Giờ thì Tiên đã kết hợp được rồi.
    Xong đối với Focus thì Tiên dùng code:
    Mã:
    Public Function Focus(ByRef frm As Form)

       Dim Ctl As Control
       For Each Ctl In frm
           If InStr(1, Ctl.Tag, "Focus") > 0 Then
               If TypeOf Ctl Is CommandButton Or TypeOf Ctl Is TextBox Or TypeOf Ctl Is ComboBox Then
                   Ctl.OnGotFocus = "=HandleFocus([" & Ctl.Name & "], True)"
                   Ctl.OnLostFocus = "=HandleFocus([" & Ctl.Name & "], False)"
               End If
           End If
       Next
       
    End Function
    Load 1 lần cho Form. (OnOpen)

    Còn đối với MoveMouse hiện không biết cách nào để Load 1 lần cho Form (Phải thông qua từng Obj).
     Nhờ A cùng các Pro chỉ giáo thêm.

    Thanks All !