Hỏi về tự động hạn chế thanh cuộn trong Danh sách Combox? (1 người xem)

  • Thread starter Thread starter KUMI
  • Ngày gửi Ngày gửi
Liên hệ QC

Người dùng đang xem chủ đề này

KUMI

Bụi phấn
Tham gia
17/1/12
Bài viết
564
Được thích
571
Xin Chào Thầy Cô và Anh Chị trong GPE!
Em có một bài toán như đã viết ở tiêu đề.Cụ thể Chi tiết trong file kèm ạ.
Thầy Cô và Anh chị xem có cách nào không giúp em với ạ!
Em xin cảm ơn!
 

File đính kèm

Bạn chỉ cần sửa cái Name Dta của bạn thành:

=OFFSET($A$8,,,COUNT($A$8:$A$65536),2)

là được rồi.

Nhưng dùng Name thật nguy hiểm, lỡ có ô trống giữa các ô có giá trị thì chuyện sót ô là chuyện đương nhiên.

Dùng name phải đảm bảo giữa các ô không có ô trống nào hết.
 
Lần chỉnh sửa cuối:
Upvote 0
Ôi,đúng ròi rồi Cảm ơn Thầy.
Bài này chỉ lấy mã số thôi nên có thể dùng hàm COUNT được. Nhưng nếu em không phải lấy giá trị số nữa mà là bất kỳ thì phải làm sao ạ Thầy?
Và xin hỏi thầy thêm ngàoi cách dùng name ra thì ta có thể làm như thế nào khác ạ.
Mong Thầy và mọi người chỉ bảo thêm ạ!
Xin cảm ơn!
 
Upvote 0
Ôi,đúng ròi rồi Cảm ơn Thầy.
Bài này chỉ lấy mã số thôi nên có thể dùng hàm COUNT được. Nhưng nếu em không phải lấy giá trị số nữa mà là bất kỳ thì phải làm sao ạ Thầy?
Và xin hỏi thầy thêm ngàoi cách dùng name ra thì ta có thể làm như thế nào khác ạ.
Mong Thầy và mọi người chỉ bảo thêm ạ!
Xin cảm ơn!
Dùng mảng! Lọc lấy giá trị nào khác rỗng là được thôi! Nhưng dùng mãng thì không có tiêu đề đâu đấy!
 
Upvote 0
Dùng mảng! Lọc lấy giá trị nào khác rỗng là được thôi! Nhưng dùng mãng thì không có tiêu đề đâu đấy!
ỐI DỜI,, Vậy Em thích dùng thế này cho đẹp ạ!
Nhưng mà nếuThầy có nhã hứng thì hãy chia sẻ kiến thức đi Thầy. Đâu riêng gì em quan tâm đến vấn đề này đâu ạ. hihi Tks Thầy.
(Thầy ơi - Suỵt ngoài lế tí nhé ^^...Thầy chưa lấy zợ ạ..hôm trước em xem ảnh Thầy trong buổi sinh nhật GPE cái đoạn cặp đôi hoàn hảo đó, em cũng thấy 2 người hợp nhau lắm ạ..hihi)
 
Upvote 0
ỐI DỜI,, Vậy Em thích dùng thế này cho đẹp ạ!
Nhưng mà nếuThầy có nhã hứng thì hãy chia sẻ kiến thức đi Thầy. Đâu riêng gì em quan tâm đến vấn đề này đâu ạ. hihi Tks Thầy.
(Thầy ơi - Suỵt ngoài lế tí nhé ^^...Thầy chưa lấy zợ ạ..hôm trước em xem ảnh Thầy trong buổi sinh nhật GPE cái đoạn cặp đôi hoàn hảo đó, em cũng thấy 2 người hợp nhau lắm ạ..hihi)

Má ơi, bấm trả lời hơn 15 phút mới mở được!

Bạn cần có một cái hàm, với hàm này bạn lọc cột đầu tiên của mảng dữ liệu với các giá trị khác rỗng.

[GPECODE=vb]Function FirstColumnNonBlank(ByVal sArray, ByRef FilterArr()) As Boolean
Dim ArrRng As Variant
ArrRng = sArray
If IsArray(sArray) Then
Dim NumArr(), c As Long, r As Long, u As Long
u = UBound(ArrRng, 1): l = UBound(ArrRng, 2)
ReDim NumArr(1 To 1)
For r = 1 To u
If ArrRng(r, 1) <> "" Then
n = n + 1
ReDim Preserve NumArr(1 To n)
NumArr(n) = r
End If
Next
If n Then
ReDim FilterArr(1 To n, 1 To l)
For r = 1 To n
For c = 1 To l
FilterArr(r, c) = ArrRng(NumArr(r), c)
Next
Next
FirstColumnNonBlank = True
End If
End If
End Function[/GPECODE]

Sau đó, bạn làm thêm một thủ tục sau để tạo list cho ComboBox:

