Из 16-битных — можно укорачивать файл без перезаписи, работая через функцию 40H (при CX=0) программного прерывания 21H.
Microsoft даже дает пример для 16-битных бейсиков (QB, GWB, etc.):
http://support.microsoft.com/kb/68159 (How to Truncate a File Using MS-DOS Interrupts from Basic)
А что есть по этому направлению в VBA? Delphi и разные C тоже умеют это делать — не велика ведь задача произвести запись в оглавление и освободить образующиеся лишние кластеры?
Может, в библиотеках API что-нибудь есть?