powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / програмное добавление элемента управления в форму
11 сообщений из 11, страница 1 из 1
програмное добавление элемента управления в форму
    #33256740
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите пожалуста
что не так?
на строке set выдает ошибку
Run-time error 91
Object variable or With block variable not set


Private Sub Workbook_Open()
On Error Resume Next
'определение есть объект или нет
pr = MyKurs.Controls.Count
If pr < 1 Then
'регистрация календаря
Program = "regsvr32 /s mscal.ocx"
Taskedit = Shell(Program, 1)
If Err <> 0 Then
MsgBox "Не возможно зарегистрировать календарь.", vbCritical
Exit Sub
End If
On Error GoTo 0

'добавление календаря
Dim MyCal As MSACAL.Calendar
Set MyCal = ThisWorkbook.VBProject.VBComponents("MyKurs").Designer.Controls.Add("MSACAL.Calendar")
End If
End Sub
...
Рейтинг: 0 / 0
програмное добавление элемента управления в форму
    #33257293
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
все не так.
Начать надо с того, что регестрировать и перерегестрировать OCX при каждом запуске книги это чрезвычайно извращенно. ОСХ должен регестрироваться инсталлятором, один раз.

Во вторых, ключевое слово DIM не должно быть в центре процедуры. Оно всегда должно идти в начале.

В третьих, динамически строить диалоги конечно можно, но все же не нужно. Это гарантирует странные глюки если не сейчас, то потом.

Ну и в четвертых, VBComponents("MyKurs") это не ссылка на твой объект типа Forms. Чтобы добраться до форм надо писать что-то вроде: VBComponents("MyKurs").Collection("MyUserForm").Designer..... и так далее.
...
Рейтинг: 0 / 0
програмное добавление элемента управления в форму
    #33257391
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owlвсе не так.
Начать надо с того, что регестрировать и перерегестрировать OCX при каждом запуске книги это чрезвычайно извращенно. ОСХ должен регестрироваться инсталлятором, один раз.

Во вторых, ключевое слово DIM не должно быть в центре процедуры. Оно всегда должно идти в начале.

В третьих, динамически строить диалоги конечно можно, но все же не нужно. Это гарантирует странные глюки если не сейчас, то потом.

Ну и в четвертых, VBComponents("MyKurs") это не ссылка на твой объект типа Forms. Чтобы добраться до форм надо писать что-то вроде: VBComponents("MyKurs").Collection("MyUserForm").Designer..... и так далее.

с инстолятором не знаком поэтому и стоит проверка следовательно регистрируется он один раз
на счет Dim согласен принимаю раслабился
динамически строить диалоги - это что? Я у себя диалогов не нашел.
а вот что-то вроде спасибо очень помогло,
жаль что только не работает, сам бы сначала проверил а потом советовал.
...
Рейтинг: 0 / 0
програмное добавление элемента управления в форму
    #33258020
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Знатоки подскажите пожалуста
первый set работает а на второй дает ошибку
"Rin-time 429
ActiveX component can't create object

Dim MyCal As Calendar
Dim d As CommandButton
Set d = ThisWorkbook.VBProject.VBComponents("UserForm1").Designer.Controls.Add("forms.CommandButton.1")
Set MyCal = ThisWorkbook.VBProject.VBComponents("UserForm1").Designer.Controls.Add("cal.Calendar")
...
Рейтинг: 0 / 0
програмное добавление элемента управления в форму
    #33260428
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Sub InsertControls()
    Dim btn As MSForms.CommandButton
    Dim cal As MSACAL.Calendar

    On Error Resume Next
    
    ' Регистрируем библиотеку.
    Shell "regsvr32 /s mscal.ocx",  1 
    
    'Добавляем ссылку.
    ThisWorkbook.VBProject.References.AddFromFile "mscal.ocx"
    
    ' Добавляем контролы.
    Set btn = ThisWorkbook.VBProject.VBComponents("UserForm1"). _
      Designer.Controls.Add("Forms.CommandButton.1")
    Set cal = ThisWorkbook.VBProject.VBComponents("UserForm1"). _
      Designer.Controls.Add("MSCAL.Calendar")
End Sub
...
Рейтинг: 0 / 0
програмное добавление элемента управления в форму
    #33260920
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пользователь2
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Sub InsertControls()
    Dim btn As MSForms.CommandButton
    Dim cal As MSACAL.Calendar

    On Error Resume Next
    
    ' Регистрируем библиотеку.
    Shell "regsvr32 /s mscal.ocx",  1 
    
    'Добавляем ссылку.
    ThisWorkbook.VBProject.References.AddFromFile "mscal.ocx"
    
    ' Добавляем контролы.
    Set btn = ThisWorkbook.VBProject.VBComponents("UserForm1"). _
      Designer.Controls.Add("Forms.CommandButton.1")
    Set cal = ThisWorkbook.VBProject.VBComponents("UserForm1"). _
      Designer.Controls.Add("MSCAL.Calendar")
End Sub


спасибо огромное два дня бился
однако заметил странную штуку
из стандартного модуля всё в порядке
а из "Эта Книга" не работает
...
Рейтинг: 0 / 0
програмное добавление элемента управления в форму
    #33260949
Проверил на Workbook_Open(), все работает.
...
Рейтинг: 0 / 0
програмное добавление элемента управления в форму
    #33261209
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если на компе не зарегистрирован mscal.ocx
то при открытии книги ругается на
Dim cal As MSACAL.Calendar
возможно ли как-то это обойти?
...
Рейтинг: 0 / 0
програмное добавление элемента управления в форму
    #33261455
А что мешает его зарегистрировать?
...
Рейтинг: 0 / 0
програмное добавление элемента управления в форму
    #33261657
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пользователь2А что мешает его зарегистрировать?

так и хотелось что бы само регистрировалось и добавляла контролы
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
програмное добавление элемента управления в форму
    #36359571
Ммм234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkodor,

Set MyCal = ThisWorkbook.VBProject.VBComponents("MyKurs").Designer.Controls.Add("MS A CAL.Calendar")
лишняя А
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / програмное добавление элемента управления в форму
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]