Hóng các cao nhân chỉ dạy giúp em ạ:
Em muốn định dạng những ô trống là gạch chéo. Tuy nhiên khi chọn Conditional Formating/Text that contains thì phần format chọn gạch chéo ô không hiển thị, làm thế nào để format theo yêu cầu được ạ?
Conditional Formating không hỗ trợ cho Gạch chéo ô, mà phải dùng VBA
Nếu đồng ý thì bạn post file mẫu lên, để xem các ô chứa text là nhập tay vào hay có công thức bên trong?
Conditional Formating không hỗ trợ cho Gạch chéo ô, mà phải dùng VBA
Nếu đồng ý thì bạn post file mẫu lên, để xem các ô chứa text là nhập tay vào hay có công thức bên trong?
Bác xem file đính kèm giúp em ạ. Có rất nhiều file dạng như file đính kèm, làm thế nào để áp dụng cho tất cả các file bác nhỉ? Em đính kèm tạm ở đây 1 file thôi ạ
Chỗ em cần format là đoạn này ạ, cũng có chứa công thức: chỗ này để trống thì sẽ format gạch chéo đi.
Về cơ bản, trên mỗi sheet, mình sẽ duyệt qua từng ô trong vùng P-Z: Nếu ô nào mà công thức trả về kết quả là ô trống thì sẽ tạo 1 shape line chéo dán vô.
Khi kết quả thay đổi thì khi activate sheet (chọn lại sheet) sẽ tự động cập nhật.
Nếu các ô này là giá trị nhập tay thì ngay khi thay đổi giá trị, đường chéo sẽ biến mất hoặc hiện ra tự động (dùng worksheet_change).
Tuy nhiên vì là công thức nên mình để trong workbook_sheetactivate và chỉ cập nhật được khi chọn lại sheet.
Nếu có sheet nào mà không muốn kẻ đường chéo, thì bạn liệt kê vào biến "exclu". Khi chọn các sheet này sẽ không có gì xảy ra.
Cách tạo: Alt-F11 mở cửa sổ VBA, chọn ThisWorkbook dán code này vào. Lặp lại cho các file khác có liên quan.
PHP:
Option Explicit
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim co As Object
Dim lr&, i&, j&, exclu As String
exclu = "-Sheet1-Sheet2-Sheet3-Sheetn-" ' chuoi ten cua cac sheet khong muon tao duong ke
lr = Sh.Range("B47").End(xlUp).Row
If InStr(1, exclu, Sh.Name) Then Exit Sub
For Each co In Sh.Shapes
If co.Name Like "*Connector*" Then co.Delete
Next
Sh.Shapes.AddConnector msoConnectorStraight, Sh.Range("B47").Left, Sh.Range("B47").Top, _
Sh.Range("AB" & lr + 1).Left, Sh.Range("AB" & lr + 1).Top
For i = 40 To lr
For j = 16 To 27 Step 2
If Sh.Cells(i, j) = "" Then
Sh.Shapes.AddConnector msoConnectorStraight, Sh.Cells(i + 1, j).Left, Sh.Cells(i + 1, j).Top, _
Sh.Cells(i, j + 2).Left, Sh.Cells(i, j + 2).Top
End If
Next
Next
End Sub
Về cơ bản, trên mỗi sheet, mình sẽ duyệt qua từng ô trong vùng P-Z: Nếu ô nào mà công thức trả về kết quả là ô trống thì sẽ tạo 1 shape line chéo dán vô.
Khi kết quả thay đổi thì khi activate sheet (chọn lại sheet) sẽ tự động cập nhật.
Nếu các ô này là giá trị nhập tay thì ngay khi thay đổi giá trị, đường chéo sẽ biến mất hoặc hiện ra tự động (dùng worksheet_change).
Tuy nhiên vì là công thức nên mình để trong workbook_sheetactivate và chỉ cập nhật được khi chọn lại sheet.
Nếu có sheet nào mà không muốn kẻ đường chéo, thì bạn liệt kê vào biến "exclu". Khi chọn các sheet này sẽ không có gì xảy ra.
Cách tạo: Alt-F11 mở cửa sổ VBA, chọn ThisWorkbook dán code này vào. Lặp lại cho các file khác có liên quan.
PHP:
Option Explicit
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim co As Object
Dim lr&, i&, j&, exclu As String
exclu = "-Sheet1-Sheet2-Sheet3-Sheetn-" ' chuoi ten cua cac sheet khong muon tao duong ke
lr = Sh.Range("B47").End(xlUp).Row
If InStr(1, exclu, Sh.Name) Then Exit Sub
For Each co In Sh.Shapes
If co.Name Like "*Connector*" Then co.Delete
Next
Sh.Shapes.AddConnector msoConnectorStraight, Sh.Range("B47").Left, Sh.Range("B47").Top, _
Sh.Range("AB" & lr + 1).Left, Sh.Range("AB" & lr + 1).Top
For i = 40 To lr
For j = 16 To 27 Step 2
If Sh.Cells(i, j) = "" Then
Sh.Shapes.AddConnector msoConnectorStraight, Sh.Cells(i + 1, j).Left, Sh.Cells(i + 1, j).Top, _
Sh.Cells(i, j + 2).Left, Sh.Cells(i, j + 2).Top
End If
Next
Next
End Sub