Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
 Отобразить список возможных параметров для своей функции  [new]
Anton Klyauzov
Member

Откуда:
Сообщений: 585
К примеру, пишу я функцию в VBA для Access 2000/2003:

'Ну так, упрощенно..

Public Sub CalculateInterval(IntervalType As String)
Select Case IntervalType
Case "manual"
    ... обработка ...
Case "current_day"
    ... обработка ...
Case "current_month"
    ... обработка ...
Case "current_quarter"
    ... обработка ...
Case "current_year"
    ... обработка ...
Case "before_month"
    ... обработка ...
Case "before_year"
    ... обработка ...
Case "standart_period"
    ... обработка ...
End Select
End Sub

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

Можно ли заставить редактор VBA показывать список возможных параметров, как для предопределенных функций, вшитых в VBA?
К примеру, при написании строки:
MsgBox "text"
после ввода запятой в конце строки VBA сам предложит список доступных констант для этой процедуры.
Это бы очень облегчило работу.
29 мар 06, 09:43    [2500379]     Ответить | Цитировать Сообщить модератору
 Re: Отобразить список возможных параметров для своей функции  [new]
Andres 1
Member

Откуда: Эстония
Сообщений: 1191
Public Enum enmIntervals
  manual = 1 ' Можно задать значение
  current_day ' а можно и не задавать
  current_month
  current_quarter
  current_year
  before_month
  before_year
  standard_period
End Enum

Public Sub CalculateInterval(IntervalType As enmIntervals)
Select Case IntervalType
  Case manual
      '... ????????? ...
  Case current_day
      '... ????????? ...
  Case current_month
      '... ????????? ...
  Case current_quarter
      '... ????????? ...
  Case current_year
      '... ????????? ...
  Case before_month
      '... ????????? ...
  Case before_year
      '... ????????? ...
  Case standard_period
      '... ????????? ...
  End Select
End Sub
29 мар 06, 09:52    [2500420]     Ответить | Цитировать Сообщить модератору
 Re: Отобразить список возможных параметров для своей функции  [new]
Anton Klyauzov
Member

Откуда:
Сообщений: 585
Andres 1
Public Enum enmIntervals
  manual = 1 ' Можно задать значение
  current_day ' а можно и не задавать
  current_month
  current_quarter
  current_year
  before_month
  before_year
  standard_period
End Enum

Спасибо за ответ!
Объясните пожалуйста, что значит можно задать а можно и не задавать? Речь идет о "константах" в пределах функции? То есть вместо текстового значения я смогу в качестве параметра передавать числовые значения, а VBA их грамотно сопоставит?
29 мар 06, 10:48    [2500726]     Ответить | Цитировать Сообщить модератору
 Re: Отобразить список возможных параметров для своей функции  [new]
Alexus12
Member

Откуда:
Сообщений: 2868
читаем Ф1 по Enum
29 мар 06, 11:12    [2500854]     Ответить | Цитировать Сообщить модератору
 Re: Отобразить список возможных параметров для своей функции  [new]
arkanus
Member

Откуда:
Сообщений: 75
будте любезны, расскажите о функции Enum
29 мар 06, 11:26    [2500919]     Ответить | Цитировать Сообщить модератору
 Re: Отобразить список возможных параметров для своей функции  [new]
Anton Klyauzov
Member

Откуда:
Сообщений: 585
Ок, всё понятно.
И последний (надеюсь) вопрос:

Swith Case будет быстрее работать по числовым значениям или по текстовым?
29 мар 06, 11:32    [2500953]     Ответить | Цитировать Сообщить модератору
 Re: Отобразить список возможных параметров для своей функции  [new]
Anton Klyauzov
Member

Откуда:
Сообщений: 585
Вот вопросец народился...
Имею функцию:
Public Sub CalculateInterval(IntervalType As enmIntervalTypes, ControlNameFrom As Control, ControlNameTo As Control, Optional manualFromDate As Date, Optional manualToDate As Date)

Обращаюсь к ней:
Call CalculateInterval(ButtonMenu.Key, Me!transport_interval_from_field, Me!transport_interval_to_field)

