Wednesday, 3 February 2010

Ẩn cột, hàng trong Excel có điều kiện

Ẩn cột, hàng theo điều kiện trong Excel.
Về việc ẩn cột hoặc hàng thủ công trong Excel thì trong diễn đàn chúng ta đã có bài viết, vấn đề đặt ra là chúng ta cần ẩn hoặc hiện một số cột hoặc hàng nào đó theo điều kiện thì phải nhờ trợ giúp của lập trình VBA.
Ví dụ chúng ta muốn ẩn cột H nếu trong ô B4 chưa nhập dữ liệu, nếu nhập dữ liệu vào thì cột H tự động hiện ra.
Với đoạn mã VBA sau:
Sub HideColumnH()
If Range("B4").Value = 0 Then
Columns("H").EntireColumn.Hidden = True
Else
Columns("H").EntireColumn.Hidden = False
End If
End Sub
Khi chạy đoạn mã này sẽ thực hiện vấn đề trên như vẫn còn một bất tiện là chưa tự động hoàn toàn mà phải chạy (run) đoạn mã trên thì công việc mới được thực hiện.
Nếu bạn biết lập trình sự kiện (even) thì sử dụng đoạn mã sau:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Range("B4").Value = 0 Then
Columns("H").EntireColumn.Hidden = True
Else
Columns("H").EntireColumn.Hidden = False
End If
End Sub

Với đoạn mã trên nếu ô B4 trống thì cột H sẽ tự động ẩn, bạn nhập dữ liệu vào ô B4 thì cột H tự động hiện ra và nếu bạn lại tiếp tục xóa dữ liệu trong ô B4 thì cột H lại tự động ẩn.
Có thể chỉnh sửa một chút để có thể ẩn hàng.



Nếu muốn không cho lưu lại bảng tính của bạn với tên khác, cũng không cho lưu vào một nơi khác và đưa ra một cảnh báo nào đó.
nhấn Alt+F11 và nhấp đúp chuột vào mục ThisWorkbook trong khung nhập đoạn code sau đây vào cửa sổ VBA. Sau khi nhập xong, nhấn Alt+Q để trở về Excel, rồi lưu lại bảng tính:

Private Sub workbook_BeforeSave(ByVal SaveAsUI As Boolean, _
Cancel As Boolean)
Dim lReply As Long
If SaveAsUI = True Then
lReply = MsgBox("cam phien, khong luu bang tinh nay voi ten khac duoc", vbQuestion + vbOKCancel)
Cancel = (lReply = vbCancel)
If Cancel = False Then Me.Save
Cancel = True
End If
End Sub

No comments: