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

Откуда: Moscow
Сообщений: 157
Привет,

Что то не получается. Т.е. на кнопку панели инструментов/меню повесить свою функцию с параметрами.

А может все таки можно :) или в морг ?
17 янв 06, 19:47    [2263497]     Ответить | Цитировать Сообщить модератору
 Re: На CommandBarButton.OnAction можно повесить функцию с параметрами?  [new]
Serge Gavrilov
Member

Откуда:
Сообщений: 3248
Можно
17 янв 06, 20:10    [2263557]     Ответить | Цитировать Сообщить модератору
 Re: На CommandBarButton.OnAction можно повесить функцию с параметрами?  [new]
Пользователь2
Guest
Public Sub AddCommandBar()
    
    Dim cb As CommandBar
    Dim cbMenu As CommandBarControl
    
    On Error Resume Next
    Application.CommandBars("Test").Delete
    On Error GoTo 0
    
    Set cb = Application.CommandBars.Add( _
      Name:="Test", _
      Position:=msoBarTop, _
      MenuBar:=False, _
      Temporary:=True)
    
    Set cbMenu = cb.Controls.Add( _
      Type:=msoControlButton, _
      Temporary:=True)
    
    With cbMenu
        .Caption = "Открыть форму"
        .Style = msoButtonCaption
        .OnAction = "=fnOpenForm('frmCustomers')"
    End With
    
    cb.Visible = True
    
    Set cb = Nothing
    Set cbMenu = Nothing
End Sub

Public Function fnOpenForm( _
  strFormName As String)
      
    DoCmd.OpenForm strFormName, acNormal
End Function
18 янв 06, 08:51    [2264205]     Ответить | Цитировать Сообщить модератору
 Re: На CommandBarButton.OnAction можно повесить функцию с параметрами?  [new]
pechkin
Member

Откуда: Moscow
Сообщений: 157
У меня такая функция:
Private Function NewMember(Optional AddCopyMode As Boolean)

кнопке назначено:
=NewMember() , причем не в коде, а с помощью графического интерфейса.

При нажатии на кнопку - ругань. Экран ругани - приложил к посту. Может с Optional параметрами ей не нравятся?
Вобщем, я в непонятках..

К сообщению приложен файл. Размер - 0Kb
19 янв 06, 10:29    [2268296]     Ответить | Цитировать Сообщить модератору
 Re: На CommandBarButton.OnAction можно повесить функцию с параметрами?  [new]
Пользователь2
Guest
А если так:

Private Function NewMember( _
  Optional AddCopyMode As Boolean = True)
19 янв 06, 10:44    [2268402]     Ответить | Цитировать Сообщить модератору
 Re: На CommandBarButton.OnAction можно повесить функцию с параметрами?  [new]
Пользователь2
Guest
Вообще приведи полность функцию.
19 янв 06, 10:45    [2268411]     Ответить | Цитировать Сообщить модератору
 Re: На CommandBarButton.OnAction можно повесить функцию с параметрами?  [new]
Serge Gavrilov
Member

Откуда:
Сообщений: 3248
А почему функция Private? А где эта функция находится? В модуле формы?
19 янв 06, 11:02    [2268517]     Ответить | Цитировать Сообщить модератору
 Re: На CommandBarButton.OnAction можно повесить функцию с параметрами?  [new]
pechkin
Member

Откуда: Moscow
Сообщений: 157
Шиза какая -то. Сделал функцию как Public. Добавил значание по умолчанию аргументу.

А все равно ругань.


Функция находиться в модуле формы из которой задается видимость Menu с кнопкой, на которую жму. Имя этой же формы упоминается в сообщении обо ошибке: "frmMem"

Копированием через буфер вставляю сюда строку OnAction из кнопки меню: "=NewMember()"


Привожу код функции

Public Function NewMember(Optional AddCopyMode As Boolean = False)

On Error GoTo NewMember_Error

If Not IsMissing(AddCopyMode) Then
    mIsAddCopyMode = False
Else
    mIsAddCopyMode = True
End If

If Mode = List Then Mode = Add


NewMember_Exit:
On Error GoTo 0
Exit Function

NewMember_Error:
Select Case Err.Number

Case Else
    ErrorHandler ErrNumber:=Err.Number, ErrDescr:=Err.Description, ProcedureName:="NewMember", ModuleName:="Form_frmMem", ModuleType:="VBA Document"
End Select
GoTo NewMember_Exit

  End Function
19 янв 06, 15:38    [2270036]     Ответить | Цитировать Сообщить модератору
 Re: На CommandBarButton.OnAction можно повесить функцию с параметрами?  [new]
Karfaqen
Member

Откуда:
Сообщений: 7010
pechkin
Функция находиться в модуле формы
Перенесите эту функцию в общий модуль - будет работать.
19 янв 06, 17:01    [2270448]     Ответить | Цитировать Сообщить модератору
 Re: На CommandBarButton.OnAction можно повесить функцию с параметрами?  [new]
pechkin
Member

Откуда: Moscow
Сообщений: 157
2 Karfaqen

Хорошая новость: после перенесения в обычный модуль - заработало.
Что за шайтан. Чем не нравиться модуль формы?! Может пошлете к первоисточнику с объяснением фокуса?

