VBA InStr Excel vs Access. Access функция instr


Функция InStr | Microsoft Docs

  • 06/08/2017
  • Время чтения: 2 мин
  • Соавторы

В этой статье

Возвращает значение Variant (Long), указывающее положение первого появления одной строки внутри другой.Returns a Variant (Long) specifying the position of the first occurrence of one string within another.

СинтаксисSyntax

InStr ([ Пуск], string1 string2 [, Сравнение ]) В синтаксисе функции InStr используются следующие аргументы:InStr ([ start, ] string1, string2 [, compare ]) The InStr function syntax has these arguments:

ЧастьPart ОписаниеDescription
startstart Необязательно указывать.Optional. Числовое выражение , которое задает позицию для каждого поиска.Numeric expression that sets the starting position for each search. Если этот параметр опущен, поиск начинается с первого знака.If omitted, search begins at the first character position. Если запустить содержит значение Null, возникает ошибка.If start contains Null, an error occurs. Запустите аргумент является обязательным, если Сравнить указано.The start argument is required if compare is specified.
string1string1 Обязательно указывать.Required. Строковое выражение , выполняется поиск.String expression being searched.
Строка string2string2 Обязательно указывать.Required. Искомое строковое выражение.String expression sought.
Средство сравненияcompare Необязательно указывать.Optional. Указывает тип сравнения строк.Specifies the type of string comparison. Если Сравнение имеет значение Null, возникает ошибка.If compare is Null, an error occurs. Если Сравнить опущен, параметр Option Compare определяет тип сравнения.If compare is omitted, the Option Compare setting determines the type of comparison. Укажите допустимое значение LCID (LocaleID) для использования правил языкового стандарта для сравнения.Specify a valid LCID (LocaleID) to use locale-specific rules in the comparison.

ПараметрыSettings

Настройки Сравнение аргумент, как показано ниже.The compare argument settings are as follows.

КонстантаConstant ЗначениеValue ОписаниеDescription
vbUseCompareOptionvbUseCompareOption -1-1 Выполняет сравнение, используя параметр оператора Option Compare .Performs a comparison using the setting of the Option Compare statement.
vbBinaryComparevbBinaryCompare 00 Выполняет сравнение двоичных файлов.Performs a binary comparison.
vbTextComparevbTextCompare 11 Выполняет сравнение текстовых файловPerforms a textual comparison.
vbDatabaseComparevbDatabaseCompare 22 Microsoft Access.Microsoft Access only. Выполняет сравнение на основе сведений в базе данных.Performs a comparison based on information in your database.

Возвращаемые значенияReturn values

ЕслиIf InStr возвращаетInStr returns
Строка string1 является строкой нулевой длиныstring1 is zero-length 00
Строка string1 содержит Nullstring1 is Null NullNull
Строка string2 является строкой нулевой длиныstring2 is zero-length startstart
Строка string2 содержит Nullstring2 is Null NullNull
Строка string2 не найденаstring2 is not found 00
Строка string2 найдена в строке string1string2 is found within string1 Позиция, в которой найдено совпадениеPosition at which match is found
Запустите > string2start > string2 00

ПримечанияRemarks

Функция InStrB используется байтов данные, содержащиеся в строке.The InStrB function is used with byte data contained in a string. Положение первого появления одной строки внутри другой символ, InStrB возвращает позиции.Instead of returning the character position of the first occurrence of one string within another, InStrB returns the byte position.

ПримерExample

В этом примере функция InStr используется для возвращения положение первого появления одной строки внутри другой.This example uses the InStr function to return the position of the first occurrence of one string within another.

Dim SearchString, SearchChar, MyPos SearchString ="XXpXXpXXPXXP" ' String to search in. SearchChar = "P" ' Search for "P". ' A textual comparison starting at position 4. Returns 6. MyPos = Instr(4, SearchString, SearchChar, 1) ' A binary comparison starting at position 1. Returns 9. MyPos = Instr(1, SearchString, SearchChar, 0) ' Comparison is binary by default (last argument is omitted). MyPos = Instr(SearchString, SearchChar) ' Returns 9. MyPos = Instr(1, SearchString, "W") ' Returns 0.

