Export data from SQL to Excel spreadsheet using VBA

In this blog, we will Import data from SQL to Excel spreadsheet using VBA. Assuming that you have a little bit of knowledge on SQL server. Now if you are preparing reports in Excel and the data is on your SQL server then you don’t need to copy the data first from SQL server to prepare the report.

Now if your manager needs the report very frequently then you need to do the same task again and again. Frankly speaking, I faced this kind of situation in my previous company and I prepared the report using VBA and handed over the file to my manager. Now, whenever he will click the button he will get the report of the LIVE DATA from SQL to Excel.

Export data from SQL to Excel spreadsheet using VBA

In this example, I am using Microsoft Sample Database Adventureworks2012

Just open a dummy excel workbook. Create the dummy button like below: export data from sql to excel

The buttons are in the above picture are basic shapes. And “HP-PC” is the system name. If you open the file in your system, it will show your system name. And the time is coming from system’s time. After creating the above button we will create the code.

First, we are trying to focus on Sales Report. You need to decide what will be the TSQL code for this. For Example, we need to prepare a report which will show the Name of the person and from which territory they have sold in what amount.

First of all, we need to check the TSQL code in SQL server. I have written a simple which will pull up the records of person name and territory name and the sum of sales amount of current year and the last year. Here is my query in SQL server. export data from sql to excel using vbaIf I ran the above query in SQL Server I am getting 17 records. export data from sql to excel using vba macrosNow our intention is something different. We want the same result in Excel. You can copy the result and paste it in Excel sheet that is fine. But if you need to do the same thing every day and then you can simply copy the below code and paste it on VBA page and then connect the code with the button to get data from SQL to Excel, Please follow the below steps to get the result in Excel sheet:

  1. Press Alt + F11 to go the VBA page
  2. Paste the below code
  3. Press F5 or run the code

Read related article:  Merge Multiple Excel Workbooks into a Spreadsheet using Excel Macro

Code:

Option Explicit

'The part extracting the body is taken from here
'https://support.microsoft.com/en-us/kb/306125

Sub GetData()

Dim cnLogs As New ADODB.Connection
Dim rsHeaders As New ADODB.Recordset
Dim rsData As New ADODB.Recordset

Dim l_counter As Long: l_counter = 0
Dim strConn As String

Sheets(1).UsedRange.Clear
strConn = "PROVIDER=SQLOLEDB;"
strConn = strConn & "DATA SOURCE=(local);INITIAL CATALOG=LogData;"
strConn = strConn & " INTEGRATED SECURITY=sspi;"

cnLogs.Open strConn

With rsHeaders
.ActiveConnection = cnLogs

.Open "SELECT * FROM syscolumns WHERE id=OBJECT_ID('LogTable')"
'.Open "SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'LogTable'"
'.Open "SELECT * FROM LogData.INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = N'LogTable'"
'.Open "SELECT * FROM SYS.COLUMNS WHERE object_id = OBJECT_ID('dbo.LogTable')"

Do While Not rsHeaders.EOF
Cells(1, l_counter + 1) = rsHeaders(0)
l_counter = l_counter + 1
rsHeaders.MoveNext
Loop
.Close
End With

With rsData
.ActiveConnection = cnLogs
.Open "SELECT * FROM LogTable"
Sheet1.Range("A2").CopyFromRecordset rsData
.Close
End With

cnLogs.Close
Set cnLogs = Nothing
Set rsHeaders = Nothing
Set rsData = Nothing

Sheets(1).UsedRange.EntireColumn.AutoFit

End Sub

Before running the code you need to change some setting. Go to tools on VBA page and then click on the reference and then select “Microsoft ActiveX Data Objects 2.8 Library and press OK.VBA-page-Reference-ActiveX-Data-ObjectsNow we all are good to go. Now press F5 to run the code. You will notice the same records are there in the excel sheet. Now if the data or any record is updated in the base table in SQL Server you will get the update result. Now all the time you will get the live data. That’s why it is powerful. You can send the file to your manager or boss. He or she will get the updated report all the time. We need to assign the code to the button “Sales Report” we created earlier. Go to that button and then right-click on it and click on “Assign MacroSales-Report-Assign-Macro-SQL-to-Excel-4Then click on “New”. You will be redirected to the new VBA page. Just write “Call DataTakenFromSQLServer”. Finally, you are done. Whenever you click on Sales Report you will get the updated result.VBA-page-Call-DataTakenFromSQLServer-2Now Go back to your sheet. And Click on the “Sales Report”. You will notice that the data is coming in the Excel sheet. Another one thing you will have to be careful that the SQL server service is on the form where the data is coming. Click-Sales-Report-get-Output-SQL-to-Excel Please download the workbook from here and check the code. Please change the SQL server name and database name to check the output of your query. You can also write your own query and check whether it is working or not. Let us know if you have any problem to understand the code. We will help you out.

5 Responses
  1. Yodalearning

    Dear Prateet,
    Please refer this article addressing this query: https://stackoverflow.com/questions/21417922/sql-run-from-excel-cannot-use-a-temporary-table

Leave a Reply

Related Tutorials

Delete Duplicate in Excel or Remove Duplicate in Excel
November 9, 2018
Excel Formulas PDF
September 6, 2018
How To Lock Cells in Excel | Unprotect Excel
August 13, 2018
4x Faster at Excel
August 6, 2018
Separate Content of One Excel Cells into Separate Columns
August 3, 2018
How to Transpose Excel Columns to Rows | Paste Special Method
July 26, 2018
How to create sparklines in Excel
July 19, 2018
AutoSum in Excel with Shortcut
July 17, 2018
OFFSET Function in Excel
July 6, 2018
Strikethrough Shortcut in Excel & Word
July 4, 2018
INDIRECT Function with SUM, MAX, MIN & Independent Cell Value
June 29, 2018
Pivot Table Slicers In Excel
June 12, 2018
How to Split Cells in Excel using Text to Column
June 7, 2018
How to Wrap Text in Excel Automatically and Manually
June 6, 2018
How to Hide/Unhide Column in Excel
June 5, 2018
Highlight row based on cell value
June 4, 2018
Learn how to remove blank cells in Excel
June 3, 2018
How to Group Numbers, Dates & Text in Pivot table in Excel
June 1, 2018
5 Powerful Tricks to Format cells in Excel
May 31, 2018
Insert a Picture into a Cell in Excel
May 25, 2018
What is ISFORMULA Function and FORMULATEXT Function
May 21, 2018
How to Use SUBSTITUTE Function
May 21, 2018
Excel Quartile Function in Excel
May 8, 2018
How to use the Excel PERCENTILE function
May 7, 2018
Insert or Type degree symbol in Excel with Autocorrect Feature
May 7, 2018
25% Discount
No prize
All Courses at $200
Almost!
10% Discount
Free Ebook
No Prize
No luck today
Almost!
50% Discount
No prize
80% Discount
Get a chance to boost your knowledge!
Use this coupon code for any course that you wish for. 
Our in-house rules:
  • You can choose any course & redeem coupon
  • If you find any difficulty, mail us on [email protected]
  • Wheel Spin will end soon
  • Coupon code can be applied within 2 days.