Функции VBA не работают, возвращает ошибку. Функции vba access


Как написать функцию на VBA Access 2003 | Info-Comp.ru

Продолжаем осваивать Access 2003, и пришло время поговорить о написании собственных функций на VBA. Мы рассмотрим немного теории, т.е. где создаются эти функции, для чего их пишут, а также как обычно попрактикуемся в этом, в принципе не сложном, деле.

Тему программирования на VBA Access 2003 мы уже немного затрагивали, например, рассматривали встроенные функции и если говорить вообще об Access 2003, то тут мы тоже преуспели, например, освоили группировку данных в отчете.

А сегодня, приступим к более интересной, как мне кажется, теме это написание своих функций на языке VBA.

Что такое пользовательские функции VBA и зачем их пишут

Это функции, которые пишет сам программист для упрощения остального кода программы.

Что здесь понимается под упрощением, и для чего вообще нужно писать такие функции, я решил объяснить по пунктам, так как это будет более понятно для начинающих, да и просто для восприятия:

  • И в первом пункте сразу хотелось бы отметить это значительное сокращение кода. Например, Вам часто нужно выполнять какие-либо действия, код которых занимает, скажем, 10-20 и более строк, и вот представите, что Вы данный код будете повторять 2-3-10… раз в своем основном коде программы, другими словами количество строк основного кода возрастет в разы, а чем это грозит, рассмотрим во втором пункте;
  • Если у Вас код очень большой, то его будет трудно в дальнейшем редактировать и к тому же если у Вас есть повторяющейся код, то тогда придется искать его и исправлять код во всех местах, что согласитесь первое, это очень нудно, а второе Вы можете просто забыть изменить код в каком-нибудь месте и программа не будет работать или что еще хуже, будет работать, но не правильно, за что Вас конечно начальство не похвалит;
  • Про сокращение кода мы сказали, но также мы делаем его более наглядным и понятным. Другими словами, когда в коде мы встретим вызов той или иной функции, мы сразу поймем, что она делает, и будем меньше тратить время на разбор и понимание всего кода, а это принесет нам выгоду, так как мы будем более оперативно вносить изменения в функционал нашей программы, а вот за это начальство может нас похвалить.

Как и у любого языка программирования и среды программирования в VBA Access есть область видимости функции, например, мы, можем написать функцию которую можно будет вызвать только в пределах одного объекта (формы или отчета) или мы можем ее написать в области видимости всего проекта, т.е. функцию можно будет вызвать из любой формы или отчета. Мы сегодня рассмотрим оба варианта, соответственно на примерах.

Примеры написания функций VBA Access

И для начала давайте определимся, что за функцию мы будем писать, т.е. что она будет делать. Я предлагаю написать в качестве простого примера функцию, которая будет принимать один параметр с типом date и возвращать строку вида «19 Июня 2014г.». Как мне кажется достаточно простой пример, но вдруг кому-нибудь пригодится.

Пишем локальную функцию VBA

Как я уже сказал ранее, есть разные области видимости функций и сейчас мы напишем своего рода локальную функцию, которую можно будет запустить только из кода того объекта, где эта функция написана.

Для реализации нашего примера давайте создадим форму, добавим на нее кнопку, клик по которой будет вызывать нашу функцию. Думаю показывать, как создать форму не стоит, так как мы это уже неоднократно делали, единственное скажу, что я форму назвал «Тестовая форма», элемент кнопка назвал «start» с подписью «Старт»

Теперь запустим редактор кода VBA, это можно сделать путем нажатия кнопки на панели инструментом «Программа»

И вставляем код нашей функции и сразу же код ее вызова, т.е. код обработки события нажатия кнопки (весь код прокомментирован):

Private Function getStrDate(dt As Date) As String 'Объявляем вспомогательные переменные Dim d As String Dim m As String Dim y As String 'Получаем день d = Day(dt) 'Получаем месяц m = Month(dt) 'Определяем, какой именно месяц Select Case m Case 1: m = "Января" Case 2: m = "Февраля" Case 3: m = "Марта" Case 4: m = "Апреля" Case 5: m = "Мая" Case 6: m = "Июня" Case 7: m = "Июля" Case 8: m = "Августа" Case 9: m = "Сентября" Case 10: m = "Октября" Case 11: m = "Ноября" Case 12: m = "Декабря" End Select 'Получаем год y = Year(dt) 'Соединяем и возвращаем результат getStrDate = d & " " & m & " " & y & "г." End Function Private Sub start_Click() 'Выводим сообщение с текстом, который вернет нам наша функция MsgBox getStrDate("19.06.2014") End Sub

В итоге у Вас должно получится следующее:

То, что это функция локальная свидетельствует слово Private перед названием функции.

Теперь все сохраняем, открываем нашу форму, жмем, старт и получаем наше сообщение:

Как видите, мы получили тот результат, который хотели, т.е. мы передавали в качестве параметра дату «19.06.2014» и получили соответствующий результат.

Пишем глобальную функцию VBA

Для того чтобы написать такую функцию создадим модуль, например «test_func» а там уже напишем нашу функцию. Для того чтобы создать модуль, открываем Access и на панели объектов выбираем «Модули» и жмем «Создать».