docs.microsoft.com

Функция InStr

Возвращает значение Variant (Long), указывающее положение первого появления одной строки внутри другой.

Синтаксис

InStr([start, ]string1, string2[, compare])

В синтаксисе функции InStr используются следующие аргументы:

Аргумент

Описание

start

Необязательный. Численное выражение, задающее начальное положение для каждого поиска. Если этот аргумент опущен, поиск начинается с первого знака строки. Если аргумент start содержит Null, возникает ошибка. Аргумент start является обязательным, если задан аргумент compare.

string1

Обязательный. Строковое выражение, в котором выполняется поиск.

string2

Обязательный. Искомое строковое выражение.

compare

Необязательный. Определяет тип сравнения строк. Если аргумент compare содержит Null, возникает ошибка. Если аргумент compare опущен, тип сравнения определяется значением Option Compare. Укажите правильный идентификатор региональных настроек LCID (LocaleID), чтобы использовать при сравнении правила, соответствующие региональным настройкам.

Значения

Возможны следующие аргументы compare:

Константа

Значение

Описание

vbUseCompareOption

-1

Выполняет сравнение, используя значение оператора Option Compare.

vbBinaryCompare

0

Выполняет сравнение двоичных файлов.

vbTextCompare

1

Выполняет сравнение текстовых файлов

vbDatabaseCompare

2

Только Microsoft Access. Выполняет сравнение на основе информации из базы данных.

Возвращаемые значения

Если

InStr возвращает

Строка string1 является строкой нулевой длины

0

Строка string1 содержит Null

Null

Строка string2 является строкой нулевой длины

start

Строка string2 содержит Null

Null

Строка string2 не найдена

0

Строка string2 найдена в строке string1

Позиция, в которой найдено совпадение

start > string2

0

Замечания

Функция InStrB использует содержащиеся в строке байтовые данные. Вместо возвращения положения знака первого появления одной строки внутри другой InStrB возвращает положение байта.

Пример

В этом примере функция InStr используется для возвращения положение первого появления одной строки внутри другой.

Dim SearchString, SearchChar, MyPos SearchString ="XXpXXpXXPXXP" ' String to search in. SearchChar = "P" ' Search for "P". ' A textual comparison starting at position 4. Returns 6. MyPos = Instr(4, SearchString, SearchChar, 1) ' A binary comparison starting at position 1. Returns 9. MyPos = Instr(1, SearchString, SearchChar, 0) ' Comparison is binary by default (last argument is omitted). MyPos = Instr(SearchString, SearchChar) ' Returns 9. MyPos = Instr(1, SearchString, "W") ' Returns 0.

technet.microsoft.com

vba - VBA InStr Excel vs Access

TL; DR - В Access немедленное окно не содержит выражения Option Compare на уровне модуля, но по умолчанию используется другое значение по умолчанию, чем Excel, и другое значение по умолчанию для модуля доступа, который не включает оператор Option Compare , , Переходим к выводам для конкретной информации.

Оператор Option Compare имеет Intellisense, который предполагает, что значение должно быть членом VbCompareMethod:

  • vbBinaryCompare = 0
  • vbTextCompare = 1
  • vbDatabaseCompare = 2 'Ошибка выполнения 5, если используется в не-Access VBA

Тем не менее, документация Microsoft для InStr идет дальше и указывает, что значение Compare также может быть vbUseCompareOption = -1, но vbUseCompareOption не находится в Обозревателе объектов и разрешает необъявленную Empty в окне Immediate как в Excel, так и в Access:

?IsEmpty(vbUseCompareOption) True

Кроме того, попытка использовать литеральное значение -1 в качестве аргумента Compare приводит к Runtime error 5: Invalid procedure call or argument, поэтому Runtime error 5: Invalid procedure call or argument не для доверия.

И пытаясь использовать vbUseCompareOption в модуле с Option Explicit установите результаты в Compile Error: Variable not defined, поэтому расслабление правила Option Explicit позволяет использовать следующие две строки:

