2013-10-08 4 views
2

Я относительно новичок в доступе, хотя у меня есть некоторый опыт работы в VB, мой вопрос, вероятно, очень прост, хотя я, похоже, не знаю терминологию для поиска, чтобы найти ответ, который я могу использовать ,Передача параметров в событиях VBA

Я создаю событие «OnChange» для управления вкладкой, которое я использую, я хотел бы передать неопределенное количество целых чисел в функцию. IE: =myFunction(1,4,6)ИЛИ=myFunction(ArrayList[1,2,4])

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

Это какое-то грубое кодирование, что я пытаюсь сделать, хотя я понятия не имею, как передать что-нибудь, кроме чего-то вроде =myFunction([Form])

Public Function Refresh(tabsToCheck As ArrayList) 

    For Each o In tabsToCheck 
     If Me.DevForm.Value = o Then 
      RefreshAllForms 
     End If 
    Next o 

End Function 

Public Function RefreshAllForms() 
    Dim f As Form 
    For Each f In Access.Forms 
     f.Refresh 
    Next 
End Function 

Update


Я думал, что буду обновлять свой окончательный код, если кому-то это понадобится в будущем, спасибо за вашу помощь!

Public Function RefreshControlTab(ctrl As Access.Control, ParamArray TabsToRefresh()) 
    Dim i As Long 
    Dim lngUBound As Long 

    If UBound(TabsToRefresh) >= 0 Then 
     lngUBound = UBound(TabsToRefresh) 
     For i = 0 To lngUBound 
      If ctrl.Value = (TabsToRefresh(i) - 1) Then 
      RefreshAllForms 
      End If 
     Next 
    End If 
End Function 


Public Function RefreshAllForms() 
    Dim f As Form 
    For Each f In Access.Forms 
     f.Refresh 
    Next 
End Function 

Так одно изменение вы могли бы сказать «= RefreshControlTab ([DevForm], 3,4)» и при выборе третьей или четвёртой вкладке освежать будет выполнена.

+0

Можете ли вы предоставить код для события OnChange? Кроме того, где вы определяете список целых чисел, которые должны быть переданы подпрограмме 'Refresh'? –

+0

Onchange будет что-то вроде = Refresh (1, 2, 4), синтаксис для этого ускользает от меня, так как я довольно новичок в доступе. Числа будут вводиться вручную вручную для каждого элемента управления вкладкой в ​​моей базе данных. В основном это приведет к тому, что «обновить все» произойдет только на вкладках, которые я передаю в функцию «Обновить». Если новое значение tab == - одно из чисел, которое я передал ему, то оно будет делать обновление, иначе оно ничего не сделает. – Newd

ответ

3

«Я хотел бы передать некоторое неопределенное количество целых чисел в функцию».

Это звучит как ParamArray для меня. См. Простую функцию ниже. Он вернет сумму набора чисел.

Public Function AddThem(ParamArray MyNumbers()) As Long 
    Dim i As Long 
    Dim lngReturn As Long 
    Dim lngUBound As Long 

    If UBound(MyNumbers) >= 0 Then 
     lngUBound = UBound(MyNumbers) 
     For i = 0 To lngUBound 
      lngReturn = lngReturn + MyNumbers(i) 
     Next 
    End If 
    AddThem = lngReturn 
End Function 

Обратите внимание на ParamArray представляет собой массив значений Variant. Таким образом, в рамках функции вам нужно будет проверить, являются ли значения номерами во избежание проблем ... одним из примеров проблемы может быть ошибка «несоответствие типа» ошибка при вызове функции со строковыми значениями: AddThem("a", "b")

+0

Удивительно, это, безусловно, приведет меня к правильному пути, теперь вот где мой вопрос о зеленых грибах вступает в игру. Как передать эти числа из события, это будет просто «= myFunction (« 1 »,« 2 »,« 3 »)« минус кавычки ». – Newd

+2

@Newd try '= MyFunction (Array (1,2,3))' –

+0

Я дам эту попытку, в процессе написания и тестирования этого сейчас, хотя может кто-то дать мне основную информацию о том, что «AddThem = lngReturn «делает? (как правило, не только в этой ситуации) – Newd

Смежные вопросы