Затем вставляем наш код, с одним изменением, перед названием функции пишем Public, и у Вас должно получится вот такая картина:

Теперь осталось изменить код вызова нашей новой глобальной функции, для этого меняем код обработки события нажатия кнопки на нашей тестовой форме, на вот такой:

MsgBox test_func.getStrDate("19.06.2014")

Сохраняем и проверяем, результат будет таким же, но его нам вернула уже совсем другая функция.

Как видите, все нет так уж и сложно, функция конечно простая, но Вы можете писать функции для собственных нужд, которые будут более сложными. Я всем советую весь повторяющийся код выносить в функции, так как это будет намного лучше, как для работы с этим кодом, так и просто для восприятия. Надеюсь, сегодняшняя статья помогла Вам разобраться с вопросом «Как написать функции на VBA Access?». Удачи в программировании на VBA.

Похожие статьи:

info-comp.ru

vba - Вызов функции VBA Access из Excel

Я создаю лист компенсации. Таблицы и ключевая информация находятся в базе данных доступа, Compensation.accdb, которая имеет функцию для определения компенсации, основанной на агентском договоре. Если агент является "REP", функция Access VBA выполняет одно вычисление, и если агент является SRP, он выполняет другое. Несколько отдельных пользователей хотят вызвать эту функцию из Excel (кстати, MS Office 2013). Идея заключается в том, что пользователь меняет или вводит количество в своей электронной таблице, а электронная таблица вызывает функцию VBA Compensation.accdb. Compensation.accdb выполняет вычисление и передает значение обратно в исходную таблицу.

Вот код VBA Compensation.accdb:

Option Compare Database Function AutoComp(WritingRepContract As String) As Integer 'Auto insurance 'Debug.Print WritingRepContract If WritingRepContract = "REP" Then AutoComp = 1 'Compensation formula for Rep will go here End If If WritingRepContract = "SRP" Then AutoComp = 2 'Compensation formula for Senior Rep will go here, etc. End If End Function

Вот код Excel VBA:

Public Sub Worksheet_Change(ByVal Target As Range) 'Is there a better way than this??? Dim WritingLevel As String If Target.Address = "$B$8" Then 'This is the cell where one would enter Auto value. If Target.Value = 1 Then 'just a test to see if working WritingLevel = "REP" Else WritingLevel = "SRP" End If CallAutoComp (WritingLevel) End If End Sub Sub CallAutoComp(WritingLevel) Dim appAccess As Access.Application Dim test As Integer Set appAccess = New Access.Application Debug.Print appAccess.Eval("AutoComp(WritingLevel)") 'A test to see what is happening With appAccess .OpenCurrentDatabase "C:\Mypath\Compensation.ACCDB" .Visible = False ' Useful for debugging when true .Eval ("AutoComp(WritingLevel)") End With test = appAccess.Eval("AutoComp(WritingLevel)") With appAccess .CloseCurrentDatabase .Quit End With End Sub

Когда я изменяю значение в B8, я получаю следующее:

Ошибка времени выполнения 2425: введенное выражение имеет имя функции, которое Microsoft Access не может найти.

Ему не нравятся следующие утверждения (такая же ошибка 2425 для всех трех операторов):

Debug.Print statement .Eval ("AutoComp(WritingLevel))") statement test = appAccess.Eval("AutoComp(WritingLevel)")

Я пробовал несколько версий одиночных и двойных кавычек и "&" вокруг WritingLevel без успеха.

Я не уверен, что это лучший подход. Это первый раз, когда я пытался пересечь такие платформы, но это было бы большой помощью для многих людей, если бы я мог получить ответ на эту проблему. Было бы здорово, если бы я мог просто вызвать функцию более простым способом, например, для внутренних функций Excel. Я искал дни с разными версиями моей строки поиска без успеха.

Когда я заменяю AutoComp(WritingLevel) на AutoComp(SRP) или AutoComp(REP) он отлично работает.

qaru.site

[access-vba] Вызов функции VBA Access из Excel [ms-access] [excel-vba]

Я создаю лист компенсации. Таблицы и ключевая информация находятся в базе данных доступа, Compensation.accdb , которая имеет функцию для определения компенсации, основанной на контракте агента. Если агент является «REP», функция Access VBA выполняет одно вычисление, и если агент является SRP, он выполняет другое. Несколько отдельных пользователей хотят вызвать эту функцию из Excel (кстати, MS Office 2013). Идея заключается в том, что пользователь меняет или вводит количество в своей электронной таблице, а электронная таблица вызывает функцию VBA Compensation.accdb . Compensation.accdb выполняет вычисление и передает значение обратно в исходную таблицу.

Вот код VBA Compensation.accdb :

Option Compare Database Function AutoComp(WritingRepContract As String) As Integer 'Auto insurance 'Debug.Print WritingRepContract If WritingRepContract = "REP" Then AutoComp = 1 'Compensation formula for Rep will go here End If If WritingRepContract = "SRP" Then AutoComp = 2 'Compensation formula for Senior Rep will go here, etc. End If End Function

Вот код Excel VBA:

