Một kiểu Highlight đơn giản (1 người xem)

Liên hệ QC

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

anhtuan1066

Thành viên gạo cội
Tham gia
10/3/07
Bài viết
5,802
Được thích
6,912
Hảy mở file, click chọn bất cứ cell nào trong bảng dử liệu rồi bấm F9... nguyên dòng ấy sẽ dc Highlight... Khá thú vị là file này chẳng dùng macro... (ăn cắp công nghệ của file về biểu đồ động)...
Các bạn thử xem!
ANH TUẤN
 

File đính kèm

Ở sheet dữ liệu em thêm đoạn mã này vào thì khỏi cần bấm F9.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Calculate
End Sub
 
Ái dà... nếu thêm mã vào thì nói làm gì nữa... Ý tôi ở đây là KO DÙNG VBA... Mỗi món nó có cái độc chiêu của nó chứ... hi.. hi...
ANH TUẤN
 
À vâng, nhưng em thấy đâu cần ô O1 và cột P mà vẫn Highlight được bảng dữ liệu, chỉ cần chỉnh lại CF.
 
Hi... hi... thế bạn làm thế nào nếu ko có cell O1 và cột P? Tôi chưa biết à nha! Bật mí đễ học hỏi xem nào?
ANH TUẤN
 
anhtuan1066 đã viết:
Hảy mở file, click chọn bất cứ cell nào trong bảng dử liệu rồi bấm F9... nguyên dòng ấy sẽ dc Highlight... Khá thú vị là file này chẳng dùng macro... (ăn cắp công nghệ của file về biểu đồ động)...
Các bạn thử xem!
ANH TUẤN

Em không hiểu Ô O1 và cộ P có ý nghĩa như thề nào? anh có thể giải thích thêm được không ?
CATHY
 
Mộ kiểu highlight đơn giản

duongsatdn đã viết:
Ở sheet dữ liệu em thêm đoạn mã này vào thì khỏi cần bấm F9.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Calculate
End Sub

Sao em đánh mã code như trên rồi trờ về Excel chạy thử nhưng không thấy highlight, chắc em làm còn thiếu cái gì đó, chị có thể hướng dẫn thêm được không ? Cái này em thấy rất tiện trong công việc
cảm ơn chị
CATHY
 
Chính xác... tôi cũng vừa mới nghĩ ra... cám ơn duongsatdn gợi ý... hi.. hi..
Với CATHY.. cái công thức ấy ko quan trọng lắm... Mấu chốt nằm trong conditional formating bạn à! Vào đó xem sẽ hiểu
ANH TUẤN
 
anhtuan1066 đã viết:
Chính xác... tôi cũng vừa mới nghĩ ra... cám ơn duongsatdn gợi ý... hi.. hi..
Với CATHY.. cái công thức ấy ko quan trọng lắm... Mấu chốt nằm trong conditional formating bạn à! Vào đó xem sẽ hiểu
ANH TUẤN

Cái HighLight này chỉ là đơn giản về cách làm thôi, tuy nhiên vấn đề em thắc mắc là không biết dùng CF có gây nặng File hay không, cì CF là công thức, nó phải quét tất cả vùng đó nên em sợ . . ..

Tuy nhiên đây cũng là 1 điều đáng để học hỏi. Và sẽ hiệu quả hơn khi có sự kiện selection_change đi kèm (nễu mỗi lần di chuyển mà nhấn F9 thì hơi mất công)

Thân!
 
Từ từ thử sẽ biết mà... Nhân tiện là có thể làm luôn =COLUMN()=CELL("COL") cho Highlight luôn cột nhỉ...
Nhớ có lần lượm dc code của nước ngoài, chúng nó Highlight dòng cột nhìn thấy mê... giờ thì ta làm dc rồi nhé... Nếu kết hợp với code Calculate nữa thì thành 1 code hoàn hảo... lại ngon ăn hơn của mấy cha nước ngoài ở chổ là nó ko hề xóa mất màu của các cell gốc... Ha... ha... Nói chung là ko hề ảnh hưởng gì đến Format gốc...
ANH TUẤN
 
