? Lấy index của Validation (1 người xem)

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

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

vumian

Mỗi bậc thang là mỗi Cell
Tham gia
12/3/07
Bài viết
267
Được thích
186
Nghề nghiệp
employee only, not a boss
hi,

Giả sử mình có cái list dùng validation, vậy làm sao mình biết được đang chọn index mấy của nó ?
Thanks
 
vumian đã viết:
hi,

Giả sử mình có cái list dùng validation, vậy làm sao mình biết được đang chọn index mấy của nó ?
Thanks

Hình như không có. Chỉ có cách lấy index ngay trong cái list của nó thôi (Dĩ nhiên không phải là List ảo).
Thân!
 
Chỉ có cách lấy index ngay trong cái list của nó thôi (Dĩ nhiên không phải là List ảo).

Lấy làm sao anh Bắp ơi,
 
vumian đã viết:
Chỉ có cách lấy index ngay trong cái list của nó thôi (Dĩ nhiên không phải là List ảo).

Lấy làm sao anh Bắp ơi,

Bạn thử đưa cái VD của bạn lên xem nào ?? Mình lười làm VD lắm.
Khi đó hình dung dễ hơn.

Thân!
 
Thì nó chỉ cái list binh thuong thoi mà, mình muốn biết khi chọn thì lấy cái index của list, hay là biết đang chọn cái Item nào
 

File đính kèm

Bạn có thể xem ở Comment của ô đó, bằng cách:

PHP:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
 If Not Intersect(Target, Range("B2:B13")) Is Nothing Then
    Dim Rng As Range, Clls As Range
    Set Rng = Sheet1.Range("C9:C19"):             On Error Resume Next
    
    For Each Clls In Rng
        If Clls = Target Then
            Target.ClearComments
            Target.AddComment Text:=" " & Chr(10) & Clls.Offset(, -1)            
        End If
    Next Clls
 End If
End Sub
 
Kinh nghiệm cho thấy rằng dùng các hàm về ERROR sẽ làm chậm máy tính nếu dử liệu nhiều... Nếu như muốn lấy chỉ số INDEX thì dùng MATCH là OK rồi.. nhưng tại sao lại ko là:
Mã:
C7=IF(B7="","",MATCH(B7,List,0))
ANH TUẤN
 
anhtuan1066 đã viết:
Kinh nghiệm cho thấy rằng dùng các hàm về ERROR sẽ làm chậm máy tính nếu dử liệu nhiều... Nếu như muốn lấy chỉ số INDEX thì dùng MATCH là OK rồi.. nhưng tại sao lại ko là:
Mã:
C7=IF(B7="","",MATCH(B7,List,0))
ANH TUẤN

Vâng, tuy nhiên nếu trong list lại có 1 phần tử là rỗng thì lại không được.

Mà thôi, đơn giản mà, chính vì vậy có nhiều cách, cho nên tùy mọi người vậy..

Thân!
 
Bác Bắp ơi,
giả sử mình có được index rồi, mình code cái này, để fill color nó mà hôg chạy

Mã:
Private Sub Workbook_SelectionChange(ByVal Target As Range)
If Range("C7").Value = 1 Then
    Range("B7").Interior.ColorIndex = 7
    Range("B7").Interior.Pattern = xlSolid
End If
End Sub
 
Oh, bạn đặt vào Workbook_SelectionChange (không có sự kiện này)

+ mà hình như bạn ko chọn chính xác sub này nữa. Chắc là bạn ko chọn tự động rùi (tự gõ tên và tham số): muốn chính xác trong VBE -> bạn chọn vào ThisWorkbook (ở khung lề trái mh) -> rồi phía trên toolbar bạn chọn Workbook (mặc định là General) rồi phía bên kia chọn sự kiện chẳng hạn SheetChange --> khi đó VBE tự động thêm sub thích hợp, như sau:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

End Sub
và nếu xét workbook -> bạn phải xét đang ở Sheet nào?

+ Tuy vậy : bài của bạn nên làm như sau:
trong VBE -> bạn chọn vào Sheet2 (ở khung lề trái mh) chẳng hạn trong file vd của bạn đưa lên-> rồi phía trên toolbar bạn chọn WorkSheet (mặc định là General) rồi phía bên kia chọn sự kiện chẳng hạn Change: khi đó VBE sẽ chèn sub tự động: và bạn copy đoạn code sau


PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
  If Not Intersect([B7], Target) Is Nothing Then
    If Range("C7").Value = 1 Then
        Range("B7").Interior.ColorIndex = 7
        Range("B7").Interior.Pattern = xlSolid
    Else
        Range("B7").Interior.ColorIndex = 6
        Range("B7").Interior.Pattern = xlSolid
    End If
  End If
End Sub

tự tìm hiểu code trên xem sao nhé, chỉ khi valiation ở B7 thay đổi thì màu của nó mới thay đổi.
 
Lần chỉnh sửa cuối:
hi TigerTiger,

giả sử mình áp dụng cái này cho nhiều cell chứa list, Vậy mình code sao cho nó pro, hay truyền tham số để những dòng code ngắn hơn ?
 
Vui là chính!

