Nessyness, based on Paul's original code, this adds:
1) Applies to all sheets in workbook
2) Only evaluates the columns D through "last column with any data in row1"
3) Spots the last row on each sheet properly
4) Unhides previously hidden rows to reevaluate if they should be hidden again or not
Just a note, you could probably do without the row-by-row loop on each sheet if you just entered a COUNT() or COUNTIF() formula directly on the sheets and just filtered by that column, deleting the remaining visible rows all at once. If speed isn't an issue, then the macro above will be fine.