Option Explicit
#If VBA7 Then
Private Declare PtrSafe Function SetTimer Lib "user32" (ByVal hWnd As LongPtr, ByVal nIDEvent As LongPtr, ByVal uElapse As LongPtr, ByVal lpTimerFunc As LongPtr) As Long
Private Declare PtrSafe Function KillTimer Lib "user32" (ByVal hWnd As LongPtr, ByVal nIDEvent As LongPtr) As Long
#Else
Private Declare Function SetTimer Lib "user32" (ByVal HWnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Private Declare Function KillTimer Lib "user32" (ByVal HWnd As Long, ByVal nIDEvent As Long) As Long
#End If
Private AHERW_RangeStart As Range, AHERW_TimerID&, AHERW_AutoHide As Boolean
Function AutoHideEmptyRowsAndWrapText(ByVal RangeStart As Range, Optional ByVal AutoHide As Boolean = True) As String
Set AHERW_RangeStart = RangeStart
AHERW_AutoHide = AutoHide
If AHERW_TimerID <> 0 Then KillTimer 0&, AHERW_TimerID
AHERW_TimerID = SetTimer(0&, 0&, 1, AddressOf AutoHideEmptyRowsAndWrapText_Callback)
AutoHideEmptyRowsAndWrapText = "AutoHide"
End Function
Sub AutoHideEmptyRowsAndWrapText_Callback()
On Error Resume Next
KillTimer 0&, AHERW_TimerID: AHERW_TimerID = 0
Set AHERW_RangeStart = AHERW_RangeStart(1, 1)
Dim RNGAs As Range, RNGBs As Range, I As Long, IsUp As Boolean
IsUp = Application.ScreenUpdating
Application.ScreenUpdating = False
With AHERW_RangeStart.Parent
If Not AHERW_AutoHide Then
.UsedRange.EntireRow.Hidden = False
Else
For I = AHERW_RangeStart.Row + VBA.IIf(AHERW_RangeStart.Row <= 1, 1, 0) To .UsedRange.Rows.Count
If VBA.IsEmpty(.Cells(I, AHERW_RangeStart.Column).Value) Then
If RNGBs Is Nothing Then
Set RNGBs = .Cells(I, AHERW_RangeStart.Column)
Else
Set RNGBs = Application.Union(RNGBs, .Cells(I, AHERW_RangeStart.Column))
End If
Else
If RNGAs Is Nothing Then
Set RNGAs = .Cells(I, AHERW_RangeStart.Column)
Else
Set RNGAs = Application.Union(RNGAs, .Cells(I, AHERW_RangeStart.Column))
End If
End If
Next I
If Not RNGAs Is Nothing Then
With RNGAs
.EntireRow.Hidden = False
.WrapText = False
.WrapText = True
End With
End If
If Not RNGBs Is Nothing Then
RNGBs.EntireRow.Hidden = True
End If
End If
End With
Set AHERW_RangeStart = Nothing
Application.ScreenUpdating = IsUp
End Sub