--Boundary_(ID_+WBud704OKgSkPMEb6IBig) Content-type: text/plain; charset=US-ASCII; format=flowed; delsp=yes Content-transfer-encoding: 7BIT On Jan 5, 2010, at 9:46 AM, Chuck Remes wrote: > I need to pass a VB Date object to a COM object using win32ole. I > have tried passing in a string (e.g. "2009/12/10 08:00:00") and also > parsing a date string into a Ruby DateTime object, but the COM > object rejects it since it is not a VB Date object. > > Any idea how I can create such an object from my Ruby code? > > I get this error > > #<WIN32OLERuntimeError: (in setting property 'RangeStart': ) > OLE error code:80004005 in <Unknown> > Only date and integer types are allowed for RangeStart> I answered my own question. You need to use the WIN32OLE::VARIANT to create your parameter as the correct type. This is for MRI 1.8.x First, get the dispatch ID of the property/method to which you need to pass the parameter. the_method le_object.ole_method_help('RangeStart') Second, call _setproperty on the_method, pass in your args and pass in the types of those args. ole_object._setproperty(the_method.dispid, ["2009/12/01 08:00:00"], [WIN32OLE::VARIANT::VT_DATE]) Note that _setproperty expects the args and variant types to be arrays. I hope this helps someone. cr --Boundary_(ID_+WBud704OKgSkPMEb6IBig)--