Public Sub Worksheet_Change(ByVal Target As Range) 'Is there a better way than this??? Dim WritingLevel As String If Target.Address = "$B$8" Then 'This is the cell where one would enter Auto value. If Target.Value = 1 Then 'just a test to see if working WritingLevel = "REP" Else WritingLevel = "SRP" End If CallAutoComp (WritingLevel) End If End Sub Sub CallAutoComp(WritingLevel) Dim appAccess As Access.Application Dim test As Integer Set appAccess = New Access.Application Debug.Print appAccess.Eval("AutoComp(WritingLevel)") 'A test to see what is happening With appAccess .OpenCurrentDatabase "C:\Mypath\Compensation.ACCDB" .Visible = False ' Useful for debugging when true .Eval ("AutoComp(WritingLevel)") End With test = appAccess.Eval("AutoComp(WritingLevel)") With appAccess .CloseCurrentDatabase .Quit End With End Sub

Когда я изменяю значение в B8, я получаю следующее:

Ошибка времени выполнения 2425: введенное выражение имеет имя функции, которое Microsoft Access не может найти.

Ему не нравятся следующие утверждения (такая же ошибка 2425 для всех трех операторов):

Debug.Print statement .Eval ("AutoComp(WritingLevel))") statement test = appAccess.Eval("AutoComp(WritingLevel)")

Я пробовал несколько версий одиночных и двойных кавычек и "&" вокруг WritingLevel без успеха.

Я не уверен, что это лучший подход. Это первый раз, когда я пытался пересечь такие платформы, но это было бы большой помощью для многих людей, если бы я мог получить ответ на эту проблему. Было бы здорово, если бы я мог просто вызвать функцию более простым способом, например, для внутренних функций Excel. Я искал дни с разными версиями моей строки поиска без успеха.

Когда я заменяю AutoComp(WritingLevel) на AutoComp(SRP) или AutoComp(REP) он отлично работает.

code-examples.net

Функции и операторы VBA и MS Access

Математические функции
Функция Возвращаемое Значение
Abs (числовое выражение) Модуль (абсолютная величина) числа
Atn (числовое выражение) Арктангенс
Cos (числовое выражение) Косинус
Exp (числовое выражение) Экспонента
Log (числовое выражение) Натуральный логарифм
Rnd (числовое выражение) Случайное число из интервала (0,1)
Sgn (числовое выражение) Знак числа
Sin (числовое выражение) Синус
Sqr (числовое выражение) Квадратный корень из числа
Tan(числовое выражение) Тангенс
Int (числовое выражение) Отбрасывает дробную часть числа и возвращают целое значение

 

Функции проверки типов
Функция Возвращаемое Значение
IsDate (Выражение) Возвращает True – если Выражение является датой, и False в противном случае
IsError (Выражение) Возвращает True – если Выражение является ошибочным и False в противном случае
IsNull (Выражение) Возвращает True, если Выражение является пустым значением (Null), и False в противном случае
IsNumeric (Выражение) Возвращает True, если Выражение является числовым значением, и False в противном случае
IsObject(Ссылка) Возвращает True , если параметр относится к типу Object, и False в противном случае

 

 

