Code tạo phím tắt làm hiện danh sách chọn

Liên hệ QC

iVBA

Thành viên mới
Tham gia
5/12/10
Bài viết
29
Được thích
11
Em có 1 ví dụ này muốn nhờ AC viết dùm em code tạo 1 phím tắt làm hiện danh sách hàng hoá để chọn mã hàng.
(câu hỏi cụ thể trong file đính kèm nhé!)
 

File đính kèm

  • GPEb1.rar
    6.2 KB · Đọc: 29
Em có 1 ví dụ này muốn nhờ AC viết dùm em code tạo 1 phím tắt làm hiện danh sách hàng hoá để chọn mã hàng.
(câu hỏi cụ thể trong file đính kèm nhé!)
Theo mình dùng Validation, không cần phím tắc thế. Bạn xem được không, nếu cần vậy thì tính tiếp
 

File đính kèm

  • GPEb1.xls
    23 KB · Đọc: 26
Upvote 0
Theo mình dùng Validation, không cần phím tắc thế. Bạn xem được không, nếu cần vậy thì tính tiếp

Cám ơn viehoai nhiều! Nhưng các này thì em làm được rùi. Em muốn tạo cách kia để nó hiển thị thêm thông tin lựa chọn nữa mà!? viehoai và AC xem có cách khác không giúp em nhé!?
 
Upvote 0
Cám ơn viehoai nhiều! Nhưng các này thì em làm được rùi. Em muốn tạo cách kia để nó hiển thị thêm thông tin lựa chọn nữa mà!? viehoai và AC xem có cách khác không giúp em nhé!?

Theo như câu mầu màu đỏ trên, ý của bạn là sao?
 
Upvote 0
Theo như câu mầu màu đỏ trên, ý của bạn là sao?

Em muốn ở vùng tô màu vàng này, nếu con trỏ chuột ở bất cứ ô nào thì ta nhấn phím F4 thì nó sẽ hiện Form (trong đó có list danh sách) để chọn mã hàng. Khi ta click đúp chuột vào mục hàng nào đó thì nó sẽ cập nhật mã hàng đó vào ô chọn.
(Form này em đã tạo trong VBA rùi - Anh xem nhé!)
 
Upvote 0
Cám ơn viehoai nhiều! Nhưng các này thì em làm được rùi. Em muốn tạo cách kia để nó hiển thị thêm thông tin lựa chọn nữa mà!? viehoai và AC xem có cách khác không giúp em nhé!?
Để hiện ra UserForm chẳng có gì khó (UserForm.Show thôi)... Có điều cái khó nhất là làm sao cho UserForm hiện đúng ngay cell mà ta đang chọn mới là vấn đề
Làm cho bạn thế này:
1> Trong Module
PHP:
Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Declare Function GetDeviceCaps Lib "gdi32" (ByVal hDC As Long, ByVal nIndex As Long) As Long
Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hDC As Long) As Long
PHP:
Sub FormPosition(ByRef frmForm As Object, ByVal rCell As Range)
  Dim PointsPerPixelX As Double
  Dim PointsPerPixelY As Double
  Dim x As Long, y As Long
  Dim rng As Range
  Dim bFound As Boolean
  Set rCell = rCell(1, 1)
  PointsPerPixelX = 72 / GetDeviceCaps(GetDC(0), 88)
  PointsPerPixelY = 72 / GetDeviceCaps(GetDC(0), 90)
  ReleaseDC 0, GetDC(0)
  For x = Int(Application.Left / PointsPerPixelX) To Int(Application.Left / PointsPerPixelX + Application.Width / PointsPerPixelX)
    For y = Int(Application.Top / PointsPerPixelY) To Int(Application.Top / PointsPerPixelY + Application.Height / PointsPerPixelY)
      Set rng = Application.Windows(1).RangeFromPoint(x, y)
      If Not (rng Is Nothing) Then
        bFound = True
        Exit For
      End If
    Next
    If bFound Then Exit For
  Next
  frmForm.StartUpPosition = 0
  frmForm.Top = y * PointsPerPixelY + (rCell.Top - rng.Top)
  frmForm.Left = x * PointsPerPixelX + (rCell.Left - rng.Left)
  frmForm.Show vbModeless
End Sub
PHP:
Sub Auto_Open()
  Application.OnKey "{F4}", "ShowForm"
End Sub
PHP:
Sub ShowForm()
  If Not Intersect(ActiveCell, Range("A2:A20")) Is Nothing And Selection.Count = 1 Then
    DMHH.Hide
    DMHH.StartUpPosition = 0
    FormPosition DMHH, ActiveCell.Offset(, 1)
    DMHH.Show
  End If
End Sub
2> Trong Form
PHP:
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
  ActiveCell.Value = ListBox1.List(ListBox1.ListIndex)
  Unload Me
End Sub
Hãy tự chỉnh thêm nếu có nhu cầu khác
 

File đính kèm

  • GPEb1.xls
    48.5 KB · Đọc: 52
Lần chỉnh sửa cuối:
Upvote 0
Thiết kế của Ndu cho bạn là quá tuyệt vời rồi. Có lẽ nên thêm đoạn code sau trong Form để chọn cứ nhấn enter là được khỏi phải dùng chuột

Mã:
Private Sub ListBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
 If KeyCode = 13 Then
 ActiveCell.Value = ListBox1
  Unload Me
  End If
End Sub
Riêng câu lệnh

ActiveCell.Value = ListBox1.List(ListBox1.ListIndex)

Viết như sau là được rồi

ActiveCell.Value = ListBox1

Bạn lưu ý, đoanj code sau của Ndu chính là code khai báo phí tắt bạn càn tham khảo

Mã:
Sub Auto_Open()
  Application.OnKey "{F4}", "ShowForm"
End Sub


 
Lần chỉnh sửa cuối:
Upvote 0
Web KT
Back
Top Bottom