А второй и третий параметры передаются не как ссылка на контрол, а как его содержимое.

Как передать ссылку?
29 мар 06, 12:32    [2501338]     Ответить | Цитировать Сообщить модератору
 Re: Отобразить список возможных параметров для своей функции  [new]
Программист-Любитель
Member

Откуда:
Сообщений: 16839
ByRef перед именем параметра в описании процедуры.
29 мар 06, 12:48    [2501442]     Ответить | Цитировать Сообщить модератору
 Re: Отобразить список возможных параметров для своей функции  [new]
Andres 1
Member

Откуда: Эстония
Сообщений: 1191
На всякий случай вместо Me!transport_interval_from_field можно попробовать Me.transport_interval_from_field или Me.Controls("transport_interval_from_field").

Ну и ByRef.
29 мар 06, 12:50    [2501458]     Ответить | Цитировать Сообщить модератору
 Re: Отобразить список возможных параметров для своей функции  [new]
Anton Klyauzov
Member

Откуда:
Сообщений: 585
Прошу меня извинить, предыдущий вопрос снимается.

На самом деле так.
Объявляю свой Enum:
Public Enum enmIntervalTypes
    itManual = 1
    itCurrentDay = 2
    itCurrentWeek = 3
    itCurrentMonth = 4
    itCurrentQuarter = 5
    itCurrentYear = 6
    itBeforeDay = 7
    itBeforeWeek = 8
    itBeforeMonth = 9
    itBeforeQuarter = 10
    itBeforeYear = 11
    itStandartPeriod = 12
End Enum

Есть функция CalculateInterval, которая на основе этого Enum работает:
Public Sub CalculateInterval(IntervalType As enmIntervalTypes, ByRef ControlNameFrom As Control, ByRef ControlNameTo As Control, Optional manualFromDate As Date, Optional manualToDate As Date)
Select Case IntervalType
Case 1 ' itManual
    ' ... обработка ...
Case 2 ' itCurrentDay
    ' ... обработка ...
Case 3 ' itCurrentWeek
    ' ... обработка ...
Case 4 ' itCurrentMonth
    ' ... обработка ...
Case 5 ' itCurrentQuarter
    ' ... и так далее ...
End Sub

Вызывается она по нажатию кнопки на панели ActiveX MS Toolbar 6.0 таким образом:
Private Sub IntervalToolbar_ButtonMenuClick(ByVal ButtonMenu As Object)
Call CalculateInterval(ButtonMenu.Key, Me!transport_interval_from_field, Me!transport_interval_to_field)
End Sub
Где BettonMenu.Key - текстовое значение, соответствующее одному из значений enmIntervalTypes.
Почему-то такой вызов дает ошибку несоответствия типов.

Как я для себя понял, объявив свой Enum со значеинями, я могу обращаться к нему и по текстовому и по цифровому значнию. Но чего-то не получается.
29 мар 06, 13:09    [2501567]     Ответить | Цитировать Сообщить модератору
 Re: Отобразить список возможных параметров для своей функции  [new]
arkanus
Member

Откуда:
Сообщений: 75
Public Enum enmIntervalTypes
itManual = 1
itCurrentDay = 2
itCurrentWeek = 3
itCurrentMonth = 4
itCurrentQuarter = 5
itCurrentYear = 6
itBeforeDay = 7
itBeforeWeek = 8
itBeforeMonth = 9
itBeforeQuarter = 10
itBeforeYear = 11
itStandartPeriod = 12
End Enum

поисните как работает функция Enum ?
29 мар 06, 13:12    [2501587]     Ответить | Цитировать Сообщить модератору
 Re: Отобразить список возможных параметров для своей функции  [new]
Andres 1
Member

Откуда: Эстония
Сообщений: 1191
arkanus
поисните как работает функция Enum ?

Enum - не функция. Это перечисление.

Anton Klyauzov

Почему-то такой вызов дает ошибку несоответствия типов.

Как я для себя понял, объявив свой Enum со значеинями, я могу обращаться к нему и по текстовому и по цифровому значнию. Но чего-то не получается.

