Two reasons immediately come to mind:
If you give someone money, they can spend it on whatever they want. You may want the receiving country/organization/entity to use it for medical supplies, food, sanitation, education, etc. but once you give them money, they can just as easily use it for weapons, terrorism, luxuries (e.g., a fancy new home for the leaders), etc. Giving money can be incredibly helpful, but it makes corruption and/or use in ways you don't want (including use against the donor country) much easier than if you donate goods & services.
If you donate $1,000 to buy supplies, and somehow make sure the recipient buys the supplies you want them to buy, they may buy those supplies from another country, even from one of your enemies. On the other hand, if you donate $1,000 of supplies, you not only make sure that the $1,000 is spent the way you want it to be spent, that $1,000 actually comes back to suppliers in your own country. Which helps your own people - i.e., you help the recipient while giving money/jobs/etc. to your citizens. This is taken to an extreme with military aid - millions for fighter planes (or other equipment) that can only be spent with the donor country's military suppliers is great for the donor country. (Lobbyists for military suppliers seem to like this...)
This is not a perfect system. In particular, money spent this way may not be as cost-effective. Shipping $100,000 of supplies on military aircraft to a disaster area half-way around the world makes a great photo op. But it could easily be that spending that same $100,000 locally would buy twice as much in supplies and help many more people. But then again, give a street beggar $5 and will he buy a bottle of booze or a nutritious meal?