strcomp("A", "a", vbUseCompareOption) strcomp("A", "a", Empty)

В документации также указано, что вы можете предоставить идентификатор локали, например: 1033 для англо-английского или 1036 для франко-французских. Я не знаю каких-либо различий в сопоставлении между английским и французским языками для тестирования, но могут быть некоторые для различных кодовых страниц, и стоит отметить, что сортировка SQL Server не совпадает с сортировкой Windows, поэтому представляется вероятным, что сопоставление доступа не то же самое, что и расположение Windows. См. Типы сортировки.

Представляется вероятным, что VBA vbTextCompare использует vbTextCompare Windows (или VBA-приправленную), а vbDatabaseCompare (и, возможно, предоставление идентификатора локали) выполняет SQL-сортировку SQL. База данных Access имеет свойство сопоставления, которое может быть прочитано с помощью CurrentDb.CollatingOrder и задано только при использовании в качестве аргумента для DBEngine.CompactDatabase. Вполне вероятно, что VBA использует этот CollatingOrder Locale ID при выполнении vbDatabaseCompare

Неявное сравнение

Но неясно, что такое значение по умолчанию, поэтому вы правы, Excel и Access демонстрируют разные типы поведения в окне Immediate при отсутствии аргумента Compare:

'Excel ?strcomp("A","a") -1 'Access ?strcomp("A","a") 0

Явное сравнение

Но они имеют одинаковые результаты, когда аргумент Compare поставляется со значением vbBinaryCompare или vbTextCompare

'Excel ?strcomp("A","a",vbBinaryCompare) -1 ?strcomp("A","a",vbTextCompare) 0 'Access ?strcomp("A","a",vbBinaryCompare) -1 ?strcomp("A","a",vbTextCompare) 0

Теперь давайте посмотрим, что происходит с каждым параметром Access Option Compare в модуле с различными настройками для Access Option Compare.

Compare Not | Compare | Compare | Compare Statement | specified | Database | Binary | Text | Excel StrComp("A", "a") | -1 | 0 | -1 | 0 | -1 StrComp("A", "a", Empty) | -1 | -1 | -1 | -1 | -1 StrComp("A", "a", vbDatabaseCompare) | 0 | 0 | 0 | 0 | Error StrComp("A", "a", vbBinaryCompare) | -1 | -1 | -1 | -1 | -1 StrComp("A", "a", vbTextCompare) | 0 | 0 | 0 | 0 | 0

наблюдения

  • Когда аргумент Compare не передается StrComp, результаты Access согласуются с Excel, только если Option Compare не указана или указана как Option Compare Binary
  • Когда аргумент Compare не передается в StrComp, результаты Access несовместимы с Excel, как и следовало ожидать, только тогда, когда Access ' Option Compare задается как Option Compare Text или Option Compare Database
  • Когда аргумент Compare передается StrComp, результаты согласованы между Access и Excel, за исключением ошибки, когда vbDatabaseCompare используется с Excel.
  • Когда значение параметра Compare Empty передается в StrComp, результат согласуется с неявным значением по умолчанию vbBinaryCompare. Еще один аргумент в пользу использования Option Explicit, поскольку передача незадекларированной/не назначенной переменной потенциально может привести к неожиданным результатам.
  • Результаты в Access различаются между кодом, выполняемым в окне Immediate, и кодом, выполняемым в модуле с помощью оператора Option Compare.

Выводы

  • В Access код, оцененный в окне Immediate, опускающий аргумент Compare в вызове StrComp, по умолчанию будет StrComp текст.
  • В Access код, выполняемый в модуле, который опускает аргумент Compare в вызове StrComp, по умолчанию устанавливает параметр Option Compare параметров в этом модуле. Если оператор Option Compare отсутствует, модуль по умолчанию будет бинарным, как и Excel.
  • В хостах без доступа к VBA (например, Excel) весь код, который опускает необязательный Compare аргумент, по умолчанию будет использовать Binary Compare.

qaru.site

Access 2007 - Стр 26

Функции для обработки дат

Вы уже видели, как можно использовать операции сложения и вычитания при работе с датами

