Prova a mettere le dichiarazioni
codice:
Dim xlApp As Excel.Application
Dim xlWB As Excel.Workbook
Dim xlWS As Excel.Worksheet
all'interno della Sub TestDataSet.

Forse istanziando in modo ritardato fa qualche casino con i riferimenti in memoria, e al momento dell'impostazione a Nothing non riesce a risolvere l'assegnazione.

Secondo me lo stesso discorso vale per il passaggio "secco" dei parametri (attraverso l'assegnazione a variabili rientriamo nel discorso di cui sopra per via dei puntatori alle locazioni delle variabili).

Oppure + semplicemente ti resta attivo qualche oggetto collegato ai vari Application, WorkBook, WorkSheet ecc. ecc. (anche se non mi pare )

Visto cosi' il codice che hai postato va + che bene.
Hai provato anche con:

codice:
xlWS.Range("A1", "D" & Cstr(riga + 1)).Font.Bold = True