Добрый день,
Я создал функцию для VBA, которая возвращает true или false, если все элементы управления в данной пользовательской форме имеют изменения, когда я пытаюсь закрыть форму без сохранения изменений в БД.
Код работает нормально, если я задаю существующее имя формы в For Each C In FormName.Controls
, пример: SMSConfig.Controls
.
Но я пытаюсь сделать его более динамичным, чтобы я мог использовать эту функцию в любой форме, поэтому мне просто нужно вызвать функцию Call FuncChanges(True, Me.Name)
в событии Close, чтобы она заработала, но там, где у меня есть FormName
, я не могу понять, как ссылаться на форму, имя которой хранится в Me.Name
.
Я получаю неверную квалифицированную ошибку за FormName
Извините за мой не очень хороший английский ... Есть идеи?
Public ChangesOld() As String
Public ChangesNew() As String
Public CtrlCount As Byte
Function FuncChanges(NewChanges As Boolean, FormName As String) As Boolean
Dim C As Control
Dim FLG As Boolean
CtrlCount = 0
For Each C In FormName.Controls
If TypeName(C) = "TextBox" Then CtrlCount = CtrlCount + 1
If TypeName(C) = "ComboBox" Then CtrlCount = CtrlCount + 1
If TypeName(C) = "OptionButton" Then CtrlCount = CtrlCount + 1
Next C
If NewChanges = True Then
ReDim ChangesNew(1 To CtrlCount)
CtrlCount = 0
FLG = False
For Each C In FormName.Controls
If TypeName(C) = "TextBox" Then CtrlCount = CtrlCount + 1: ChangesNew(CtrlCount) = C.Text
If TypeName(C) = "ComboBox" Then CtrlCount = CtrlCount + 1: ChangesNew(CtrlCount) = C.Text
If TypeName(C) = "OptionButton" Then CtrlCount = CtrlCount + 1: ChangesNew(CtrlCount) = C.Value
Next C
For X = LBound(ChangesOld) To UBound(ChangesOld)
If ChangesNew(X) <> ChangesOld(X) Then
FLG = True
Exit For
End If
Next X
If FLG = True Then FuncChanges = True Else FuncChanges = False
Else
ReDim ChangesOld(1 To CtrlCount)
CtrlCount = 0
For Each C In FormName.Controls
If TypeName(C) = "TextBox" Then CtrlCount = CtrlCount + 1: ChangesOld(CtrlCount) = C.Text
If TypeName(C) = "ComboBox" Then CtrlCount = CtrlCount + 1: ChangesOld(CtrlCount) = C.Text
If TypeName(C) = "OptionButton" Then CtrlCount = CtrlCount + 1: ChangesOld(CtrlCount) = C.Value
Next C
End If
End Function