PHP:
Sub ComboList()
    Dim FilArr()
    If FirstColumnNonBlank(Range(Sheet1.[A8], Sheet1.[A65536].End(3)).Resize(, 2), FilArr) Then
        Sheet1.ComboBox1.List = FilArr
    End If
End Sub

Khi bạn mở file, bạn cần phải có code kích hoạt list:

Trong ThisWorkbook bạn có thủ tục:

PHP:
Private Sub Workbook_Open()
    Call ComboList
End Sub

Tương tự, khi chọn vào Sheet1 bạn cũng phải có mục này (phòng hờ cho chắc ăn):

PHP:
Private Sub Worksheet_Activate()
    Call ComboList
End Sub

Cũng trong sheet1 bạn có thêm 2 thủ tục:

Mã:
Private Sub ComboBox1_Change()
    If ComboBox1.MatchFound Then
        Application.EnableEvents = False
            ActiveCell = ComboBox1
        Application.EnableEvents = True
    End If
End Sub


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Address = "$E$8" Then
        With Me.ComboBox1
            .Visible = True
            .Top = Target.Top
            .Left = Target.Left
            .Width = Target.Width
            .Height = Target.Height
            .Activate
        End With
    Else
        Me.ComboBox1.Visible = False
    End If
End Sub

Trong Properties của ComboBox, bạn bỏ cái LinkCells, và chọn ColumnHeads=False

Giờ bạn có thể xem file được rồi đấy.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Bạn sửa cái hàm này một chút nha! Thay hàm cũ bằng hàm dưới đây:
[GPECODE=vb]Function FirstColumnNonBlank(ByVal sArray, ByRef FilterArr()) As Boolean
On Error GoTo ExitFunction
Dim ArrRng As Variant
ArrRng = sArray
If IsArray(ArrRng) Then
Dim NumArr(), c As Long, r As Long, u As Long
u = UBound(ArrRng, 1): l = UBound(ArrRng, 2)
ReDim NumArr(1 To 1)
For r = 1 To u
If ArrRng(r, 1) <> "" Then
n = n + 1
ReDim Preserve NumArr(1 To n)
NumArr(n) = r
End If
Next
If n Then
ReDim FilterArr(1 To n, 1 To l)
For r = 1 To n
For c = 1 To l
FilterArr(r, c) = ArrRng(NumArr(r), c)
Next
Next
FirstColumnNonBlank = True
End If
Else
ArrRng = Array(ArrRng)
If ArrRng(0) <> "" Then
FilterArr = ArrRng
FirstColumnNonBlank = True
End If
End If
ExitFunction:
End Function[/GPECODE]
 
Upvote 0
Xin Chào Thầy Cô và Anh Chị trong GPE!
Em có một bài toán như đã viết ở tiêu đề.Cụ thể Chi tiết trong file kèm ạ.
Thầy Cô và Anh chị xem có cách nào không giúp em với ạ!
Em xin cảm ơn!

