Я генерирую заголовки из нескольких других полей, и мне нужен «правильный» способ:
Me.Title.Value = Join(Array([Conference], [Speaker], partstr), " - ")
За исключением того, что любой из [конференция], [докладчик] или partstr может иметь значение null, и мне не нужны лишние "-". Есть ли какие-нибудь функции, которые упростят эту работу?



Нет - вам нужно будет проверить каждую, а затем очистить в конце
Dim Temp As String
If Not IsNull([Conference]) Then
Temp = Temp & [Conference] & " - "
End If
If Not IsNull([Speaker]) Then
Temp = Temp & [Speaker] & " - "
End If
If Not IsNull(partstr) Then
Temp = Temp & partstr & " - "
End If
If Temp > "" then
Me.Title.Value = Left(Temp, Len(Temp) - 3)
Else
Me.Title.Value = Null
End If
Пересмотрено с общей функцией:
Public Function JoinEx(ByVal pArray As Variant, ByVal pDelimiter As String) As String
Dim sTemp As String
Dim iCtr As Integer
For iCtr = 0 To UBound(pArray)
If Not IsNull(pArray(iCtr)) Then
sTemp = sTemp & pArray(iCtr) & pDelimiter
End If
Next
If sTemp > "" Then
JoinEx = Left(sTemp, Len(sTemp) - Len(pDelimiter))
End If
End Function
Пример вызова:
JoinEx(Array("one","two","three"), " - ") 'Returns "One - Two - Three"
JoinEx(Array(null,"two","three"), " - ") 'Returns "Two - Three"
Я чувствую вашу боль - однако, приложив немного больше усилий, вы могли бы создать общую функцию, которая принимает массив и разделитель и возвращает строку.
ах, это больше похоже на это. Я бы дал вам еще один голос, если бы мог.
Эксперты говорят, что объединение поля, возможно, Null, со строкой нулевой длины и проверка ее длины быстрее, чем простая проверка на Null или сравнение объединенного результата с ZLS. И, кстати, всякий раз, когда вам понадобится ZLS в Access VBA, обязательно используйте константу vbNullString вместо "".
Полное переписывание и на этот раз должным образом протестировано:
IIf(IsNull(Partstr), IIf(IsNull(Conference), Speaker, Conference & " - " + Speaker), Conference + " - " & Speaker + " - " & Partstr)
Если один из элементов имеет значение NULL, это превращает весь результат в NULL, чего, я не думаю, хочет OP.
Извините, remou все равно не сработает - если [конференция] имеет значение null, а другие нет - ваше решение вернет «None» вместо «Speaker - Partstr»
Вы правы, поэтому я все это переделал, уделив больше внимания :(
Я все еще надеюсь на лучший ответ, я сделаю это несколько раз и не хочу дублировать столько кода.