Use the DateSerial function:
spCommand.Parameters(1).Value = DateSerial(2016,1,6)
and, if you need it, optionally the TimeSerial function:
spCommand.Parameters(2).Value = DateSerial(2016,1,6) + TimeSerial(23,59,59)
VBA doesn't have a datetime type
Yes, it does:
Dim dtDateTime as Date
dtDateTime = DateSerial(2016,1,6) + TimeSerial(23,59,59)
UPDATE
Following your edit, I see that the Parameters collection has three items. The first is a return parameter, and the second and third are input parameters of type adDBTimeStamp.
Also the Command.NamedParameters property is false, so you probably can't use named parameters as you seem to be attempting to do in the screenshot accompanying your edit.
UPDATE 2
VBA collections are indexed starting at 1, not 0, so you should be specifying your parameters as:
spCommand.Parameters(2).Value = ...
spCommand.Parameters(3).Value = ...
I think the above is wrong. Standard VB/VBA collections are indexed, starting at 1. I believe the rationale, mistaken in my view, was that 1-based indexes are "more intuitive".
When ADO was developed, I believe Microsoft realized that 1-based collections had been a mistake, and decided to make ADO collections 0-based. This makes them inconsistent with standard collections, but "more intuitive" to, say, javascript developers. What an inconsistent mess.
If I'm right (and it's a long time since I used ADO, and I haven't tested this), then you need:
spCommand.Parameters(1).Value = ...
spCommand.Parameters(2).Value = ...
which should eliminate your 3265 error, but doesn't solve your original problem. Your debug trace appears to show that the parameters have been set to the expected values. I can only suggest you try to generate an MCVE, including a simplified version of the Stored Procedure in question.