Обнаружение изменений в элементах управления в пользовательской форме - PullRequest
0 голосов
/ 26 октября 2018

Добрый день,

Я создал функцию для 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...