Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / програмное добавление элемента управления в форму / 11 сообщений из 11, страница 1 из 1
07.09.2005, 15:35
    #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
07.09.2005, 18:24
    #33257293
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
програмное добавление элемента управления в форму
все не так.
Начать надо с того, что регестрировать и перерегестрировать OCX при каждом запуске книги это чрезвычайно извращенно. ОСХ должен регестрироваться инсталлятором, один раз.

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

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

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

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

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

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

с инстолятором не знаком поэтому и стоит проверка следовательно регистрируется он один раз
на счет Dim согласен принимаю раслабился
динамически строить диалоги - это что? Я у себя диалогов не нашел.
а вот что-то вроде спасибо очень помогло,
жаль что только не работает, сам бы сначала проверил а потом советовал.
...
Рейтинг: 0 / 0
08.09.2005, 10:54
    #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
09.09.2005, 10:22
    #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
09.09.2005, 12:19
    #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
09.09.2005, 12:30
    #33260949
програмное добавление элемента управления в форму
Проверил на Workbook_Open(), все работает.
...
Рейтинг: 0 / 0
09.09.2005, 13:33
    #33261209
vkodor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
програмное добавление элемента управления в форму
если на компе не зарегистрирован mscal.ocx
то при открытии книги ругается на
Dim cal As MSACAL.Calendar
возможно ли как-то это обойти?
...
Рейтинг: 0 / 0
09.09.2005, 14:41
    #33261455
програмное добавление элемента управления в форму
А что мешает его зарегистрировать?
...
Рейтинг: 0 / 0
09.09.2005, 15:46
    #33261657
vkodor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
програмное добавление элемента управления в форму
Пользователь2А что мешает его зарегистрировать?

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

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


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