xin chỉ giúp về kẻ khung tự động trong excel (1 người xem)

Liên hệ QC

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

tuanphong76

Thành viên mới
Tham gia
12/10/09
Bài viết
15
Được thích
0
Xin mọi người ai biết kẻ khung tự động xin chỉ giúp. Thank!
 

File đính kèm

Cái này dùng Conditional formating là được.

gởi Khoa,

Xem lại code viết gì thế này:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range
For Each rng In ActiveSheet.Range("b8", [b65536].End(xlUp))
If rng.Value = "" Then
Else
rng.BorderAround LineStyle:=xlContinuous, ColorIndex:=3, Weight:=xlThick
End If
Next
End Sub
- Sử dụng worksheet_ change mà không giới hạn vùng, thì làm bất kỳ cái gì trên sheet code cũng chạy à?
- If rng.Value = "", không làm gì đã Else? Vậy sao không If rng.Value <> "" để khỏi Eo iếc mất công?
- Tại sao lại tô màu tất tần tật từ ô dưới cùng lên và chỉ cột B? Yêu cầu là chỉ khi nào có dữ liệu dòng nào đó của cột B, thì kẻ khung 4 cột A đến D dòng đó.
 
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range
For Each rng In ActiveSheet.Range("b2", [b65536].End(xldown))
If If rng.Value <> "" Then
rng.BorderAround LineStyle:=xlContinuous, ColorIndex:=3, Weight:=xlThick
End If
Next
End Sub
hihi em biết bác ạ, chỉ tại cái thằng shift hỏng lâu rùi nên.
em làm theo tô vùng dữ liệu từ cột a.d thì dùng thế này, có gì bác ptm lại cho em ý kiến thêm nhé. cảm ơn bác nhiều ạ.
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range
For Each rng In ActiveSheet.Range("b8.b100")
If rng.Value <> "" Then
For i = -1 To 2
Range(rng, rng.Offset(, i)).BorderAround LineStyle:=xlContinuous, ColorIndex:=3, Weight:=xlThick
Next i
End If
Next
End Sub
em định tạo vùng dữ liệu động nhưng chạy nặng, bác giúp em code chạy nhanh hơn nhé.

 
Lần chỉnh sửa cuối:
và đây là file làm theo cf như bác ptm muốn nói
 
Lần chỉnh sửa cuối:
Code 1:
PHP:
For Each rng In ActiveSheet.Range("b2", [b65536].End(xldown))
Đã B65536 lại còn xlDown, Down tới đâu nữa? Như vậy Excel phải xét 65536 ô à? Cho mà chết.

Code 2:
PHP:
For i = -1 To 4
Range(rng, rng.Offset(, i)).BorderAround LineStyle:=xlContinuous, ColorIndex:=3, Weight:=xlThick
Next i

a. i = -1 To 4 thì tô mấy cột? Nhẩm nhẩm ra thì 6 cột.
b. Chả can cớ gì phải For next từ 8 đến 100. Thay đổi ô nào đóng khung 4 ô tương ứng dòng đó thôi.

2 code nói chung:


- Giới hạn, là giới hạn cái Target, nghĩa là chỉ khi có thay đổi trong phạm vi chỉ định thì code mới chạy. Thí dụ chỉ khi nào có thay đổi trong phạm vi B8:B100:

PHP:
If Target.Column = 2 And Target.Row >= 7 And Target.Row <= 100 Then

Hoặc:

PHP:
If Not Intersect(Target, Range("B8:B100")) Is Nothing Then

Thí dụ:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B3:B100")) Is Nothing And Target <> "" Then
Rw = Target.Row
For i = 1 To 4
Cells(Rw, i).BorderAround LineStyle:=xlContinuous, ColorIndex:=1, Weight:=xlThin
Next
End If
End Sub

Nhưng có thể người ta muốn khi xoá 1 tên thì border bị xoá theo nữa. Tóm lại là không nên xài code VBA cho vụ này. Conditinal formating cũng không nên lạm dụng khi dữ liệu nhiều.

Name động chẳng giúp ích gì trong trường hợp này, cả VBA và Conditional formating.

Mấy cái này đầy trên diễn đàn mà không chịu đọc. Với lại, thuật toán sai thì liên quan gì đến phím shift hỏng?
 
Web KT

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

Back
Top Bottom