Te dejo la función completa
Function ExportarExcel(ByVal DT As DataTable) As Boolean
'Dim BL As New BL_PRIMS. Mantenimiento. TemaInteres
'Dim DT As New DataTable
'DT = BL.ExportarExcel().Tables(0)
'Creamos las variables
Dim exApp As New Microsoft.Office.Interop.Excel.Application
Dim exLibro As Microsoft.Office.Interop.Excel.Workbook
Dim exHoja As Microsoft.Office.Interop.Excel.Worksheet
Try
'Añadimos el Libro al programa, y la hoja al libro
exLibro = exApp.Workbooks.Add
exHoja = exLibro.Worksheets.Add()
exHoja.Name = Reporte de Usuarios
' ¿Cuantas columnas y cuantas filas?
Dim NCol As Integer = DT.Columns.Count
Dim NRow As Integer = DT.Rows.Count
'Aqui recorremos todas las filas, y por cada fila todas las columnas y vamos escribiendo.
For i As Integer = 1 To NCol
exHoja.Cells.Item(1, i) = DT.Columns(i - 1).ColumnName.ToString
'exHoja.Cells.AutoFormat(vFormato)
Next
For Fila As Integer = 0 To NRow - 1
For Col As Integer = 0 To NCol - 1
exHoja.Cells.Item(Fila + 2, Col + 1) = ' + DT.Rows(Fila).Item(Col).ToString()
Next
Next
'Titulo en negrita, Alineado al centro y que el tamaño de la columna se ajuste al texto
exHoja.Rows.Item(1).Font.Bold = 1
exHoja.Rows.Item(1).HorizontalAlignment = 3
exHoja.Columns.AutoFit()
'Aplicación visible
exApp.Application.Visible = True
exHoja = Nothing
exLibro = Nothing
exApp = Nothing
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Critical, Error al exportar a Excel )
Return False
End Try
Return True
End Function
Esto agarra cualquier Tabla (DataTable) y lo convierte en Excel, sin importar cuantos campos, como se llamen y demás.
Si tienes dudas me lo hace saber.