Ссылка UserForm.TextValue1 из запроса кода VB - PullRequest
0 голосов
/ 17 апреля 2019

У меня есть предварительно созданная рабочая книга xlsm, в которой есть некоторые пользовательские формы, которые я хотел бы установить со значениями из некоторого кода VB. Таким образом, я могу получить доступ, открыть и показать книгу, там все хорошо, но у меня проблема с получением правильного синтаксиса / терминологии для interactibg с пользовательскими формами.

мой код выглядит примерно так:

Dim wb as Object = getworkbook(handle, workbookname)
'i now have a workbook i can manipulate
'here i've left out a series of worksheet calls that happen and some other macro calls which I dont believe are relevant
'now i would like to reference the form that was named 'UserForm1' and in that form there are multiple text boxes with various titles so we'll just go with the first one 'TextBox1'.
' so i am trying to reference UserForm1.TextBox1 and set it to 'abcd'

'try 1 
wb.UserForm1.TextBox1 = "abcd"
'gives public member userform1 on type workbook not found

'try 2
wb.UserForm1.TextBox1.Value = "abcd"
'gives public member userform1 on type workbook not found

'try 3
'saw this on windows site but i dont get the syntax of calling them controls                     
'so im not confident in exactly how this was supposed to work
For Each Control in UserForm1.Controls
    Control.Visible = True
Next Control
'this was just to make it visible but it didnt work, i get compile errors of 
'UserForm1 not accessible maybe due to its protectionlevel.

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

Я догадываюсь о моей работе до сих пор, что пользовательские формы «не существуют» во время выполнения, и мне нужно создать объект для манипуляции из кода VB, но я не могу найти синтаксис, как правильно ссылаться на пользовательские формы.

у кого-нибудь есть идеи?

РЕДАКТИРОВАТЬ: небольшое уточнение GEtWorkbook () - это предопределенная задача, извините за то, что она не обеспечивает ясности в том, что в основном она открывает целевую рабочую книгу по дескриптору экземпляра, а имя рабочей книги включает в себя путь к файлу, а также имя вместе, чтобы указывать на рабочую книгу.

1 Ответ

0 голосов
/ 17 апреля 2019

Нет необходимости использовать wb.UserForm1.TextBox1.Вместо этого используйте это:

UserForm1.TextBox1.Value = "abcd"

Чтобы сделать все элементы управления в пользовательской форме видимым, используйте это в UserForm_Initialize Событии:

Sub UserForm_Initialize()
Dim ctrl as Control

For each ctrl in UserForm1.Controls
     If Typename(ctrl) = "TextBox" then
         ctrl.Visible = True
     End If
Next ctrl
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...