Using 'If Shp.Type = msoTextBox Then ' is not the same as using 'If Shp.TextFrame.HasText Then' for the simple reason that shapes other than textboxes can have text. A simple example is WordArt.
As for the HdFt content testing, you could use 'If len(Trim(oHF.Range.Text)) >1 Then'.