transport_interval_from_field - это поле или элемент управления? Работает ли Me.transport_interval_from_field
Попробовать так?
Call CalculateInterval(clng(ButtonMenu.Key), Me.transport_interval_from_field, Me.transport_interval_to_field)
29 мар 06, 13:29    [2501708]     Ответить | Цитировать Сообщить модератору
 Re: Отобразить список возможных параметров для своей функции  [new]
Anton Klyauzov
Member

Откуда:
Сообщений: 585
transport_interval_from_field - это поле или элемент управления?
Это поле.

В общем, передача полей как выяснилось, проходит нормально.

Попробовать так?
Call CalculateInterval(clng(ButtonMenu.Key), Me.transport_interval_from_field, Me.transport_interval_to_field)

А в любом случае Clng(ButtonMenu.Key) вызывает у меня несоответствие типов..
Даже Debug.Print Clng(ButtonMenu.Key)

Передача текстового значения (как в обработчике нажатия кнопки) вызывает ошибку:
Call CalculateInterval("itManual", Me.transport_interval_from_field, Me.transport_interval_to_field)

А передача значения как ссылки на енумератор ошибки не вызывает:
Call CalculateInterval(itManual, Me.transport_interval_from_field, Me.transport_interval_to_field)

Как передать по второму способу?
Или может вообще не стоит мешать числовые и текстовые значения?
29 мар 06, 14:00    [2501949]     Ответить | Цитировать Сообщить модератору
 Re: Отобразить список возможных параметров для своей функции  [new]
Andres 1
Member

Откуда: Эстония
Сообщений: 1191
Anton Klyauzov


Передача текстового значения (как в обработчике нажатия кнопки) вызывает ошибку:
Call CalculateInterval("itManual", Me.transport_interval_from_field, Me.transport_interval_to_field)

А передача значения как ссылки на енумератор ошибки не вызывает:
Call CalculateInterval(itManual, Me.transport_interval_from_field, Me.transport_interval_to_field)

Как передать по второму способу?
Или может вообще не стоит мешать числовые и текстовые значения?

Значения enum'a - Long, никак не текст (Value of the element - evaluates to a Long). В Button.Key для случая itManual должно быть "1" (но не "itManual")
29 мар 06, 14:05    [2501984]     Ответить | Цитировать Сообщить модератору
 Re: Отобразить список возможных параметров для своей функции  [new]
Anton Klyauzov
Member

Откуда:
Сообщений: 585
Andres 1
Значения enum'a - Long, никак не текст (Value of the element - evaluates to a Long). В Button.Key для случая itManual должно быть "1" (но не "itManual")

Тогда всё ясно.
Одно только мне не понятно - если я текст пытаюсь перевести в число Debug.Print Clng(ButtonMenu.Key) - VBA мне так и выдает ошибку Type Mismatch
Вроде всё равно должен быть какой-то результат - или Null или 0?
29 мар 06, 14:28    [2502207]     Ответить | Цитировать Сообщить модератору
 Re: Отобразить список возможных параметров для своей функции  [new]
Anton Klyauzov
Member

Откуда:
Сообщений: 585
Вот еще - в объекте ButtonMenu значение Key не может быть цифровым.
Так что снова скатываемся к тексту :-(
29 мар 06, 14:32    [2502246]     Ответить | Цитировать Сообщить модератору
 Re: Отобразить список возможных параметров для своей функции  [new]
Andres 1
Member

Откуда: Эстония
Сообщений: 1191
Anton Klyauzov
Вот еще - в объекте ButtonMenu значение Key не может быть цифровым.
Так что снова скатываемся к тексту :-(

Значение Key: "_1", "_2", ...
Вызов:
Call CalculateInterval(CLng(Right(Button.Key,Len(Button.Key)-1)), Me.transport_interval_from_field, Me.transport_interval_to_field)
29 мар 06, 14:44    [2502360]     Ответить | Цитировать Сообщить модератору
 Re: Отобразить список возможных параметров для своей функции  [new]
Anton Klyauzov
Member

Откуда:
Сообщений: 585
Ок, спасибо за помощь!
29 мар 06, 15:04    [2502531]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Access Ответить