You need to execute asynchronously and wait for it to complete. Please note that it will slow you down if you wait for each command to execute until triggering the next.
cn.Execute sqlString, , adAsyncExecute
Do While cn.state = adStateOpen + adStateExecuting
' wait for command to finish
' perhaps show a status here
Loop
ActiveWorkbook.Connections("Murph Ingredient").Refresh
We have to check for a combination of states per the State Property documentation
You can use the State property to determine the current state of a given object at any time. The object's State property can have a combination of values. For example, if a statement is executing, this property will have a combined value of adStateOpen and adStateExecuting.
Further Reading: