Function IsInArray(stringToBeFound As String) As Long Dim k As Long ' default return value if value not found in array IsInArray = -1 For k = LBound(aShips) To UBound(aShips) If StrComp(stringToBeFound, aShips(k).Name, vbTextCompare) = 0 Then IsInArray = k Exit For End If Next k End Function
[/vba]
Невилл, привет попробуйте так [vba]
Код
iNom = IsInArray(FoundShip)
[/vba] [vba]
Код
Function IsInArray(stringToBeFound As String) As Long Dim k As Long ' default return value if value not found in array IsInArray = -1 For k = LBound(aShips) To UBound(aShips) If StrComp(stringToBeFound, aShips(k).Name, vbTextCompare) = 0 Then IsInArray = k Exit For End If Next k End Function
Только хочется все-таки как-то сохранить "универсальность" функции. Чтобы можно было, например, в одном месте искать по имени (Name), а в другом по Length, например.
Что-то в этом духе: [vba]
Код
Function IsInArray(stringToBeFound As String, arr As Variant, subtype As String) As Long Dim k As Long ' default return value if value not found in array IsInArray = -1 For k = LBound(arr) To UBound(arr) If StrComp(stringToBeFound, arr(k).subtype, vbTextCompare) = 0 Then IsInArray = k Exit For End If Next k End Function
[/vba]
Но получаю теперь другую ошибку.
iNom = IsInArray(FoundShip, aShips, Name)
Наверное, что-то не так делаю с передачей массива в функцию (так можно хоть вообще?) или с типом/декларированием третьего аргумента.
Сам еще попробую придумать что-то. Благодарю!
Спасибо огромное! Работает отлично.
Только хочется все-таки как-то сохранить "универсальность" функции. Чтобы можно было, например, в одном месте искать по имени (Name), а в другом по Length, например.
Что-то в этом духе: [vba]
Код
Function IsInArray(stringToBeFound As String, arr As Variant, subtype As String) As Long Dim k As Long ' default return value if value not found in array IsInArray = -1 For k = LBound(arr) To UBound(arr) If StrComp(stringToBeFound, arr(k).subtype, vbTextCompare) = 0 Then IsInArray = k Exit For End If Next k End Function
[/vba]
Но получаю теперь другую ошибку.
iNom = IsInArray(FoundShip, aShips, Name)
Наверное, что-то не так делаю с передачей массива в функцию (так можно хоть вообще?) или с типом/декларированием третьего аргумента.
Сам еще попробую придумать что-то. Благодарю!Невилл
Наверное, что-то не так делаю с передачей массива в функцию
массив передавать и не нужно, т.к. он у вас глобальный уровня проекта (Public) и (имхо) лучше 2-мерные массивы (типы никогда не использую, - просто не знаю, куда бы их прикрутить) вот посмотрите файлик
Наверное, что-то не так делаю с передачей массива в функцию
массив передавать и не нужно, т.к. он у вас глобальный уровня проекта (Public) и (имхо) лучше 2-мерные массивы (типы никогда не использую, - просто не знаю, куда бы их прикрутить) вот посмотрите файликnilem
Апострофф, ахахах, мне как раз шашечки))) У меня в прошлой версии кода так и было. Я просто хотел проверить, какой вариант кода будет работать быстрей.
nilem, угу, еще раз спасибо)) Я вот тоже не использую обычно их, подумал, что тут как раз подойдет неплохо. Да и названия переменных покрасивше смотрелись бы.
Апострофф, ахахах, мне как раз шашечки))) У меня в прошлой версии кода так и было. Я просто хотел проверить, какой вариант кода будет работать быстрей.
nilem, угу, еще раз спасибо)) Я вот тоже не использую обычно их, подумал, что тут как раз подойдет неплохо. Да и названия переменных покрасивше смотрелись бы.Невилл