Функции преобразования
Функция Возвращаемое Значение
CByte (Выражение) Преобразует числовое выражение или строку в тип Byte. Аргумент может принимать значение в диапазоне 0-255
CCur (Выражение) Преобразует числовое выражение или строку в число денежного формата (тип Currency)
CDate (Выражение) Преобразует числовое выражение или строку в дату (тип Date)
CInt(Выражение) Преобразует числовое выражение или строку в число типа Integer
CVar (Выражение) Преобразует числовое выражение или строку в число типа Variant
CStr (Выражение) Преобразует числовое выражение или строку в строку типа String
Str(Числовое _выражение) Преобразует числовое выражение в строку типа String. В качестве допустимого десятичного разделителя функция Str воспринимает только точку.
Val(Строка) Преобразует строку цифровых символов в число
Format (Выражение, “General Number”) Преобразует числовое выражение в значение типа Variant (String), возвращая число без разделителя тысяч
Format (Выражение, “Currency”) Преобразует числовое выражение в значение типа Variant (String), отображая число в денежном формате
Format (Выражение, “Fixed”) Преобразует числовое выражение в значение типа Variant (String), отображая, по крайней мере, одну цифру слева и две справа от десятичной точки
Format (Выражение, “Standard”) Преобразует числовое выражение в значение типа Variant (String), отображая, по крайней мере, одну цифру слева и две справа от десятичной точки и выводит разделитель тысяч
Format (Выражение, “Percent”) Преобразует числовое выражение в значение типа Variant (String), отображая число в процентах с двумя знаками после десятичной точки
Format (Выражение, “Scientific”) Преобразует числовое выражение в значение типа Variant (String), отображая формат с плавающей десятичной точкой
Format (Выражение, “General Date” Преобразует числовое выражение в значение типа Variant (String), отображая дату или время. Если нет дробной части, то выводит только дату

 

Функции обработки строк
Функция Возвращаемое значение Синтаксис / примеры
Asc Возвращает ASCII-код первой буквы строки Asc (строка)
Chr Преобразует ASCII-код в строку Chr (Код) Например, Chr (13) - переход на новую строку, Chr (97) = "а"
LCase Преобразует строку к нижнему регистру Lcase (Строка)
UCase Преобразует строку к верхнему регистру Ucase (Строка)
Left Возвращает подстроку, состоящую из заданного числа первых символов исходной строки Left (string, lenght) Аргументы: lenght - число символов string - исходная строка
Right Возвращает строку, состоящую из заданного числа последних символов исходной строки Right (string, lenght) Аргументы: lenght - число символов string - исходная строка
Mid Возвращает подстроку строки, содержащую указанное число символов Mid (string, start[, lenght]) Аргументы: string - строковое выражение, из которого извлекается подстрока start - позиция символов в строке string, с которого начинается нужная подстрока lenght - число возвращаемых символов строки
Len Возвращает число символов строки Len(Строка)
Ltrim Возвращает копию строки без пробелов в начале Ltrim(Строка)
Rtrim Возвращает копию строки без пробелов в конце Rtrim(Строка)
Replace Находит и заменяет в строке подстроку другой подстрокой Replace(Expression, Find, Replacewith [,Start[, Count [, Compare]]]) Аргументы: Expression – строка, в которой заменяется подстрока; Find – заменяемая подстрока; Replacewith – подстрока, на которую заменяется подстрока, указанная в качестве значения параметра find; Start – позиция в строке, с которой ищется подстрока, указанная в качестве значения параметра find. Если этот параметр опущен, то поиск производится с первой позиции; Count – указывает, сколько найденных подстрок надо заменить. Если этот параметр опущен, то будут произведены все замены; Compare – критерий сравнения при поиске подстроки. Допустимые значения: 0 (для двоичного сравнения), 1 (посимвольное сравнение без учета регистра).
Trim Возвращает копию строки без пробелов в начале и в конце Trim(Строка)
Space Возвращает строку, состоящую из указанного числа пробелов Space(Число)
String Возвращает строку, состоящую из указанного числа повторений одного и того же символа String (number, “character”) Аргументы: number - число повторений символа character - повторяемый символ
StrReverse Возвращает строку в обратном порядке StrReverse (string)

 

 

Функции времени и даты
Функция Возвращаемое значение Синтаксис \ Примеры
Date Возвращает значение типа Variant (Date), содержащее текущую системную дату Date()
Time Возвращает значения типа Variant (Date), содержащее текущее время по системным часам компьютера Time()
Now Возвращает значение типа Variant (Date), содержащее текущую дату и время по системному календарю и часам компьютера Now()
Day, Month, Year Возвращает целое значение Variant (Integer), содержащее целое число, которое представляет день, месяц, год в значении даты Day(дата) Month(дата) Year (дата) дата - значение даты или выражение, её определяющее В следующем примере переменной День присваивается 17, Месяц - May, Год - 1960: День Рождения = #May 17, 1960# День = Day (День Рождения) Месяц = Month (День Рождения) Год = Year (День Рождения)

 

 

Функции выбора
Функция Возвращаемое значение
IIF Возвращает одну из двух альтернатив. Синтаксис: Iif (expr, truepart, falsepart) expr - проверяемое выражение truepart - значение или выражение, возвращаемое, если expr имеет значение True falsepart - значение или выражение, возвращаемое, если expr имеет значение False В следующем примере, если значение переменной ОценкаЦифрой равно 5, то переменной ОценкаПрописью присваивается строковая константа Отлично. В противном случае ей присваивается значение Не отлично: ОценкаПрописью = Iif (ОценкаЦифрой = 5, "Отлично", _ "Не отлично")

 

 

Встроенные диалоговые окна
Функция Возвращаемое значение
Функция InputBox Выводит на экран диалоговое окно, содержащее сообщение и поле ввода, устанавливает режим ожидания ввода текста пользователем или нажатия кнопки, а затем возвращает значение типа String, содержащее текст, введенный в поле. Синтаксис: InputBox (promt [, title] [, default] [, xpos] _ [, ypos] [, helpfile, context]) Аргументы: promt - строковое выражение, обозначаемое как сообщение в диалоговом окне. Строковое значение promt может содержать несколько строк. Для разделения строк допускается использование символа возврата каретки (Chr (13)), символа перевода строки (Chr (10)) или комбинацию этих символов (Chr (13) & Chr (10)) title - строковое выражение, отображаемое в строке заголовка диалогового окна. Если этот аргумент опущен, поле ввода изображается пустым xpos - числовое выражение, задающее расстояние по горизонтали между левой гланицей диалогового окна и левым краем экрана. Если этот аргумент опущен, диалоговое окно выравнивается по центру экрана по горизонтали ypos - числовое выражение, задающее расстояние по вертикали между верхней границей диалогового окна и верхним краем экрана. helpfile - строковое выражение, определяющее имя файла справки, содержащего справочные сведения о данном диалоговом окне. Если этот аргумент указан, необходимо наличие также аргумента context context - числовое выражение, определяющее номер соответствующего раздела справочной системы. Если этот аргумент указан, необходимо также наличие аргумента helpfile
Процедура MsgBox Выводит на экран диалоговое окно, содержащее сообщение, устанавливает режим ожидания нажатия кнопки пользователем, а затем возвращает значение типа Integer, указывающее, какая кнопка была нажата. Синтаксис: MsgBox promt [, buttons] [, title] [, helpfile, contex] Аргументы: promt - строковое выражение, отображаемое как сообщение в диалоговом окне buttons - числовое выражение, представляющее сумму значений, которые указывают число и тип отображаемых кнопок, тип используемого значка, основную кнопку и модальность окна сообщения. Значение по умолчанию этого аргумента равняется 0. Значения констант, определяющих число и тип кнопок приведены в таблицах, представленных ниже. title - строковое выражение, отображаемое в строке заголовка диалогового окна. Если этот аргумент опущен в строку заголовка помещается имя приложения helpfile - строковое выражение, определяющее имя файла справки, содержащего справочные сведения о данном диалоговом окне. Если этот аргумент указан, необходимо указать также аргумент context context - числовое выражение, определяющее номер соответствующего раздела справочной системы. Если этот аргумент указан, необходимо также наличие аргумента helpfile
Значения аргумента buttons процедуры MsgBox, определяющие отображаемые кнопки в диалоговом окне
Константа Значение Отображаются кнопки
vbOKOnly ОК    
vbOKCancel ОК Отмена
vbAbortRetryIgnore Стоп Повтор Пропустить
vbYesNoCancel Да Нет Отмена
vbYesNo Да Нет  
vbRetryCancel Повтор Отмена
Значения аргумента buttons процедуры MsgBox, определяющие отображаемые информационные значки в диалоговом окне
Константа Значение Значок сообщения
vbCritical Ñ
vbQuestion s
vbExclamation !
vbInformation i
Значения аргумента buttons процедуры MsgBox, определяющие основную кнопку в диалоговом окне
Константа Значение Номер основной кнопки
vbDefaultButton2
vbDefaultButton2
vbDefaultButton3
vbDefaultButton4
Соответствие возвращаемого значения функции MsgBox нажатой кнопке
Константа Значение Нажатая кнопка
vbOk ОК
vbCancel Отмена (Cancel)
vbAbort Прервать (Abort)
vbRetry Повторить (Retry)
vbIgnore Пропустить (Ignore)
vbYes Да (Yes)
vbNo Нет (No)
             
Функции MS Access
Функция Выполняемая операция
Avg Вычисляет арифметическое среднее набора чисел, содержащихся в указанном поле запроса.
Min, Max Возвращают минимальное и максимальное значения из набора значений, содержащихся в указанном поле запроса.
Count Вычисляет количество записей, возвращаемых запросом.
Sum Возвращает сумму набора значений, содержащихся в заданном поле запроса.
Var, VarP Возвращают значение смещенной и несмещенной дисперсии, вычисляемой по набору значений, содержащихся в указанном поле запроса.
&или+ Сцепление символьных строк
     

Приложение 15

Пример формы для расчета финансовой функции

Приложение 16

lektsia.com

access - Функции VBA не работают, возвращает ошибку

У меня есть проблема, которую я пытался решить в течение нескольких дней с помощью MS Access и функции VBA.

Для начала у меня есть таблица следующего

Name = Команда

поле в основном текстовые базы, если не указано иное ID (AutoNumber первичного ключ) Non Prénom Расположение TeamID (созданные соединяя поля Nom, Prenom и Location)

В моей форме я хотел бы извлечь частичные данные, введенные в поля Nom, Prenom и Location. Затем передайте это обратно в базу данных, чтобы войти в поле TeamID для отдельного человека.

Отвод должен принять форму TeamID = mid(Location,0,4) & mid(Prenom,0,2) & mid(Nom,0,2à)

Однако я понимаю, что я не могу поставить это в разделе «Контрол источника» свойств для любого поля.

Так что после долгих поисков я решил, что должен использовать функцию в отдельном модуле (я делаю это довольно часто для создания «разумных» значений индекса на большом количестве моих таблиц, я считаю, что первичный ключ autonumber не является очень дружественным к пользователю, или сам объяснительное.

Так что в моем файле базы данных я создал модуль (так называемый GetInfo) с общественной функцией

Public Function getID() As String Dim r As String Dim i As String i = "Twenty"

Ниже приведены некоторые из вариантов, которые я попробовал ....

'r = VBA.Strings.UCase$(String:=i) 'turning the value of i to uppercase getID = r 'returns "TWENTY" as expected

или

'r = VBA.Strings.Mid$("TWENTY", 0, 2) getID = r 'error and highlights above line?

или

'r = StrReverse(i) getID= r 'again error and highlights above line getID = VBA.Strings.Mid$(String:="TWENTY", Start:=0, Length:=2) End Function

Я тогда opent 'выполнение' Eh окно и запустить функцию.

я, кажется, только в состоянии преобразовать значение в верхний или нижний регистр, любой поиск или манипуляция строки просто дает мне сообщение лук со следующей ошибкой

Execution Error «5» аргумента или процедурами неправильный звонок

(пожалуйста, несите меня, я работаю над французским терминалом, и поэтому мой перевод этой ошибки может быть не очень точным).

Однако все функции срабатывают корректно при вводе их, как и передаваемые параметры. когда я ищу в сети, то информация такая же. http://www.techonthenet.com/excel/formulas/index_vba.php

Так что я потерял то место, где я ошибаюсь.

Я предполагаю, что я не утверждаю значение моих переменных правильно, но я не понимаю, почему. Этот код не работает в другом месте (другие терминалы), поэтому я уверен, что это должна быть моя ошибка!

Но что это.

Я чувствую, что это действительно основная проблема, но просто не может заставить функцию работать при манипулировании строкой.

Нужно ли мне называть эту функцию только суб-суб, а не напрямую, будет ли она одинаковой на моей странице формы?

Я могу создать мини-базу данных с этим кодом, если потребуется.

stackoverrun.com

Функции и операторы VBA и MS Access — КиберПедия

⇐ ПредыдущаяСтр 12 из 12
Математические функции
Функция Возвращаемое Значение
Abs (числовое выражение) Модуль (абсолютная величина) числа
Atn (числовое выражение) Арктангенс
Cos (числовое выражение) Косинус
Exp (числовое выражение) Экспонента
Log (числовое выражение) Натуральный логарифм
Rnd (числовое выражение) Случайное число из интервала (0,1)
Sgn (числовое выражение) Знак числа
Sin (числовое выражение) Синус
Sqr (числовое выражение) Квадратный корень из числа
Tan(числовое выражение) Тангенс
Int (числовое выражение) Отбрасывает дробную часть числа и возвращают целое значение

 

Функции проверки типов
Функция Возвращаемое Значение
IsDate (Выражение) Возвращает True – если Выражение является датой, и False в противном случае
IsError (Выражение) Возвращает True – если Выражение является ошибочным и False в противном случае
IsNull (Выражение) Возвращает True, если Выражение является пустым значением (Null), и False в противном случае
IsNumeric (Выражение) Возвращает True, если Выражение является числовым значением, и False в противном случае
IsObject(Ссылка) Возвращает True , если параметр относится к типу Object, и False в противном случае

 

 

Функции преобразования
Функция Возвращаемое Значение
CByte (Выражение) Преобразует числовое выражение или строку в тип Byte. Аргумент может принимать значение в диапазоне 0-255
CCur (Выражение) Преобразует числовое выражение или строку в число денежного формата (тип Currency)
CDate (Выражение) Преобразует числовое выражение или строку в дату (тип Date)
CInt(Выражение) Преобразует числовое выражение или строку в число типа Integer
CVar (Выражение) Преобразует числовое выражение или строку в число типа Variant
CStr (Выражение) Преобразует числовое выражение или строку в строку типа String
Str(Числовое _выражение) Преобразует числовое выражение в строку типа String. В качестве допустимого десятичного разделителя функция Str воспринимает только точку.
Val(Строка) Преобразует строку цифровых символов в число
Format (Выражение, “General Number”) Преобразует числовое выражение в значение типа Variant (String), возвращая число без разделителя тысяч
Format (Выражение, “Currency”) Преобразует числовое выражение в значение типа Variant (String), отображая число в денежном формате
Format (Выражение, “Fixed”) Преобразует числовое выражение в значение типа Variant (String), отображая, по крайней мере, одну цифру слева и две справа от десятичной точки
Format (Выражение, “Standard”) Преобразует числовое выражение в значение типа Variant (String), отображая, по крайней мере, одну цифру слева и две справа от десятичной точки и выводит разделитель тысяч
Format (Выражение, “Percent”) Преобразует числовое выражение в значение типа Variant (String), отображая число в процентах с двумя знаками после десятичной точки
Format (Выражение, “Scientific”) Преобразует числовое выражение в значение типа Variant (String), отображая формат с плавающей десятичной точкой
Format (Выражение, “General Date” Преобразует числовое выражение в значение типа Variant (String), отображая дату или время. Если нет дробной части, то выводит только дату

 

Функции обработки строк
Функция Возвращаемое значение Синтаксис / примеры
Asc Возвращает ASCII-код первой буквы строки Asc (строка)
Chr Преобразует ASCII-код в строку Chr (Код) Например, Chr (13) - переход на новую строку, Chr (97) = "а"
LCase Преобразует строку к нижнему регистру Lcase (Строка)
UCase Преобразует строку к верхнему регистру Ucase (Строка)
Left Возвращает подстроку, состоящую из заданного числа первых символов исходной строки Left (string, lenght) Аргументы: lenght - число символов string - исходная строка
Right Возвращает строку, состоящую из заданного числа последних символов исходной строки Right (string, lenght) Аргументы: lenght - число символов string - исходная строка
Mid Возвращает подстроку строки, содержащую указанное число символов Mid (string, start[, lenght]) Аргументы: string - строковое выражение, из которого извлекается подстрока start - позиция символов в строке string, с которого начинается нужная подстрока lenght - число возвращаемых символов строки
Len Возвращает число символов строки Len(Строка)
Ltrim Возвращает копию строки без пробелов в начале Ltrim(Строка)
Rtrim Возвращает копию строки без пробелов в конце Rtrim(Строка)
Replace Находит и заменяет в строке подстроку другой подстрокой Replace(Expression, Find, Replacewith [,Start[, Count [, Compare]]]) Аргументы: Expression – строка, в которой заменяется подстрока; Find – заменяемая подстрока; Replacewith – подстрока, на которую заменяется подстрока, указанная в качестве значения параметра find; Start – позиция в строке, с которой ищется подстрока, указанная в качестве значения параметра find. Если этот параметр опущен, то поиск производится с первой позиции; Count – указывает, сколько найденных подстрок надо заменить. Если этот параметр опущен, то будут произведены все замены; Compare – критерий сравнения при поиске подстроки. Допустимые значения: 0 (для двоичного сравнения), 1 (посимвольное сравнение без учета регистра).
Trim Возвращает копию строки без пробелов в начале и в конце Trim(Строка)
Space Возвращает строку, состоящую из указанного числа пробелов Space(Число)
String Возвращает строку, состоящую из указанного числа повторений одного и того же символа String (number, “character”) Аргументы: number - число повторений символа character - повторяемый символ
StrReverse Возвращает строку в обратном порядке StrReverse (string)

 

 

Функции времени и даты
Функция Возвращаемое значение Синтаксис \ Примеры
Date Возвращает значение типа Variant (Date), содержащее текущую системную дату Date()
Time Возвращает значения типа Variant (Date), содержащее текущее время по системным часам компьютера Time()
Now Возвращает значение типа Variant (Date), содержащее текущую дату и время по системному календарю и часам компьютера Now()
Day, Month, Year Возвращает целое значение Variant (Integer), содержащее целое число, которое представляет день, месяц, год в значении даты Day(дата) Month(дата) Year (дата) дата - значение даты или выражение, её определяющее В следующем примере переменной День присваивается 17, Месяц - May, Год - 1960: День Рождения = #May 17, 1960# День = Day (День Рождения) Месяц = Month (День Рождения) Год = Year (День Рождения)

 

 

Функции выбора
Функция Возвращаемое значение
IIF Возвращает одну из двух альтернатив. Синтаксис: Iif (expr, truepart, falsepart) expr - проверяемое выражение truepart - значение или выражение, возвращаемое, если expr имеет значение True falsepart - значение или выражение, возвращаемое, если expr имеет значение False В следующем примере, если значение переменной ОценкаЦифрой равно 5, то переменной ОценкаПрописью присваивается строковая константа Отлично. В противном случае ей присваивается значение Не отлично: ОценкаПрописью = Iif (ОценкаЦифрой = 5, "Отлично", _ "Не отлично")

 

 

Встроенные диалоговые окна
Функция Возвращаемое значение
Функция InputBox Выводит на экран диалоговое окно, содержащее сообщение и поле ввода, устанавливает режим ожидания ввода текста пользователем или нажатия кнопки, а затем возвращает значение типа String, содержащее текст, введенный в поле. Синтаксис: InputBox (promt [, title] [, default] [, xpos] _ [, ypos] [, helpfile, context]) Аргументы: promt - строковое выражение, обозначаемое как сообщение в диалоговом окне. Строковое значение promt может содержать несколько строк. Для разделения строк допускается использование символа возврата каретки (Chr (13)), символа перевода строки (Chr (10)) или комбинацию этих символов (Chr (13) & Chr (10)) title - строковое выражение, отображаемое в строке заголовка диалогового окна. Если этот аргумент опущен, поле ввода изображается пустым xpos - числовое выражение, задающее расстояние по горизонтали между левой гланицей диалогового окна и левым краем экрана. Если этот аргумент опущен, диалоговое окно выравнивается по центру экрана по горизонтали ypos - числовое выражение, задающее расстояние по вертикали между верхней границей диалогового окна и верхним краем экрана. helpfile - строковое выражение, определяющее имя файла справки, содержащего справочные сведения о данном диалоговом окне. Если этот аргумент указан, необходимо наличие также аргумента context context - числовое выражение, определяющее номер соответствующего раздела справочной системы. Если этот аргумент указан, необходимо также наличие аргумента helpfile
Процедура MsgBox Выводит на экран диалоговое окно, содержащее сообщение, устанавливает режим ожидания нажатия кнопки пользователем, а затем возвращает значение типа Integer, указывающее, какая кнопка была нажата. Синтаксис: MsgBox promt [, buttons] [, title] [, helpfile, contex] Аргументы: promt - строковое выражение, отображаемое как сообщение в диалоговом окне buttons - числовое выражение, представляющее сумму значений, которые указывают число и тип отображаемых кнопок, тип используемого значка, основную кнопку и модальность окна сообщения. Значение по умолчанию этого аргумента равняется 0. Значения констант, определяющих число и тип кнопок приведены в таблицах, представленных ниже. title - строковое выражение, отображаемое в строке заголовка диалогового окна. Если этот аргумент опущен в строку заголовка помещается имя приложения helpfile - строковое выражение, определяющее имя файла справки, содержащего справочные сведения о данном диалоговом окне. Если этот аргумент указан, необходимо указать также аргумент context context - числовое выражение, определяющее номер соответствующего раздела справочной системы. Если этот аргумент указан, необходимо также наличие аргумента helpfile
Значения аргумента buttons процедуры MsgBox, определяющие отображаемые кнопки в диалоговом окне
Константа Значение Отображаются кнопки
vbOKOnly ОК    
vbOKCancel ОК Отмена
vbAbortRetryIgnore Стоп Повтор Пропустить
vbYesNoCancel Да Нет Отмена
vbYesNo Да Нет  
vbRetryCancel Повтор Отмена
Значения аргумента buttons процедуры MsgBox, определяющие отображаемые информационные значки в диалоговом окне
Константа Значение Значок сообщения
vbCritical Ñ
vbQuestion s
vbExclamation !
vbInformation i
Значения аргумента buttons процедуры MsgBox, определяющие основную кнопку в диалоговом окне
Константа Значение Номер основной кнопки
vbDefaultButton2
vbDefaultButton2
vbDefaultButton3
vbDefaultButton4
Соответствие возвращаемого значения функции MsgBox нажатой кнопке
Константа Значение Нажатая кнопка
vbOk ОК
vbCancel Отмена (Cancel)
vbAbort Прервать (Abort)
vbRetry Повторить (Retry)
vbIgnore Пропустить (Ignore)
vbYes Да (Yes)
vbNo Нет (No)
             
Функции MS Access
Функция Выполняемая операция
Avg Вычисляет арифметическое среднее набора чисел, содержащихся в указанном поле запроса.
Min, Max Возвращают минимальное и максимальное значения из набора значений, содержащихся в указанном поле запроса.
Count Вычисляет количество записей, возвращаемых запросом.
Sum Возвращает сумму набора значений, содержащихся в заданном поле запроса.
Var, VarP Возвращают значение смещенной и несмещенной дисперсии, вычисляемой по набору значений, содержащихся в указанном поле запроса.
&или+ Сцепление символьных строк
     

Приложение 14

Пример формы для расчета финансовой функции

Приложение 15



cyberpedia.su

Иллюстрированный самоучитель по Microsoft Access 2002 › Программирование в Access 2002 › Язык Visual Basic для приложений (VBA). Процедуры и функции, их вызов и передача параметров. [страница - 414] | Самоучители по офисным пакетам

Язык Visual Basic для приложений (VBA). Процедуры и функции, их вызов и передача параметров.

Следующие ниже подразделы данного раздела описывают синтаксис языка программирования VBA.

Основными компонентами программы на VBA являются процедуры и функции, Они представляют собой фрагменты программного кода, заключенные между операторами Sub и End Sub или между операторами Function и End Function. Вот как может выглядеть процедура VBA:

Sub <имяПроцедуры> (<аргумент1>, <аргумент2>,...)

<операторVisualBasic1> <операторVisualBasic2>

End Sub

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

Function <имяФункции> (<аргумент1>, <аргумент2>,...)

<операторVisualBasicl> <операторVisualBasic2>

<имяФункции> = <возвращаемоеЗначение>

End Function

Для того чтобы использовать написанную вами процедуру или функцию, необходимо вызвать ее. Как же осуществляется вызов процедур и функций? Процедуру с непустым списком аргументов можно вызвать только из другой процедуры или функции, использовав ее имя со списком фактических значений аргументов в качестве одного из операторов VBA. Функцию же можно вызвать не только с помощью отдельного оператора VBA, но и поместив ее имя со списком фактических значений аргументов прямо в формулу или выражение в программе на VBA или, например, прямо в формулу в вычисляемых полях запросов, форм и отчетов Access.

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

Если вызываемая процедура имеет уникальное имя и находится в том же модуле, что и вызывающая процедура, то для ее вызова достаточно указать это имя и задать список фактических значений аргументов, не заключая его в скобки. Второй способ вызова процедуры состоит в использовании оператора Call. Сначала идет оператор Call, затем имя процедуры и список параметров, в этом случае обязательно заключенный в скобки. Функцию можно вызывать точно так же, как и процедуру, но гораздо чаще используется другой, специфический способ вызова функций: использованием ее имени с заключенным в скобки списком параметров в правой части оператора присваивания.

Вот примеры вызова процедуры под именем CrossRC с передачей ей двух аргументов (константы и выражения):

…или:

А вот пример вызова двух функций – Left и Mid, и использования возвращаемого ими значения в выражении:

yStr = Left(y, 1) & Mid(y, 2, 1)

Допускается два различных способа передачи переменных процедуре или функции: по ссылке и по значению. Если переменная передается по ссылке, то это означает, что процедуре или функции будет передан адрес этой переменной в памяти. При этом происходит отождествление формального аргумента процедуры и переданного ей фактического параметра. Тем самым вызываемая процедура может изменить значение фактического параметра: если будет изменен формальный аргумент процедуры, то это скажется на значении переданного ей при вызове фактического параметра. Если же фактический параметр передается по значению, то формальный аргумент вызываемой процедуры или функции получает только значение фактического параметра, но не саму переменную, используемую в качестве этого параметра. Тем самым все изменения значения формального аргумента не сказываются на значении переменной, являющейся фактическим параметром.

samoychiteli.ru