Lần chỉnh sửa cuối:
anhtuan1066 đã viết:
Từ từ thử sẽ biết mà... Nhân tiện là có thể làm luôn =COLUMN()=CELL("COL") cho Highlight luôn cột nhỉ...
Nhớ có lần lượm dc code của nước ngoài, chúng nó Highlight dòng cột nhìn thấy mê... giờ thì ta làm dc rồi nhé... Nếu kết hợp với code Calculate nữa thì thành 1 code hoàn hảo... lại ngon ăn hơn của mấy cha nước ngoài ở chổ là nó ko hề xóa mất màu của các cell gốc... Ha... ha... Nói chung là ko hề ảnh hưởng gì đến Format gốc...
ANH TUẤN

Vâng, cái này em áp dụng VBA cho vui.
Quả thực CF mạnh ở chỗ không thay đổi màu Cell gốc. Cái này VBA bình thường khó có thể sánh được về hiệu quả và tốc độ.

Thân!
 

File đính kèm

Bắp có file nào dung lượng lớn hơn 1 chút, khoảng 5, 6M gì đó... Thử dùng món này vào xem tốc độ thế nào? Và dung lượng có tăng lên thêm nhiều ko?
Nếu như tốc độ vẫn nhanh và dung lượng ko tăng đáng kể thì đáng để sử dụng lắm
Còn đáng tiếc thêm 1 cái là CF ko cho phép chỉnh size chử, nếu ko thì Highlight sẽ ấn tượng hơn nhiều... Chọn cell, chử trên dòng và cột của nó sẽ phìng to ra 1 chút... Y chang phim hoạt hình... he.. he..
ANH TUẤN
 
Lần chỉnh sửa cuối:
Cái highlight này khá thú vị. Tuy nhiên em nhận thấy có hai vấn đề cần bàn thêm như sau:

+ Để highlight tại dòng hay cột của ActiveCell (ô hiện thời) thì phải nhấn F9, bản chất việc này là để tính lại các hàm trên toàn bảng tính. Nếu không muốn nhấn F9 mà là tự động thì như các bạn đã làm là viết đoạn code Sheet1.Calculate (theo tôi dùng ActiveSheet.Calculate nó chung hơn) trong sự kiện Worksheet_SelectionChange, bản chất chính là nhấn F9. Cả hai việc trên không khác nhau về bản chất, chỉ khác về cách thực hiện.
Việc highlight theo cách trên sẽ phù hợp với sheet có ít công thức trên đó. Vì nếu số lượng công thức + các hàm có ở nhiều ô thì sau mỗi một hành động dịch con trỏ thì tất cả các công thức+các hàm đó đều phải tính lại (dù hàm có sẵn hay do người dùng tự viết đều phải chạy lại). Điều này sẽ làm ảnh hưởng tới tốc độ tính toán.

Một ví dụ để test sẽ về vấn đề này. Tạo trong VBE, tạo một module sau đó viết một hàm
Mã:
Function CallMe()
    MsgBox "Hàm đang được tính lại"
End Function

Một vài ô nào đó bạn gõ công thức có chứa hàm CallMe. Ví dụ tại ô B1 gõ
=CallMe() và B2 cũng cõ công thức như ở ô B1

Bây giờ chúng ta di chuyển con trỏ ô để xem điều gì xảy ra.

+ Conditional Formating là chức năng định dạng tự động, vì thế khi in sheet nó sẽ in định dạng này lên trang in. Nếu bảng tính Excel có highlight này cần in thì làm thế nào để khi in nó tự mất highlight (hoàn trả về màu cũ của dòng và cột đã bị highlight trước đó).
 
TuanVNUNI đã viết:
Một ví dụ để test sẽ về vấn đề này. Tạo trong VBE, tạo một module sau đó viết một hàm
Mã:
Function CallMe()
    MsgBox "Hàm đang được tính lại"
End Function

Một vài ô nào đó bạn gõ công thức có chứa hàm CallMe. Ví dụ tại ô B1 gõ
=CallMe() và B2 cũng cõ công thức như ở ô B1

Bây giờ chúng ta di chuyển con trỏ ô để xem điều gì xảy ra.

Mình đã test và chỉ khi nhập mới công thức này thì Msgbox mới được gọi, còn sau khi đã nhập xong, nếu nhấn f9 thì sẽ chẳng có msgbox.

VD với hàm Callme của anh, tôi copy ra 10 ô như vậy, 5 ô đầu tôi cho + với ô $a$1, 5 ô sau tôi cho + với ô $a$2

