Cần giúp tạo macro tô màu vàng và kẻ border tất cả các công thức mảng trong file Excel

hktanh

Thành viên chính thức
Tham gia ngày
22 Tháng tám 2019
Bài viết
84
Được thích
7
Điểm
20
Tuổi
25
Chào các bạn. Mình có một số file tài liệu trong đó có nhiều công thức mảng và công thức thường (những công thức mà có thể dễ dàng copy xuống) xen kẽ nhau, và mình muốn quản lý những phần có công thức mảng đó bằng cách tô màu vàng và kẻ border cho những công thức mảng đó để dễ theo dõi (vì nếu tô màu thì đường border sẽ bị mất nên khó nhìn nên mình cần kẻ) . Mình sử dụng nút Toggle Button trong Custom UI với một macro được kích hoạt khi OnAction, macro này sẽ có 2 trường hợp là nếu nút được chọn thì tất cả các công thức mảng trong file excel đó (chỉ áp dụng trên Workbook chứa macro này đang được kích hoạt) sẽ được tô màu vàng và kẻ border, còn nếu nút không được chọn thì không tô màu những ô chứa công thức mảng, và border ở dạng màu xám thông thường (tức nếu nút không được chọn thì hiển thị ở chế độ xem bình thường, không tô màu và kẻ border các công thức mảng). Mình cảm ơn
 

File đính kèm

phulien1902

GPE - My love
Tham gia ngày
6 Tháng bảy 2013
Bài viết
3,377
Được thích
4,158
Điểm
560
Nơi ở
Hải Phòng
Chào các bạn. Mình có một số file tài liệu trong đó có nhiều công thức mảng và công thức thường (những công thức mà có thể dễ dàng copy xuống) xen kẽ nhau, và mình muốn quản lý những phần có công thức mảng đó bằng cách tô màu vàng và kẻ border cho những công thức mảng đó để dễ theo dõi (vì nếu tô màu thì đường border sẽ bị mất nên khó nhìn nên mình cần kẻ) . Mình sử dụng nút Toggle Button trong Custom UI với một macro được kích hoạt khi OnAction, macro này sẽ có 2 trường hợp là nếu nút được chọn thì tất cả các công thức mảng trong file excel đó (chỉ áp dụng trên Workbook chứa macro này đang được kích hoạt) sẽ được tô màu vàng và kẻ border, còn nếu nút không được chọn thì không tô màu những ô chứa công thức mảng, và border ở dạng màu xám thông thường (tức nếu nút không được chọn thì hiển thị ở chế độ xem bình thường, không tô màu và kẻ border các công thức mảng). Mình cảm ơn
Bạn thử:
PHP:
Sub Test()
    Dim Cll As Range
    For Each Cll In Selection.SpecialCells(xlFormulas)
        If Cll.HasArray Then
            Cll.Interior.ColorIndex = 6
            Cll.Borders.LineStyle = 1
        End If
    Next
End Sub
 

hktanh

Thành viên chính thức
Tham gia ngày
22 Tháng tám 2019
Bài viết
84
Được thích
7
Điểm
20
Tuổi
25
Bạn thử:
PHP:
Sub Test()
    Dim Cll As Range
    For Each Cll In Selection.SpecialCells(xlFormulas)
        If Cll.HasArray Then
            Cll.Interior.ColorIndex = 6
            Cll.Borders.LineStyle = 1
        End If
    Next
End Sub
Bạn ơi, còn trường hợp bỏ chọn nút Toggle Button để trở lại bình thường nữa nhé, với bạn có thể làm cho Sub Test kia có thể chạy trên toàn bộ các sheet của workbook chứa macro đó được không nhỉ, mình cảm ơn nhé :hi1:
 

File đính kèm

phulien1902

GPE - My love
Tham gia ngày
6 Tháng bảy 2013
Bài viết
3,377
Được thích
4,158
Điểm
560
Nơi ở
Hải Phòng
Bạn ơi, còn trường hợp bỏ chọn nút Toggle Button để trở lại bình thường nữa nhé, với bạn có thể làm cho Sub Test kia có thể chạy trên toàn bộ các sheet của workbook chứa macro đó được không nhỉ, mình cảm ơn nhé :hi1:
Muốn xóa màu, bỏ Border bạn dùng:
PHP:
Sub Test_Undo()
    Dim Cll As Range
    For Each Cll In Selection.SpecialCells(xlFormulas)
        If Cll.HasArray Then
            Cll.Interior.ColorIndex = 2
            Cll.Borders.LineStyle = xlNone
        End If
    Next
