Microsoft Access has its good points and its bad points. One mostly nice point is that you can use a Visual Basic function to calculate a query result. For example:

Select Field1, Field2, MyVbaFunction(Field3)


But I wanted to do a “select into” and to have MyVbaFunction return a long string. Something like

SELECT col1, col2, MyVbaFunctionReturning1000ByteString(Field3)
INTO newtable
FROM table1


The trouble is, Access assumes field types. It assumes type of text(255) for any function which returns a string. So my 1000 byte result was getting truncated to 255 characters.

There really is no good work-around. You can’t tell a VBA function to return a memo. VBA doesn’t know about ‘memo.’ My hack was to do this in multiple steps.

First, run the query in a simplified form:

SELECT col1, col2, "dummy" as dummy
INTO newtable
FROM table1


Then edit the field definitions for table1 and change the 3rd column into a Memo column.

Finally, run this SQL:

update table1 set dummy = MyVbaFunctionReturning1000ByteString(Field3)


But… If you copy/paste this data from Access into Excel, it still gets truncated in Excel!