I am not aware of anything that has changed.
Here is a copy of the ConcatRelated function I used in my sample that I have been using for years.
Originally 2003, then 2010 and now O365.
Code:
'---------------------------------------------------------------------------------------
' Procedure : ConcatRelated
' Author : AllenBrowne
' Date : 12-11-2011
' Purpose :
'---------------------------------------------------------------------------------------
' Last Modified:
'
' Inputs: N/A
' Dependency: N/A
'--------------------------------------------------------------------------
'
Public Function ConcatRelated(strField As String, _
strTable As String, _
Optional strWhere As String, _
Optional strOrderBy As String, _
Optional strSeparator = " , ") As Variant ' was " , "
10 On Error GoTo Err_Handler
'Purpose: Generate a concatenated string of related records.
'Return: String variant, or Null if no matches.
'Arguments: strField = name of field to get results from and concatenate.
' strTable = name of a table or query.
' strWhere = WHERE clause to choose the right values.
' strOrderBy = ORDER BY clause, for sorting the values.
' strSeparator = characters to use between the concatenated values.
'Notes: 1. Use square brackets around field/table names with spaces or odd characters.
' 2. strField can be a Multi-valued field (A2007 and later), but strOrderBy cannot.
' 3. Nulls are omitted, zero-length strings (ZLSs) are returned as ZLSs.
' 4. Returning more than 255 characters to a recordset triggers this Access bug:
' http://allenbrowne.com/bug-16.html
Dim rs As DAO.Recordset 'Related records
Dim rsMV As DAO.Recordset 'Multi-valued field recordset
Dim strSQL As String 'SQL statement
Dim strOut As String 'Output string to concatenate to.
Dim lngLen As Long 'Length of string.
Dim bIsMultiValue As Boolean 'Flag if strField is a multi-valued field.
'Initialize to Null
20 ConcatRelated = Null
'Build SQL string, and get the records.
30 strSQL = "SELECT " & strField & " FROM " & strTable 'distinct jed@@@@@
40 If strWhere <> vbNullString Then
50 strSQL = strSQL & " WHERE " & strWhere
60 End If
70 If strOrderBy <> vbNullString Then
80 strSQL = strSQL & " ORDER BY " & strOrderBy
90 End If
100 Set rs = DBEngine(0)(0).OpenRecordset(strSQL, dbOpenDynaset)
'Determine if the requested field is multi-valued (Type is above 100.)
110 bIsMultiValue = (rs(0).Type > 100)
'Loop through the matching records
120 Do While Not rs.EOF
130 If bIsMultiValue Then
'For multi-valued field, loop through the values
140 Set rsMV = rs(0).Value
150 Do While Not rsMV.EOF
160 If Not IsNull(rsMV(0)) Then
170 strOut = strOut & rsMV(0) & strSeparator
180 End If
190 rsMV.MoveNext
200 Loop
210 Set rsMV = Nothing
220 ElseIf Not IsNull(rs(0)) Then
230 strOut = strOut & rs(0) & strSeparator
240 End If
250 rs.MoveNext
260 Loop
270 rs.Close
'Return the string without the trailing separator.
280 lngLen = Len(strOut) - Len(strSeparator)
290 If lngLen > 0 Then
300 ConcatRelated = Left(strOut, lngLen)
310 End If
Exit_Handler:
'Clean up
320 Set rsMV = Nothing
330 Set rs = Nothing
340 Exit Function
Err_Handler:
350 MsgBox "Error " & Err.Number & ": " & Err.Description, vbExclamation, "ConcatRelated()"
360 Resume Exit_Handler
End Function