Возможна ли покупка в Friendwork ThisworkBook в VBA? - PullRequest
0 голосов
/ 18 октября 2018

Я пытаюсь повторить второй ответ из этого вопроса .Вот мой код для ThisWorkBook:

Код

Option Explicit

Private Type TView
    UserInterFace As UIFrm
    Model as UIModel
End Type

Private this As TView

Friend Property Get UserInterFace() As UIFrm
    If this.UserInterFace Is Nothing Then
        Set this.UserInterFace = New UIFrm
    End If

    Set UserInterFace = this.UserInterFace
End Property

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    If Not this.UserInterFace Is Nothing Then
        Unload this.UserInterFace
        Set this.UserInterFace = Nothing
    End If
End Sub

Это должно - согласно ответу в ссылке выше - сделать меня способным сделать это в другом модуле того же проекта:

ThisWorkbook.UserInterface.Show

Контекст

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

UIModel - это класс модели UIFrm немодальная пользовательская форма пользовательского интерфейса

Проблема

Я не могу получить доступ к свойству costum с помощью ThisWorkBook.UserInterFace, и если я заявляюProperty Get как Публичный Я получу ошибку компиляции о: частные свойства не могут быть доступны публично.

Возможно ли даже иметь свойство Get в объекте ThisWorkbook?

1 Ответ

0 голосов
/ 18 октября 2018

ThisWorkbook может быть не тем, что вы думаете.

Существует Application.ThisWorkbook, который является свойством объекта Application.Он возвращает книгу, в которой находится код, который вызывает это свойство.

Существует также "просто" ThisWorkbook, имя кода , представляющее экземпляр класса Workbook, в котором находится ваш код,Проблема в том, что этот ThisWorkbook, в отличие от Application.ThisWorkbook, подлежит локализации.Это не часть объектной модели, это произвольное имя.

Для английской версии Excel локализованное имя тоже бывает ThisWorkbook.
Для неанглийских Excels этобудет нечто иное.

Таким образом, из-за приоритета области действия ThisWorkbook разрешается в "кодовое имя" в английском Excel и в Application.ThisWorkbook в неанглийском Excels.

Это один и тот же объект, но свойства Friend доступны только «поистине внутренне», поэтому при доступе к книге по маршруту Application.ThisWorkbook вы не можете их видеть.

Исправление заключается в переименовании локализованного ThisWorkbook Возврат к ThisWorkbook в дереве проекта.Подобно именам кодов листов, это изменение является локальным для файла.

Использование локализованного имени вместо ThisWorkbook в вашем коде также будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...