• Thứ Tư, 05/05/2004 14:42 (GMT+7)

    Câu hỏi :
    Tôi muốn viết đoạn code bằng VBA nhúng vào Excel (macro) để hiển thị hộp thoại trợ giúp (listbox) ngay tại cell đang chọn (giống chế độ hỗ trợ cú pháp trong môi trường lập trình VB, VC++). Tuy nhiên tôi không biết cách xác định vị trí của cell đang chọn.

    Trả lời :

    Bạn có 2 cách chính để hiển thị listbox ngay tại cell đang được chọn:

    1. Bạn để listbox vào một UserForm rồi hiển thị UserForm lên vị trí mong muốn.

    2. Bạn "add" trực tiếp listbox vào Worksheet Excel tại vị trí mong muốn.

    Tùy theo cách nào được dùng mà công thức tính vị trí (x,y) của đỉnh trên trái listbox sẽ hơi khác nhau. Sau đây là macro chứa đoạn code VBA hiển thị listbox theo cách 2:

    'Macro add & hiển thị listbox trong Worksheet

    Sub ListBoxDisp()

    Dim x As Integer

    Dim y As Integer

      ' Tính tọa độ x vị trí dưới phải của cell hiện hành

      x = ActiveCell.Offset(1, 1).Left

      ' Tính tọa độ y vị trí dưới phải của cell hiện hành

      y = ActiveCell.Offset(1, 1).Top

      ' Add 1 listbox vào Worksheet hiện hành tại vị trí x,y

      Set Box = ActiveSheet.ListBoxes.Add(x, y, 100, 50)

      ' Thiết lập nội dung của listbox

      Box.AddItem "Mục 1"

      Box.AddItem "Mục 2"

      Box.AddItem "Mục 3"

    End Sub

    Còn sau đây là macro chứa đoạn code VBA hiển thị listbox theo cách 1 (trong UserForm):

    'Macro hiển thị UserForm chứa listbox lên trên Worksheet

    Sub UserFormDisp()

    Dim x As Integer

    Dim y As Integer

      ' Tính tọa độ x vị trí dưới phải của cell hiện hành

      x = ActiveCell.Offset(1, 1).Left

      ' Tính tọa độ y vị trí dưới phải của cell hiện hành

      y = ActiveCell.Offset(1, 1).Top

      ' Đổi vị trí tương đối x,y thành vị trí tuyệt đối so với vị trí trên trái màn hình

      ...

      UserForm1.StartUpPosition = 0

      ' Thiết lập nội dung của listbox

      UserForm1.ListBox1.AddItem "Muc 1"

      UserForm1.ListBox1.AddItem "Muc 2"

      UserForm1.ListBox1.AddItem "Muc 3"

      ' Thiết lập lại vị trí và kích thước của UserForm

      UserForm1.Move x, y, 100, 50

      ' Hiển thị UserForm

      UserForm1.Show

    End Sub

    Lưu ý trong macro UserFormDisp, lúc đầu ta cũng tính tọa độ (x,y) của điểm dưới phải của cell hiện hành để làm đỉnh trên trái của UserForm, nhưng tọa độ này là tọa độ tương đối so với điểm trên trái của cell đầu tiên trong Worksheet (cell A1), khi người dùng cuộn dọc hay cuộn ngang bảng tính thì cell A1 của bảng tính có thể được hiển thị ở đâu đó trên màn hình (hay ở ngoài màn hình và không thể thấy được). Do đó ta cần phải chuyển đổi tọa độ (x,y) này về dạng tuyệt đối so với điểm trên trái vật lý của màn hình (0,0) trước khi dùng nó để định vị UserForm vì UserForm là đối tượng độc lập với bảng tính, tọa độ của nó là tọa độ tuyệt đối so với điểm trên trái của màn hình máy tính.

    Chuyên mục: Ứng dụng văn phòng