End Sub
+ Với nhiều Sheets, bạn thử:
PHP:
Sub Test2()
    Dim ws As Worksheet, Cll As Range
    On Error Resume Next
    For Each ws In ThisWorkbook.Worksheets
        For Each Cll In ws.Range("A1:O1000").SpecialCells(xlFormulas)
            If Cll.HasArray Then
                Cll.Interior.ColorIndex = 6
                Cll.Borders.LineStyle = 1
            End If
        Next: Next
End Sub

Sub Test_Undo2()
    Dim ws As Worksheet, Cll As Range
    On Error Resume Next
    For Each ws In ThisWorkbook.Worksheets
        For Each Cll In ws.Range("A1:O1000").SpecialCells(xlFormulas)
            If Cll.HasArray Then
                Cll.Interior.ColorIndex = 2
                Cll.Borders.LineStyle = xlNone
            End If
        Next
    Next
End Sub
+ Chú ý: Bạn có thể thay Range("A1:O1000") bằng vùng dữ liệu của bạn cho phù hợp.
 
Lần chỉnh sửa cuối:

hktanh

Thành viên chính thức
Tham gia ngày
22 Tháng tám 2019
Bài viết
84
Được thích
7
Điểm
20
Tuổi
25
Muốn xóa màu, bỏ Border bạn dùng:
PHP:
Sub Test_Undo()
    Dim Cll As Range
    For Each Cll In Selection.SpecialCells(xlFormulas)
        If Cll.HasArray Then
            Cll.Interior.ColorIndex = 2
            Cll.Borders.LineStyle = xlNone
        End If
    Next
End Sub
+ Với nhiều Sheets, bạn thử:
PHP:
Sub Test2()
    Dim ws As Worksheet, Cll As Range
    On Error Resume Next
    For Each ws In ThisWorkbook.Worksheets
        For Each Cll In ws.Range("A1:O1000").SpecialCells(xlFormulas)
            If Cll.HasArray Then
                Cll.Interior.ColorIndex = 6
                Cll.Borders.LineStyle = 1
            End If
        Next: Next
End Sub

Sub Test_Undo2()
    Dim ws As Worksheet, Cll As Range
    On Error Resume Next
    For Each ws In ThisWorkbook.Worksheets
        For Each Cll In ws.Range("A1:O1000").SpecialCells(xlFormulas)
            If Cll.HasArray Then
                Cll.Interior.ColorIndex = 2
                Cll.Borders.LineStyle = xlNone
            End If
        Next
    Next
End Sub
+ Chú ý: Bạn có thể thay Range("A1:O1000") bằng vùng dữ liệu của bạn cho phù hợp.
Bạn ơi lúc mình chọn Undo thì nó là kiểu không có đường border ý, tức là nó trắng tinh không có border, làm cách nào để quay lại được cái border mặc định của Excel là RGB (218 , 220 , 221) sau khi ấn Undo nhỉ :) với lại cái macro chạy OnAction của Custom UI chỉ là 1 macro, cho nên liệu mình có thể dùng lệnh Call trong VBA để gọi được hai lệnh Check và Uncheck cái Toggle Button được không nhỉ, Check khi đánh dấu màu còn Uncheck lúc undo đánh dấu ý, mình cảm ơn
 

File đính kèm

phulien1902

GPE - My love
Tham gia ngày
6 Tháng bảy 2013
Bài viết
3,377
Được thích
4,158
Điểm
560
Nơi ở
Hải Phòng
Bạn ơi lúc mình chọn Undo thì nó là kiểu không có đường border ý, tức là nó trắng tinh không có border, làm cách nào để quay lại được cái border mặc định của Excel là RGB (218 , 220 , 221) sau khi ấn Undo nhỉ :) với lại cái macro chạy OnAction của Custom UI chỉ là 1 macro, cho nên liệu mình có thể dùng lệnh Call trong VBA để gọi được hai lệnh Check và Uncheck cái Toggle Button được không nhỉ, Check khi đánh dấu màu còn Uncheck lúc undo đánh dấu ý, mình cảm ơn
Tôi chỉ giúp bạn được đến đây thôi, phần tiếp theo bạn tự tìm hiểu lấy nhé.
 

giaiphap

Thành viên gạo cội
Tham gia ngày
12 Tháng ba 2007
Bài viết
4,815
Được thích
4,063
Điểm
860
Bạn ơi lúc mình chọn Undo thì nó là kiểu không có đường border ý, tức là nó trắng tinh không có border, làm cách nào để quay lại được cái border mặc định của Excel là RGB (218 , 220 , 221) sau khi ấn Undo nhỉ :) với lại cái macro chạy OnAction của Custom UI chỉ là 1 macro, cho nên liệu mình có thể dùng lệnh Call trong VBA để gọi được hai lệnh Check và Uncheck cái Toggle Button được không nhỉ, Check khi đánh dấu màu còn Uncheck lúc undo đánh dấu ý, mình cảm ơn
Không biết có phải thế này không?
 

File đính kèm

Top Bottom