Nhấn F9, không có gì xảy ra.
thay đổi a1 ---> nhận được 5 msg (không nhấn F9, đang Autocalculation)
thay đổi a2 ---> nhận được 5 msg (không nhấn F9, đang Autocalculation)

Như vậy là chỉ khi nào có sự thay đổi Value thì sheet mới calculate lại những ô có công thức liên quan đến sự thay đổi đó, chứ không calculate lại toàn bộ bảng tính ?????

Trên đây là tôi thử nghiệm với Excel 2000, không biết các phiên bản khác như thế nào????? Mọi người test thử và cho biết ý kiến nhé.

@MR_OkeBap: nếu phải dùng sheet.Calculate trong sự kiện selectionchange, ta sẽ gặp một trở ngại là không thể copy/cut rồi paste dữ liệu được, vì khi calculate, CutandCopymode sẽ false

Có cách khác cải tiến không Bap ơi????
 
anhtuan1066 đã viết:
Còn đáng tiếc thêm 1 cái là CF ko cho phép chỉnh size chử, nếu ko thì Highlight sẽ ấn tượng hơn nhiều... Chọn cell, chử trên dòng và cột của nó sẽ phìng to ra 1 chút... Y chang phim hoạt hình... he.. he..
ANH TUẤN
Cảm ơn anh gợi ý thêm vụ column. Em kết hợp thêm định dạng font đậm lên và màu font thì thấy gầm giống phim hoạt hình. Hì...hì...
 
