A few days ago, a reader asked a question about using parameters in Power Query; they wanted to auto-refresh Power Query whenever a parameter changes.
“One question, how do you set the query to refresh automatically when a value changes.”
I’ve not tried this before, but I can understand the benefits. It reduces the need to click Refresh and creates behavior that is closer in nature to standard Excel formulas. So, it sounded like a question that deserved its own post.
This is the result we are trying to achieve:
Download the example file
I recommend you download the example file for this post. Then you’ll be able to work along with examples and see the solution in action, plus the file will be useful for future reference.
Download the file: 0013 Auto refresh Power Query.zip
Auto refresh power query with a macro
There are two ways for Excel to trigger events when cell values change:
- User Defined Function (UDF)
- Worksheet change event
I love using UDFs to control objects in Excel, such as changing tab colors, or setting the min and max of a chart axis. However, I tried a UDF for this auto-refresh scenario, but it just wasn’t stable and caused Excel to crash. If you manage to achieve this, please let me know in the comments so we can all learn from your VBA mastery 🙂
That leaves option 2, the worksheet change event.
- Go into the Visual Basic Editor by clicking Developer -> Visual Basic (if you’ve not got the Developer ribbon visible, you can use the keyboard short cut Alt + F11).
- Open the code module for the worksheet that contains the parameter. In the example file, the Query Output tab contains the cell with the parameter.
- Copy the following code into the sheet module.
Sub Worksheet_Change(ByVal Target As Range) If Target.Address = Me.Range("G6").Address _ Or Target.Address = Me.Range("G3").Address _ Then ActiveWorkbook.Connections("Query - SalesData").Refresh End If End Sub
- Next, adapt the code to your scenario by changing the following:
The cell references (highlighted purple in the code above) are the cells containing your parameters. In the example file, there are two parameters in cells G6 and G3.
The name of the query (highlighted green in the code above) will be the string “Query – “ + name of the query to refresh. In the example file, the query is called SalesData. Therefore the full string is Query – SalesData
If you need more or less parameters, then add or remove instances of the following line of code:Or Target.Address = Me.Range("G3").Address _
- Close the Visual Basic Editor
That’s it; now the macro is ready for use. Change the parameter and watch the macro automatically update the query.
NOTES:Workbooks that contain macros cannot be saved as .xlsx files. Instead, we need to use the .xlsm format.
As standard Excel behavior, when a macro executes, the Undo stack is cleared. Therefore you will not be able to use the Undo feature after the macro runs.
Another option – refresh every n minutes
Another option, which doesn’t quite meet the reader’s requirements, but which might meet yours, is to automatically refresh the query at set intervals. Doing this:
-
- Avoids macros and therefore we can use the standard .xlsx file type
- Still avoids the need to click refresh
- Won’t provide an instant update, so does not emulate formula behavior of automatically recalculating
To implement this:
- From the ribbon select Data -> Queries & Connections
- Right-click on the query and select Properties… from the menu.
- Tick the Refresh Every n Minutes option and enter a time interval.
- Click OK to close the Query Properties dialog box.
The query will now automatically refresh at the set interval. It if meets your requirements, it is a better option than a macro.
What next?
If your query is loaded directly into a Pivot Table, then this post by Jon Acampora will be a good next step.
Or, if you want to know more about using the Power Query editor, check out this post.

