2008-11-25 3 views
2

Я генерация названия из нескольких других областей, и хотят «правильный» способ сделать:Как отфильтровать нулевые элементы массива в MS Access

Me.Title.Value = Join(Array([Conference], [Speaker], partstr), " - ") 

За исключением любого из [конференции] , [speaker] или partstr может быть нулевым, и я не хочу дополнительных «-». Существуют ли какие-либо функции, которые сделают эту работу простой?

ответ

2

Неа - вы должны проверить каждый из них и затем очистку в конце

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" 
+0

Я все еще надеюсь на лучший ответ, я сделаю это несколько раз и не хочу дублировать так много кода. – Thelema 2008-11-25 19:24:04

+0

Я чувствую вашу боль, но с небольшой работой вы можете создать общую функцию, которая принимает массив и разделитель и возвращает строку. – 2008-11-25 19:27:51

0

A полная перезапись, и на этот раз правильно протестировано:

IIf(IsNull(Partstr), IIf(IsNull(Conference), Speaker, Conference & " - " + Speaker), Conference + " - " & Speaker + " - " & Partstr) 
Смежные вопросы