tigertiger đã viết:
và bạn copy đoạn code sau
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
  If Not Intersect([B7], Target) Is Nothing Then
    If Range("C7").Value = 1 Then
        Range("B7").Interior.ColorIndex = 7
        Range("B7").Interior.Pattern = xlSolid
    Else
        Range("B7").Interior.ColorIndex = 6
        Range("B7").Interior.Pattern = xlSolid
    End If
  End If
End Sub
tự tìm hiểu code trên xem sao nhé, chỉ khi valiation ở B7 thay đổi thì màu của nó mới thay đổi.
Mình nghỉ có thể bỏ đi các dòng lệnh IF & sẽ thú vị hơn, VD:
Mã:
       With Range("B7") 
            .Interior.ColorIndex = .Offset(,1) +2
       End With
 
Lần chỉnh sửa cuối:
hi tiger, SA_QD,

- Khi mình bỏ protect ngay cell chứa list, sau đó protect sheet, thì khi chọn index 1 và các index khác, sẽ báo lỗi , ???? hông hiểu vì sao, cell này đang mở mà ???

- Code VBA sao cho validation list trả về vị trí 1 hay vi trí bất kỳ nào mình muốn trong list khi click 1 command thì sao ạ ?
 
Lần chỉnh sửa cuối:
vumian đã viết:
hi TigerTiger,

giả sử mình áp dụng cái này cho nhiều cell chứa list, Vậy mình code sao cho nó pro, hay truyền tham số để những dòng code ngắn hơn ?

Tùy y/c NSD ở mức nào thôi, ví dụ muốn động hóa khi thay đổi hay là khi chạy macro mới thay đổi.
nếu muốn động hóa -> bạn phải cho nào vào sự kiện thay đổi (Worksheet_Change hay Workbook_Change).
Và nếu muốn nhiều ô thì bạn chỉ cần thay đổi [A1] trên thành nhiều ô - hoặc hay hơn là bạn đặt name cho vùng này và thay tên vào Intersect trên ...

vumian đã viết:
hi tiger, SA_QD,

- Khi mình bỏ protect ngay cell chứa list, sau đó protect sheet, thì khi chọn index 1 và các index khác, sẽ báo lỗi , ???? hông hiểu vì sao, cell này đang mở mà ???
Cell đang mở, nhưng bạn đã protect cả chức năng Format cell (định dạng ô) - vì thế lệnh đổi màu nền cell không thực được (lỗi 1004?) - giải pháp là khi protect sheet -> bạn nên tick thêm vào chức năng Format Cell ở phần Allow user .....

vumian đã viết:
- Code VBA sao cho validation list trả về vị trí 1 hay vi trí bất kỳ nào mình muốn trong list khi click 1 command thì sao ạ ?

Câu này hơi khó hỉu, bạn giải thích rõ hơn ?
Còn nếu trong muốn ô nào nhận giá trị thì bạn dùng đoạn code sau gán giá trị cho ô B8 lấy từ list:

PHP:
        With Range("B8")
           .Formula = "=INDEX(LIST,3)"
           .Value = .Value
        End With
 
Tiger ơi,

Cái này mình tìm hoài chưa được, giả sử dùng validation list, khi A1 chọn Index 1 rồi, thì B1,C1.. không còn index 1 xuất hiện trong validation list nữa ? Làm sao vậy Tiger
 
vumian đã viết:
Cái này mình tìm hoài chưa được, giả sử dùng validation list, khi A1 chọn Index 1 rồi, thì B1,C1.. không còn index 1 xuất hiện trong validation list nữa ? Làm sao vậy Tiger
Cái vụ mà bạn nói đã từng làm dc tại đây:
http://www.giaiphapexcel.com/forum/showthread.php?t=3855
Bài số #1... chẳng cần code gì cả
Thời đó tôi vẫn còn ngây ngô quá nên chưa biết cách bỏ bớt cột phụ... Bạn có thể nghiên cứu và cải tiến thêm.. Hic...
ANH TUẤN
 
anhtuan1066 đã viết:
Cái vụ mà bạn nói đã từng làm dc tại đây:
http://www.giaiphapexcel.com/forum/showthread.php?t=3855
Bài số #1... chẳng cần code gì cả
Thời đó tôi vẫn còn ngây ngô quá nên chưa biết cách bỏ bớt cột phụ... Bạn có thể nghiên cứu và cải tiến thêm.. Hic...
ANH TUẤN

Rất hay, nhưng hạn chế mới đúng với số - và 2 cột phụ , theo tigertiger chắc giảm được cột phụ -> chỉ còn 1 cột phụ thôi,

chúng ta nên phát triển tiếp...?
 
hi all,

Sau một hồi vọc phá, nhìn lại cái validation list, bề rộng nó lớn hơn cái bề rộng của cell chứa nó luôn, kỳ cục thiệt, bác nào có kinh nghiệm giúp em cái vụ này , hix
 
vumian đã viết:
hi all,

Sau một hồi vọc phá, nhìn lại cái validation list, bề rộng nó lớn hơn cái bề rộng của cell chứa nó luôn, kỳ cục thiệt, bác nào có kinh nghiệm giúp em cái vụ này , hix

Thế thì lạ quá, bạn mô tả rõ đi, hay upload file đó lên xem sao,
 
Web KT

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

Back
Top Bottom