About the author
Hey, I’m Mark, and I run Excel Off The Grid.
My parents tell me that at the age of 7 I declared I was going to become a qualified accountant. I was either psychic or had no imagination, as that is exactly what happened. However, it wasn't until I was 35 that my journey really began.
In 2015, I started a new job, for which I was regularly working after 10pm. As a result, I rarely saw my children during the week. So, I started searching for the secrets to automating Excel. I discovered that by building a small number of simple tools, I could combine them together in different ways to automate nearly all my regular tasks. This meant I could work less hours (and I got pay raises!). Today, I teach these techniques to other professionals in our training program so they too can spend less time at work (and more time with their children and doing the things they love).
Do you need help adapting this post to your needs?
I'm guessing the examples in this post don't exactly match your situation. We all use Excel differently, so it's impossible to write a post that will meet everybody's needs. By taking the time to understand the techniques and principles in this post (and elsewhere on this site), you should be able to adapt it to your needs.
But, if you're still struggling you should:
- Read other blogs, or watch YouTube videos on the same topic. You will benefit much more by discovering your own solutions.
- Ask the 'Excel Ninja' in your office. It's amazing what things other people know.
- Ask a question in a forum like Mr Excel, or the Microsoft Answers Community. Remember, the people on these forums are generally giving their time for free. So take care to craft your question, make sure it's clear and concise. List all the things you've tried, and provide screenshots, code segments and example workbooks.
- Use Excel Rescue, who are my consultancy partner. They help by providing solutions to smaller Excel problems.
What next?
Don't go yet, there is plenty more to learn on Excel Off The Grid. Check out the latest posts:
Thanks; this helped me achieve my purpose
Hello. Could you help me please?
I want to know if I set the refresh every n minutes on background, when I close the sheet, does it work or not?
Hi Tiago – I don’t think it does. But why not just try it out and see what happens, then you’ll know for sure.
Can I use this to refresh a second query on a different sheet? I’ve tried:
Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = Me.Range(“G6”).Address _
Or Target.Address = Me.Range(“G3”).Address _
Then
ActiveWorkbook.Connections(“Query – Query1”).Refresh
ActiveWorkbook.Connections(“Query – Query2”).Refresh
End If
End Sub
This doesn’t refresh Query2. No errors appear.
Hi Andrew
Yes, you can refresh a query on another page using this method.
But it will only work if the query parameter is also pointing to the cell on the other page, or cell linked to the parameter. Otherwise it will keep refreshing the query using the same parameters.
Thanks, this help me get what I needed
Another option – refresh every n minutes
Hi, hope you are doing good.
I have created a report using power query and it is connected to a csv file. The report is saved in a SharePoint folder. I want that power query of the report should be be refreshed in every 30 minutes, so per as your tutorial I go the query and click on properties and set –refresh every 30 minutes. But unfortunately it didn’t work. Could you please tell me what is the problem here or what I am missing? I need to sort this urgently . Please reply at earliest.
Thanks in Advance!
Hi Shantanu – this is an educational site and not a help site. If you require urgent help, I recommend you try one of the help forums like Mr Excel – https://www.mrexcel.com/board/
Greetings, first of all, thanks for the amazing article. I learned so much from this real-world example.
I am trying to achieve the VB-script option, but i’m struggling. Maybe you can assist me with the debug. I am trying to adapt the refresh-code.
My case:
– I have an Excel which keeps track of hours worked by volunteers. These hours are noted down in a table on the ‘hours worked’ sheet.
– I have 1 output sheet (like in the example)
– On the output sheet, I have 13 tables, one for each volunteer. The table uses a query to retrieve all their specific worked hours from the ‘hours worked’ tab.
-Each table has their own connections. I renamed all the connections ‘Hours_volunteer1’ to ‘Hours_volunteer13’.
-Each table has 1 input variable, the name of the volunteer.
I attempted to adjust the VBA script in the following way:
Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = Me.Range(“J2”).Address _
Then
ActiveWorkbook.Connections(“Query – Hours_volunteer1”).Refresh
ElseIf Target.Address = Me.Range(“J14”).Address _
Then
ActiveWorkbook.Connections(“Query – Hours_volunteer2”).Refresh
End If
End Sub
Unfortunately I am receiving an ‘Subscript out of range (Error 9)’ error.
Do you have any suggestions what I could change to get this to work?
Thanks in advance!,
Marco
The ‘Subscript out of range (Error 9)’ is because VBA can’t find something that you’ve told it to find. Based on the code, it looks like it cannot find the queries that you’ve named (i.e. the names are wrong, or maybe have a typo)
I have written the following macro for you which will list the queries in the activeWorkbook. Then you can compare the names you’ve used to ensure they are identical.
Hope that helps.
I’m wondering what I’m doing incorrectly. I followed the instructions. When I change the parameter, something does happen, I see a flash of “Calculating ….” in the status bar but nothing happens to the data. I downloaded the example and got the same thing – some calculation is going on but nothing happens to the data, unlike in your clip. Am I missing something or my settings are different?
Hi Kavin – I’ve rechecked the file and it’s still working for me.
I’m not sure what might cause that, but the things I would check are:
(a) Are you in manual calculation mode
(b) Have you enabled the content (clicking the yellow button at the top).
(c) Are macros enabled
When I do a refresh…refreshed cell is automatically highlighted after each refresh and how to disable automatic highlighting of refreshed cell
I think VBA is only the only way to do that.
I downloaded the file you provided but upon selecting a different name under sold by, the information does not change. That being said, I’m not sure the download works?
The file contains a macro, so you will probably need to unblock the file. Find instructions here: https://exceloffthegrid.com/unblock-macros-downloaded-from-the-internet/
Another option – refresh every n minutes
Exactly what I searched for. Thanks!
Yes, that will automatically refresh too.