Conditional Formating là chức năng định dạng tự động, vì thế khi in sheet nó sẽ in định dạng này lên trang in. Nếu bảng tính Excel có highlight này cần in thì làm thế nào để khi in nó tự mất highlight (hoàn trả về màu cũ của dòng và cột đã bị highlight trước đó
Điều này bạn có thể yên tâm... Vì đã làm CF thì đâu phải ta Highlight toàn bộ bảng tính đâu mà lo... Nếu là tôi thì tôi sẽ chọn 1 vùng nào đó cho CF... Khi bạn muốn in sheet, chỉ việc chọn vào cell nằm ngoài vùng này là dc rồi
ANH TUẤN
 
Mr Okebab đã viết:
Cái HighLight này chỉ là đơn giản về cách làm thôi, tuy nhiên vấn đề em thắc mắc là không biết dùng CF có gây nặng File hay không, cì CF là công thức, nó phải quét tất cả vùng đó nên em sợ . . ..

Tuy nhiên đây cũng là 1 điều đáng để học hỏi. Và sẽ hiệu quả hơn khi có sự kiện selection_change đi kèm (nễu mỗi lần di chuyển mà nhấn F9 thì hơi mất công)

Thân!

Em hiểu rồi, nhưng nếu không phải F9 thì hay qúa !!!
CATHY
 
CATHY đã viết:
Em hiểu rồi, nhưng nếu không phải F9 thì hay qúa !!!
CATHY
Thì như ở trên các bạn ấy nói đó.. nếu bạn muốn tự động luôn thì thêm 1 đoạn code nữa vào...
Những cái ta thêm là màu mè hoa lá, cho bảng tính thêm sống động và thẫm mỹ hơn, chứ cốt lỗi vấn đề vẫn là nằm ở hàm CELL
ANH TUẤN
 
nếu phải dùng sheet.Calculate trong sự kiện selectionchange, ta sẽ gặp một trở ngại là không thể copy/cut rồi paste dữ liệu được, vì khi calculate, CutandCopymode sẽ false
SoiBien có thể cải tiến vấn đề này bằng cách tạo 1 Button, khi ta bấm vào thì SelectionChange mới có tác dụng... Bấm vào lần nữa: Tắt SelectionChange!
Nói chung ko phải lúc nào ta cũng cần đến Highlight, nếu khống chế "TẮT MỞ" như thế sẽ thuận tiện hơn!
ANH TUẤN
 
Có thể màu mè thêm nữa được không anh Tuấn ơi. Ví dụ màu của ô giao giữa dòng và cột có màu khác?
 
anhtuan1066 đã viết:
SoiBien có thể cải tiến vấn đề này bằng cách tạo 1 Button, khi ta bấm vào thì SelectionChange mới có tác dụng... Bấm vào lần nữa: Tắt SelectionChange!
Nói chung ko phải lúc nào ta cũng cần đến Highlight, nếu khống chế "TẮT MỞ" như thế sẽ thuận tiện hơn!
ANH TUẤN
Anh có thể tạo 1 Checkbox (if Not Checkbox then Exit Sub) Hoặc Anh Chọn ô A1 nếu khác rỗng thì hiệu lực SelectionChange và ngược lại.

Thân !
 
tedaynui đã viết:
Anh có thể tạo 1 Checkbox (if Not Checkbox then Exit Sub) Hoặc Anh Chọn ô A1 nếu khác rỗng thì hiệu lực SelectionChange và ngược lại.
Uh... Khi tôi vừa nêu ý kiến này thì bắt tay vào làm ngay.. cũng giống như Phước nói vậy... tôi "nói" cho "nó" biết rằng "NẾU A1="" THÌ XÓA CF VÀ KO LÀM GÌ NỮA CẢ, NGƯỢC LẠI, ADD CF VÀ THỰC HIỆN SELECTION CHANGE"
He... he... chắc tôi nói tiếng Anh kém nên "nó" vẫn chưa hiểu! Cứ error hoài... đễ xem lại đã... (ngu VBA)
 
Cải tiến Highlight theo kiểu của anh TuanVNUNI nè... (bắt chước giống giống thôi)... hi... hi...
 

File đính kèm

Lần chỉnh sửa cuối:
anhtuan1066 đã viết:
Cải tiến Highlight theo kiểu của anh TuanVNUNI nè... (bắt chước giống giống thôi)... hi... hi...

Anh Tuấn chỉ em thêm được không ? Em làm thử trên máy khác, khi đánh đoạn code xong em trở về Excel chạy thử thì không thấy highlight tự động (đã chọn CF). Như vậy khi đánh đoạn code xong phải làm thêm các bước nào không ? anh thông cảm em chưa rành VBA !
Cảm ơn anh
CATHY
 
AnhTuấn ơi test lại coi. Em test thấy chưa ổn. Nếu nhập liệu vào vài ô thì Highlight tùm lum luôn (Nó không Refresh). Anh xem lại coi. Thanks !

Thân!
 
Uh, sao lạ thế nhỉ? Đâu thấy có gì sai đâu ta...
Mà hôm qua test cái nào cũng ngon lành, tự nhiên hôm nay trở chứng, 3, 4 file liền 1 lúc cái nào cũng báo lỗi hết... Chơi xỏ hả ta!
Hic... Hic.. Phước thấy thế nào? File này có 1 dòng code duy nhất lấy đâu ra lỗi nhỉ?
ANH TUẤN
 
Phát hiện thêm 1 chiêu nữa...: Nếu ta Highlight 1 vùng giới hạn, (ko highlight toàn bộ bàng tính) thì nếu như vùng ấy có chứa đầy dử liệu sẽ ko báo lỗi.. những dòng và cột ko có dử liệu sẽ bị lỗi về màu
Tôi đã sửa lại file trong bài #24, giờ hết lỗi rồi nhé
ANH TUẤN
 
Lần chỉnh sửa cuối:
Highlight không dùng sheet.calculate

Em đề nghị cách này, không dùng sheet.calculate, nên ta có thể copy được.
 

File đính kèm

Hay... có thể copy paste dc bình thường... tuy nhiên kiến thức này lại.. quá cao so với những bạn mới học...
Dù sao tôi vẫn khoái dùng F9 hơn... Mỗi khi thao tác nhập liệu thì nó cũng tự động Highlight đấy thôi.. chỉ trừ trường hợp chọn cell là nó ko tự động thôi.. Cách này rất phù hợp cho các bạn mới học... hi... hi...
ANH TUẤN
 
anhtuan1066 đã viết:
Hay... có thể copy paste dc bình thường... tuy nhiên kiến thức này lại.. quá cao so với những bạn mới học...
Dù sao tôi vẫn khoái dùng F9 hơn... Mỗi khi thao tác nhập liệu thì nó cũng tự động Highlight đấy thôi.. chỉ trừ trường hợp chọn cell là nó ko tự động thôi.. Cách này rất phù hợp cho các bạn mới học... hi... hi...
ANH TUẤN

vâng anh! em cũng nghĩ dùng F9, cứ giống như cái bài đầu của anh thì hay hơn, đánh dấu dòng mình đang cần chú ý.
 
Soibien qua góp ý phần ComboBox ko dùng VBA của tôi đi.. xem thử có phát hiện gì mới ko
ANH TUẤN
 
Thêm một chút góp vui cùng các bạn !!!

Mình thêm một chút để góp vui trong diễn đàn. Cũng là nhờ các anh giúp đỡ thôi. Xấu hổ quá chưa đọc hết bài các anh đã quậy rồi. Xấu hổ quá!!!!!!!!!!!
 

File đính kèm

Lần chỉnh sửa cuối:
Mình thêm một chút để góp vui trong diễn đàn. Cũng là nhờ các anh giúp đỡ thôi. Xấu hổ quá chưa đọc hết bài các anh đã quậy rồi. Xấu hổ quá!!!!!!!!!!!
He... he... như đã nói từ đầu, cách này chưa dc vì nếu dùng Calculate thì chức năng copy sẽ bị hủy
 
Đâu cần thiết phải nhấn F9, Double Nick và Cell bất kỳ rồi enter là được rồi.
 
He... he... như đã nói từ đầu, cách này chưa dc vì nếu dùng Calculate thì chức năng copy sẽ bị hủy
Muốn không bị hủy chức năng copy paste thì dễ mà, anhtuan chịu 1 chầu nhé!
(copy ở đâu cũng được, nhưng chỉ paste ngoài vùng dữ liệu thôi)
 

File đính kèm

Muốn không bị hủy chức năng copy paste thì dễ mà, anhtuan chịu 1 chầu nhé!
(copy ở đâu cũng được, nhưng chỉ paste ngoài vùng dữ liệu thôi)
Cái này chưa dc đâu sư phụ ơi... nếu ta chọn copy và paste trong vùng CF thì nó vẫn.. tèo...
Ngày trước Soibien làm như sau:
PHP:
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    ActiveWorkbook.Names("curRow").Value = ActiveCell.Row
    ActiveWorkbook.Names("curCol").Value = ActiveCell.Column
End Sub
Còn đệ thì làm như vầy:
PHP:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
   Application.ScreenUpdating = True
End Sub
ANH TUẤN
 
Vấn đề là nguyên nhân của sự mất chức năng copy paste khi change selection: Khi thay đổi ô chọn mà thực hiện 1 lệnh VBA gì đó thì nó quên đi cái vụ copy. Vậy giải quyết bằng nhiều cách:

- Giới hạn vùng tác động của câu lệnh (Ptm)
- Không sử dụng câu lệnh trực tiếp mà dùng 1 phương thức hoặc 1 thuộc tính nào đó có tác dụng tương đương câu lệnh (anhtuan)
- Chỉ thay đổi giá trị của biến hoặc name tức là tác động gián tiếp (SoiBien)

Tùy trường hợp mà sử dụng.
 
Thí dụ như file sau của MrOkeBab, làm sao để có thể copy paste?
 

File đính kèm

Cách này không ổn. Vì quá chậm, file của mình nặng hơn 20MB (vì có rất nhiều data + công thức), mỗi lần calculate rất lâu. Mình cũng làm hightlight như bạn nói nhưng là viết bằng VBA.
 
File của bác hay quá. Mà câu lệnh sau có tác dụng j vậy bác. SO1 là tên sheet , còn CBViDu là gì vậy bác ???

With S01.CBViDu
.LinkedCell = ActiveCell.Address
.ListFillRange = "TaiKhoan"
End With
 
Cái này chưa dc đâu sư phụ ơi... nếu ta chọn copy và paste trong vùng CF thì nó vẫn.. tèo...
Ngày trước Soibien làm như sau:
PHP:
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    ActiveWorkbook.Names("curRow").Value = ActiveCell.Row
    ActiveWorkbook.Names("curCol").Value = ActiveCell.Column
End Sub
Còn đệ thì làm như vầy:
PHP:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
   Application.ScreenUpdating = True
End Sub
ANH TUẤN

Phiền mọi người chỉ giúp em với
Em làm y như chỉ dẫn của các anh mà ko được.
 

File đính kèm

Lần chỉnh sửa cuối:

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

Back
Top Bottom