Hỏi về RefEdit trong VBA

Liên hệ QC

nvson

Geotechnics
Thành viên danh dự
Tham gia
20/9/06
Bài viết
793
Được thích
1,285
Nghề nghiệp
ĐCTV - ĐCCT
Trong frmUser gồm có:
1 refEdit (name: refData)
1 ComboBox (name: cboColumn)
....
Bài toán đặt ra của tôi là khi tôi dùng chuột chọn vùng dữ liệu ở refData thì khi click vào cboColumn trong đó phải hiển thị toàn bộ tên cột mà tôi đã chọn. Ví dụ: nếu tôi chọn vùng dữ liệu là $A$5:$BC$10 thì trong cboColumn phải gồm các Item là A, B, C, ... , BC. Tức là sau khi tôi chọn vùng dữ liệu thì trong cboColumn cũng phải tự động thay đổi theo.
(Phải dùng sự kiện gì ở cboColumn?)
Thanks.
 
Dear nvson,
-----------
Theo mình thì sử dụng sự kiện cboColumn_DropButtonClick() để "AddItems" các Column dựa vào refData.Value. Để "Add" được các "Item" vào cboColumn bạn có thể dùng vòng lặp với bước lặp là số cột được chọn, xác định bởi giá trị tham chiếu của refData.
Sau đây là code minh hoạ:
Mã:
Private Sub cboColumn_DropButtonClick()
Dim myRange As Range
Dim lngFirstColumn As Long, lngColumnCount As Long
Dim i As Long
Set myRange = Range(refData.Value)
With myRange
    lngFirstColumn = .Column
    lngColumnCount = .Columns.Count
    cboColumn.Clear
    For i = lngFirstColumn To lngColumnCount
        cboColumn.AddItem Chr(64 + i)
    Next
End With
End Sub
Bạn cần bổ xung một số xử lý để kiểm tra refData.Value hợp lệ.
 
Lần chỉnh sửa cuối:
Upvote 0
Xin chân thành cảm ơn anh Cường đã giúp đỡ.
Nhưng sao tôi Test lúc thì ở cboColumn hiện ra các Item, lúc thì rỗng.
Đặc biệt là nếu vùng chọn từ cột AA trở đi thì không được.
Tôi dùng thuật toán khác để lấy tên cột.
 
Lần chỉnh sửa cuối:
Upvote 0
Dear nvson,
-----------
Đoạn code trên chỉ là ví dụ, mình chỉ minh hoạ cách sử dụng thủ tục sự kiện và phương thức AddItem. Đúng là việc đưa tên các cột (không phải là Index) thì phải bằng giải thuật khác. Có nhiều cách để làm điều này, theo mình, cách sau đây là đơn giản nhất:
Mã:
    Dim strColumn As String
    For i = lngFirstColumn To lngFirstColumn + lngColumnCount - 1
        strColumn = Mid(Cells(, i).Address, 2, Len(Cells(, i).Address) - 3)
        cboColumn.AddItem strColumn
    Next
 
Upvote 0
Web KT
Back
Top Bottom