While what Ameer wrote looks like it will work, it still uses the dreaded & disallowed integral function. I'm adding this answer because I think many people can benefit from the ideas of how to use ODE45 as a general integration tool, to explain what is needed. In fact, I can think of a few cases where I have indeed used ODE45 to do a numerical integration when others might have just looked at integral. As well, I would add that what you tried would definitely not work, but it does move in the general desired direction.
The trick is to see that ODE45 is just a variation of a numerical integration code, that integrates starting from one end of the interval (typically the left) and works to the right. tspan gives the limits of integration.
Here lambda is the independent variable, and T is a parameter that we need to make the result a function thereof. Be careful, as it is easy to get variable names confused, even though ODE45 uses t in the call. Here lambda takes the place of t in ODE45. The clue there is the d(lambda) in the integral.
You will be integrating M_e(lambda,T), with M_s(T) being the final result. And apparently, we are not asked to see the integral as a function of lambda, but only the final value at the end of the interval. With all of that explained, let me now explain the code I will write.
The function handle m_e encapsulates the current values of each of h, c, k, and a. However it is a function of lambda and T.
What does ODE45 expect though? It wants something of the general form
dy/dt = F(t,y)
Again, BE CAREFUL! Here t is lambda, but y is the unknown, M_s. (I think that was an s. The picture of your equation was just a bit fuzzy though. Hard on these bleery eyes.) In fact, M_s never appears in the kernel of the integration, so we need not worry about it.
One other problem. An ODE solver, just like any integration includes an arbitrary constant of integration. When you supply the initial value for the ODE solver, that allows it to resolve the arbitrary constant. It seems logical to call that value 0 here, but I'm not the person to know, and I'm feeling far too lazy to do some real thinking for the moment. (Hey, its hot out today!) With all of that explained...
function M_s = myplanck(T)
m_e = @(lambda,T) a./lambda.^5./(exp(h*c/k./lambda./T)-1);
M_s0 = 0;
tspan = [4e-7,7e-7];
ODEFUN = @(lambda,y) m_e(lambda,T);
[~,yout] = ode45(ODEFUN,tspan,M_s0);
M_s = yout(end);
Now what are the odds I did this all, while making no overt mistakes? Sometimes I get lucky. Really though, luck favors the prepared. And when you write code very carefully, it can work the first time. You need to think it through to the end, and visualize how everything interacts. Then the entire thing becomes easy.
That seems consistent with what Ameer wrote, using integral.
The trick is to understand what the ODE solver wants, as well as to see through the variable names. Don't allow yourself to get confused by things. You also need to see how the variables get passed around, for example, what uses T, and how does that variable get passed into the necessary functions.
Finally, be careful. Suppose you next wanted to make this code work for multiple values of T? While the code I wrote will fail if you passed in a vector of values for T, the simplest solution would be to create a loop inside the myplanck function. The loop would operate on each element of the vector T, one at a time. So some slight additional complexity, but not a lot.