Плохая новость: Эта функция использует приватные переменные формы. Поэтому вытащить функцию оттуда нельзя. Придется избавлятся от параметров.

С уважением
19 янв 06, 21:40    [2271172]     Ответить | Цитировать Сообщить модератору
 Re: На CommandBarButton.OnAction можно повесить функцию с параметрами?  [new]
Serge Gavrilov
Member

Откуда:
Сообщений: 3248
pechkin
2 Karfaqen
Плохая новость: Эта функция использует приватные переменные формы. Поэтому вытащить функцию оттуда нельзя. Придется избавлятся от параметров.

А что мешает вам в публичной процедуре стандартного модуля вытащить переменные формы, сделайте их публичными.
Думаю, что использовать в меню функцию из объектного модуля не очень хорошая идея.
19 янв 06, 23:52    [2271304]     Ответить | Цитировать Сообщить модератору
 Re: На CommandBarButton.OnAction можно повесить функцию с параметрами?  [new]
Мшсещырф
Guest
ну, еще можно в этой функции обратится к Screen.ActiveForm
и у полученного объекта вызвать метод которому и передавать полученный параметр

или использовать полученный параметр как имя метода

или можно перехватывать просто нажатия этой кнопки в форме
20 янв 06, 00:23    [2271323]     Ответить | Цитировать Сообщить модератору
 Re: На CommandBarButton.OnAction можно повесить функцию с параметрами?  [new]
pechkin
Member

Откуда: Moscow
Сообщений: 157
2 Serge Gavrilov
автор
А что мешает вам в публичной процедуре стандартного модуля вытащить переменные формы, сделайте их публичными.


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

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

Идея плоха только тем, что она не работает :) А вот почему не работает с модулем формы и причем только с параметрами Optional - молчит наука.
Такого ограничения я в доке не встречал. Любобытно узнать.

Спасибо Серж!
20 янв 06, 02:01    [2271385]     Ответить | Цитировать Сообщить модератору
 Re: На CommandBarButton.OnAction можно повесить функцию с параметрами?  [new]
pechkin
Member

Откуда: Moscow
Сообщений: 157
2Мшсещырф

Тут задача стояла несколько другая: Вызывать с помощью одной кнопки меню функцию с параметром optional, т.е. иногда =f(), а иногда и =f(argument)

В общем, так или иначе, задача решена. Благодарю за помощь.
20 янв 06, 02:06    [2271387]     Ответить | Цитировать Сообщить модератору
 Re: На CommandBarButton.OnAction можно повесить функцию с параметрами?  [new]
Karfaqen
Member

Откуда:
Сообщений: 7010
А вот почему не работает с модулем формы и причем только с параметрами Optional - молчит наука.
Ничего не могу сказать за фундаметальную науку от Microsoft, а вот экспериментально только что выявил, что чудеса в этом направлении идут еще далее. Функцию из модуля формы можно вызвать, написав ее вызов в OnAction в CommandBarButton если:

1) функция без параметров (это, как я понял, автору было известно)
2) функция имеет Option параметр, (но!) описанный As Variant и без указания Deafult значения.
т.е:
Function MyFun() - хорошо
Function MyFun(Optional par$) - плохо
Function MyFun(Optional par) - хорошо
Function MyFun(Optional par = "DefaultValue") - плохо
Но это еще не все.

3) Варианты хорошо работают, даже если функция описана как Private (!). При этом вызывается эта функция из Screen.ActiveForm. Т.е. В каждой форме по нажатию батона сработает своя функция MyFun. (ну если в активной форме нет такой функции, то будет ошибка, оно понятно).

Вот такой вот MyFun получается. (MSA2000, mdb)
20 янв 06, 10:48    [2272022]     Ответить | Цитировать Сообщить модератору
 Re: На CommandBarButton.OnAction можно повесить функцию с параметрами?  [new]
pechkin
Member

Откуда: Moscow
Сообщений: 157
Чудны дела твои Билли!
27 янв 06, 00:18    [2292668]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: На CommandBarButton.OnAction можно повесить функцию с параметрами?  [new]
Zalagaev
Member

Откуда: Москва
Сообщений: 626
Karfaqen
А вот почему не работает с модулем формы и причем только с параметрами Optional - молчит наука.
Ничего не могу сказать за фундаметальную науку от Microsoft, а вот экспериментально только что выявил, что чудеса в этом направлении идут еще далее. Функцию из модуля формы можно вызвать, написав ее вызов в OnAction в CommandBarButton если:

..........

3) Варианты хорошо работают, даже если функция описана как Private (!). При этом вызывается эта функция из Screen.ActiveForm. Т.е. В каждой форме по нажатию батона сработает своя функция MyFun. (ну если в активной форме нет такой функции, то будет ошибка, оно понятно).

Вот такой вот MyFun получается. (MSA2000, mdb)


Странно... мне это все не помогает!!! У меня Ms-Acess 2003

Пока был тут.. еще нарыл вот If Application.CommandBars.ActionControl.Caption="???" Then ...
Но это мне пока не полезно.. хоть и работает..
21 мар 07, 16:02    [3925115]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Access Ответить