• I use the querying capability built in to Excel to import from SQL Server rather than push things to Excel:

    xlApp = GetObject(, "Excel.Application")

    xlQueryTable = xlApp.ActiveSheet.QueryTables.Add(Connection:=psConnectString, Destination:=xlApp.ActiveSheet.Range(psCurrentCell))

    With xlQueryTable

    .Sql = psExecString

    .Refresh(BackgroundQuery:=False)

    End With

    The application is driving Excel to import, so the columns take on the datatype supplied by SQL Server rather than having to set each one excplicity.