Bạn chỉ cần làm 1 động tác đơn giản: SỬA NAME
Name cũ:
Mã:
Dta =OFFSET([COLOR=#ff0000]Sheet1[/COLOR]!$A$8,,,COUNTA([COLOR=#ff0000]Sheet1[/COLOR]!$A$[COLOR=#ff0000]7[/COLOR]:$A$[COLOR=#ff0000]23[/COLOR]),2)
Sửa thành
Mã:
Dta =OFFSET([COLOR=#ff0000]Sheet2[/COLOR]!$A$8,,,COUNTA([COLOR=#ff0000]Sheet2[/COLOR]!$A$[COLOR=#ff0000]8[/COLOR]:$A$[COLOR=#ff0000]1000[/COLOR]),2)
Xong chuyện
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn chỉ cần làm 1 động tác đơn giản: SỬA NAME
Name cũ:
Mã:
Dta =OFFSET([COLOR=#ff0000]Sheet1[/COLOR]!$A$8,,,COUNTA([COLOR=#ff0000]Sheet1[/COLOR]!$A$[COLOR=#ff0000]7[/COLOR]:$A$[COLOR=#ff0000]23[/COLOR]),2)
Sửa thành
Mã:
Dta =OFFSET([COLOR=#ff0000]Sheet2[/COLOR]!$A$8,,,COUNTA([COLOR=#ff0000]Sheet2[/COLOR]!$A$[COLOR=#ff0000]8[/COLOR]:$A$[COLOR=#ff0000]1000[/COLOR]),2)
Xong chuyện

Hàm đếm số phải là COUNT chứ không phải COUNTA thầy iu ơi! Vã lại nếu nếu bằng hàm COUNTA thì ô có chứa công thức nó cộng vào nốt!

Cái vụ name thì ở bài 2 em đã nói rồi, còn code là thêm sau thôi.
 
Upvote 0
Hàm đếm số phải là COUNT chứ không phải COUNTA thầy iu ơi! Vã lại nếu nếu bằng hàm COUNTA thì ô có chứa công thức nó cộng vào nốt!

Cái vụ name thì ở bài 2 em đã nói rồi, còn code là thêm sau thôi.

Vấn đề là đồng chí đặt name trên sheet1 còn tôi đặt name từ dữ liệu nguồn luôn (sheet2) nên sẽ có sự khác biệt
 
Upvote 0
Vấn đề là đồng chí đặt name trên sheet1 còn tôi đặt name từ dữ liệu nguồn luôn (sheet2) nên sẽ có sự khác biệt

Người đưa lên cái file giã định như thế, nếu như với sheet1 họ dùng công thức gì đó mà lọc điều kiện từ sheet2 thì xem như cái combobox nhận tất cả dữ liệu từ sheet nguồn luôn sao Thầy?
 
Upvote 0
Người đưa lên cái file giã định như thế, nếu như với sheet1 họ dùng công thức gì đó mà lọc điều kiện từ sheet2 thì xem như cái combobox nhận tất cả dữ liệu từ sheet nguồn luôn sao Thầy?

Tức là: Dữ liệu đưa vậy thì tôi làm vậy (cho gọn)... Nếu dữ liệu khác hơn thì tôi làm... khác
Vậy thôi... ngu sao mà tham chiếu vào vùng chứa công thức?
Ẹc... Ẹc...
 
Upvote 0
Tức là: Dữ liệu đưa vậy thì tôi làm vậy (cho gọn)... Nếu dữ liệu khác hơn thì tôi làm... khác
Vậy thôi... ngu sao mà tham chiếu vào vùng chứa công thức?
Ẹc... Ẹc...

Nhưng cái bảng ở sheet1 toàn là công thức thôi! có những công thức cho ra giá trị "" đấy thôi! hic hic

Tại làm mảng cho vui, chứ thật ra dùng AutoFilter, lọc giá trị khác rỗng, copy qua vùng khác có tiêu đề luôn cho chắc ăn, rồi gán vào ListFillrange cho tiện!
 
Upvote 0
Upvote 0
Người đưa lên cái file giã định như thế, nếu như với sheet1 họ dùng công thức gì đó mà lọc điều kiện từ sheet2 thì xem như cái combobox nhận tất cả dữ liệu từ sheet nguồn luôn sao Thầy?
Trước hết xin cảm ơn 2 Thầy đã trao đổi và giúp đỡ ạ.
Đúng như Thầy Nghĩa nói Sheet2 của em là Sheet Cơ Sở dữ liệu (CSDL) bao gồm rất nhiều mã số và Họ tên.
Nhưng trong cái bảng CSDL đó em muốn tách các tổ ra do vậy Em phải dùng công thức đại diện kiểu như là ở Sheet1 để phân loại từng nhóm.Chính vì vậy vùng dữ liệu trong Combox của Em phải là vùng có công thức.
Vấn đề là em đã dùng Hàm COUNT để lấy giá trị số như Thầy Nghĩa nói là đã ổn rồi ạ.
Nhưng Em muốn giả định thêm Giá trị Em muốn lấy đó không phải là số nữa mà là tổng hợp các thể loại giá trị.
Ngòai vấn đề sử dụng VBA ra thì còn cách nào dùng công thức nữa không ạ!
--------------------------------
Xin Cảm ơn 2 Thầy rất nhiều! ^_^
 
Upvote 0
Ngòai vấn đề sử dụng VBA ra thì còn cách nào dùng công thức nữa không ạ!
--------------------------------
Xin Cảm ơn 2 Thầy rất nhiều! ^_^

Cách thì có thể nói là "cả rừng"... với điều kiện phải thấy dữ liệu thật mới quyết định được đó là cách nào
 
Upvote 0
Thưa Thầy sở dĩ Em luôn đưa kiểu dạng dữ liệu minh hoạ là bởi vì Em hay hỏi các vấn đề liên quan đến công việc hàng ngày.
Đã nói đến công việc thì đa phần là dữ liệu của công ty. Mà công ty Em nghiêm cấm việc trao đổi dữ liệu ra bên ngoài mặc dù dữ liệu đó không quan trong.
Vì vấn đề đó mà nhiều khi Em rất ngại và rất mất thời gian để làm một ví dụ minh hoạ cho dữ liệu thật.Do vậy Mong Thầy và mọi người hiểu cho vấn đề đó ạ.
Và để cho chủ để này được tiếp tục đi đến kết quả cuối cùng theo nguyện vọng của Em. Thì em sẽ cố gắng tạo sớm một dữ liệu minh hoạ không khác gì dữ liệu thật để up lên ạ!
Xin tạm biệt Thầy và Hẹn gặp Thầy sau ạ!
 
Upvote 0

Bài viết mới nhất

Back
Top Bottom