(см. разд. "Поля с датами "ранее в этой главе). Но вы можете выполнить гораздо больше действий с помощью некоторых функций Access для работы с датами.

Несомненно, многие применяют функции Now () и Date (), с которыми вы познакомились в главе 4. Эти функции извлекают текущие дату и время или только текущую дату. Их можно применять в запросах, работающих с заказами, принесшими доход в текущем году.

Вот условие для выбора просроченных проектов: =<Date ( )

Вставьте его в ячейку Условие отбора поляDueDate (срок платежа) и вы увидите только те записи, в которых полеDueDate содержит дату, наступившую ранее нынешнего дня.

Анализ дат может быть более сложным в сочетании с функцией DatePart (), которая извлекает часть информации из даты. DatePart () может определить номер месяца или год, позволяя игнорировать другие подробности (такие как число или время). С помощью DatePart () и Date () можно легко написать условие фильтрации, отбирающее заказы, сделанные в текущем месяце.

DatePart("m", [DatePlaced])=DatePart("m", Date())

And DatePart("yyyy", [DatePlaced])=DatePart("yyyy", Date ())

Это довольно длинное выражение на самом деле представляет собой комбинацию двух условий, соединенных ключевым словом And. Первое условие сравнивает номер месяца текущей даты с датой, хранящейся в поле DatePlaced:

DatePart("m", [DatePlaced])=DatePart ("m", Date( ))

Приведенное выражение устанавливает, что у обеих дат один и тот же календарный месяц, но вы должны также убедиться в том, что год у них тоже совпадает:

DatePart("yyyy", [DatePlaced])=DatePart("yyyy", Date ( ))

Сложность применения функции DatePart ( ) (и некоторых других функций для дат) заключается в понимании идеи компонентов, составляющих дату. Применяя символ m в функции DatePart ( ), вы получите номер месяца, а используя текст уууу, извлечете четерехсимвольный номер года. В табл. 7.5 приведены все возможные варианты.

Таблица 7.5. Компоненты даты

Компонент

Описание

Значение на 20 февраля, 2006 г. 1:30 РМ

уууу

Год в четырехсимвольном формате

2006

 

 

 

q

Квартал от 1 до 4

1

 

 

 

т

Месяц от 1 до 12

2

 

 

 

у

День в году, от 1 до 365 (обычно)

51

 

 

 

d

День в месяце от 1 до 31

20

w

День недели, от 1 до 7

2

studfiles.net

Функция Asc - Access

Возвращает значение типа Integer, представляющее код знака, который соответствует первой букве строки.

Синтаксис

Asc ( строка )

Обязательный аргументстрока — это любое допустимое строковое выражение. Если строка не содержит знаков, происходит ошибка во время выполнения.

Замечания

Диапазон возвращаемых значений составляет 0–255 для систем, не использующих двухбайтовую кодировку (DBCS), и -32768–32767 для систем с такой кодировкой.

Примечание: Функция AscB используется с байтовыми данными, содержащимися в строке. Вместо кода знака для первого знака AscB возвращает первый байт. Функция AscW возвращает код знака Юникода, за исключением платформ, на которых Юникод не поддерживается — в этом случае эта функция работает так же, как функция Asc.

Примечание:  Visual Basic для macOS не поддерживает строки Юникода. Поэтому функция AscW(n) не может возвращать знаки Юникода для значений n в диапазоне от 128 до 65535, что возможно в среде Windows. Вместо этого AscW(n) использует "наилучшую замену" для значений Юникода больше 127. В связи с этим не следует использовать AscW в macOS.

Пример

Примечание: В примерах ниже показано, как использовать эту функцию в модуле Visual Basic для приложений (VBA). Чтобы получить дополнительные сведения о работе с VBA, выберите Справочник разработчика в раскрывающемся списке рядом с полем Поиск и введите одно или несколько слов в поле поиска.

В данном примере функция Asc возвращает код знака, соответствующий первой букве строки.

Dim MyNumberMyNumber = Asc("A") ' Returns 65.MyNumber = Asc("a") ' Returns 97.MyNumber = Asc("Apple") ' Returns 65.

support.office.com