Attached is an extremely stripped down version of my file that still has the same problem, without any VBA code.
To recreated the problem do the following manually using Excel 2003: First copy columns "M:U" from the "template" sheet. Then insert them before column "M" on the "report" sheet. Then save the file. Notice that column "P" has width of 8.43. Close the file and reopen. Notice that column "P" is now hidden and has width 0.
Surely this is a bug. It doesn't happen in Excel 2007.
Just in case it's relevant, below is the code I use to copy/paste. I don't think the source of the problem is here though:
'variables CompanyName & PrevCompanyCount defined elsewhere
Dim ReportSheet As Worksheet
Dim CopyTo as Range
Dim CopyFrom as Range
'identify company-report page
Set ReportSheet = ThisWorkbook.Worksheets("report")
ReportSheet.Unprotect
With ThisWorkbook.Names("template").RefersToRange
'identify rightmost edge of table
Set CopyTo = ReportSheet.Columns(4 + .Columns.Count * PrevCompanyCount)
'insert space
CopyTo.EntireColumn.Resize(ColumnSize:=.Columns.Count).Insert
'shift back into newly inserted space
Set CopyTo = CopyTo.Offset(0, -.Columns.Count)
'calc which of 3 colored-templates to use (mod 3)
Set CopyFrom = .Offset(ColumnOffset:=.Columns.Count * (PrevCompanyCount Mod 3))
End With
'copy/paste template
CopyFrom.Copy Destination:=CopyTo
'fill in CompanyName
CopyTo.Cells(5, 1).Value = CompanyName