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
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,
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
vumian đã viết: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
C7=IF(B7="","",MATCH(B7,List,0))
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à:
ANH TUẤNMã:C7=IF(B7="","",MATCH(B7,List,0))
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
và nếu xét workbook -> bạn phải xét đang ở Sheet nào?Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
End Sub
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
Mình nghỉ có thể bỏ đi các dòng lệnh IF & sẽ thú vị hơn, VD:tigertiger đã viết:và bạn copy đoạn code sautự 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.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
With Range("B7")
.Interior.ColorIndex = .Offset(,1) +2
End With
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 ?
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: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à ???
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 ạ ?
With Range("B8")
.Formula = "=INDEX(LIST,3)"
.Value = .Value
End With
Cái vụ mà bạn nói đã từng làm dc tại đây: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
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
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