Форум программистов, компьютерный форум, киберфорум
Наши страницы
VBA
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.84/43: Рейтинг темы: голосов - 43, средняя оценка - 4.84
kolhara
3 / 3 / 0
Регистрация: 28.12.2009
Сообщений: 41
1

Программное добавление элементов в пользовательскую форму

11.03.2010, 15:57. Просмотров 8270. Ответов 8
Метки нет (Все метки)

Доброго времени суток!
Есть пользовательская форма (см. вложение).
Стоит нетривиальная задача (во всяком случае для меня).
Нужно сделать так, чтобы при изменении значения в текстовом поле "количество" соответственно изменялось и количество ComboBox'ов и TextBox'ов ("Модель", "Инвентарный номер", "Серийный номер", "Стоимость"). То есть, если "количество" = 5, то на форме появляется 5 ComboBox'ов "Модель", 5 TextBox'ов "Инвентарный номер" и т. д.
Как изменить размеры формы в зависимости от значения поля, код написан, а вот с добавлением и удалением элементов возникла заминка.
Подскажите, пожалуйста.


P. S.
Система Win2000/XP
Office 2003
0
Миниатюры
Программное добавление элементов в пользовательскую форму  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.03.2010, 15:57
Ответы с готовыми решениями:

1. Создать пользовательскую функцию. Используйте операторы if и Case. 2. Создать Пользовательскую Форму, использующую функцию
1) Создать пользовательскую функцию. Используйте операторы if и Case. 2)...

Создайте пользовательскую форму
Создайте пользовательскую форму на которой расположите 2 элемента TextBox и 2...

Можно ли диаграмму поместить в пользовательскую форму?
По сути это весь вопрос. Если кто с этим сталкивался прошу поделиться кодом....

Разработать подпрограмму или пользовательскую форму
И так последняя задача, которая нужна также позарез. 3. Разработать...

Поиск по таблице через пользовательскую форму
Здравствуйте! Мне нужна Ваша помошь вот в каком вопросе. Sub...

8
аналитика
здесь больше нет...
3349 / 1664 / 184
Регистрация: 03.02.2010
Сообщений: 1,219
11.03.2010, 16:17 2
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Sub Add100Buttons()
   Dim UFvbc As Object   'VBComponent
   Dim cb As CommandButton
   Dim N As Integer, c As Integer, R As Integer
 
   Set UFvbc = ThisWorkbook.VBProject.VBComponents("UserForm1")
   N = 1
   For R = 1 To 10
      For c = 1 To 10
         Set cb = UFvbc.Designer.Controls.Add("Forms.CommandButton.1")
         With cb
            .Width = 60
            .Height = 50
            .Left = (c * 63) - 60
            .Top = (R * 53) - 50
            .Caption = N
            .Tag = ""
            .ControlTipText = N
            .Font.Size = 14
         End With
         N = N + 1
      Next c
   Next R
End Sub
добавляет 100 кнопок на форму, попробуй по аналогии...
1
kolhara
3 / 3 / 0
Регистрация: 28.12.2009
Сообщений: 41
11.03.2010, 17:12  [ТС] 3
Цитата Сообщение от аналитика Посмотреть сообщение
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Sub Add100Buttons()
   Dim UFvbc As Object   'VBComponent
   Dim cb As CommandButton
   Dim N As Integer, c As Integer, R As Integer
 
   Set UFvbc = ThisWorkbook.VBProject.VBComponents("UserForm1")
   N = 1
   For R = 1 To 10
      For c = 1 To 10
         Set cb = UFvbc.Designer.Controls.Add("Forms.CommandButton.1")
         With cb
            .Width = 60
            .Height = 50
            .Left = (c * 63) - 60
            .Top = (R * 53) - 50
            .Caption = N
            .Tag = ""
            .ControlTipText = N
            .Font.Size = 14
         End With
         N = N + 1
      Next c
   Next R
End Sub
добавляет 100 кнопок на форму, попробуй по аналогии...
Проблема: при выполнении 10-й строки кода пишет: "Object variable or With block variable not set".
Кстати, макрос исполняется в Word.
0
ironegg
1899 / 776 / 31
Регистрация: 11.02.2010
Сообщений: 1,567
12.03.2010, 17:57 4
Лучший ответ Сообщение было отмечено как решение

Решение

Visual Basic
1
2
3
4
5
6
Private Sub CommandButton1_Click()
Static n
Dim MyTextBox As TextBox
Set MyTextBox = UserForm1.Controls.Add("Forms.TextBox.1", "MyTextBox" & n)
n = n + 1
End Sub
вот это работает

Добавлено через 42 минуты
а так можно к ним обращаться
Visual Basic
1
2
3
4
5
6
7
8
9
10
Private Sub CommandButton2_Click()
Dim c As Control
For Each c In Controls
    If c.Name Like "MyTextBox*" Then
        MsgBox c.Name
        c.Left = 20 + n
        n = n + 20
    End If
Next
End Sub
3
kolhara
3 / 3 / 0
Регистрация: 28.12.2009
Сообщений: 41
24.03.2010, 17:57  [ТС] 5
Цитата Сообщение от ironegg Посмотреть сообщение
Visual Basic
1
2
3
4
5
6
Private Sub CommandButton1_Click()
Static n
Dim MyTextBox As TextBox
Set MyTextBox = UserForm1.Controls.Add("Forms.TextBox.1", "MyTextBox" & n)
n = n + 1
End Sub
вот это работает

Добавлено через 42 минуты
а так можно к ним обращаться
Visual Basic
1
2
3
4
5
6
7
8
9
10
Private Sub CommandButton2_Click()
Dim c As Control
For Each c In Controls
    If c.Name Like "MyTextBox*" Then
        MsgBox c.Name
        c.Left = 20 + n
        n = n + 20
    End If
Next
End Sub
Да! Вот это действительно работает!

Но вот ещё вопрос:
Количество элементов напрямую зависит от значения в поле "Количество". Какой код нужно написать, чтобы отслеживать значение в этом поле, и динамически не только добавлять, но и удалять элементы?
Понятно, что код должен находиться в процедуре "TextBox_Change", но что конкретно написать?..
0
ironegg
1899 / 776 / 31
Регистрация: 11.02.2010
Сообщений: 1,567
27.03.2010, 17:00 6
Лучший ответ Сообщение было отмечено как решение

Решение

Visual Basic
1
2
3
4
5
For Each c In Controls
    If c.Name Like "MyTextBox*" Then
        Controls.Remove c.Name
    End If
Next
3
ironegg
1899 / 776 / 31
Регистрация: 11.02.2010
Сообщений: 1,567
29.03.2010, 23:03 7
на всякий случай. в этой теме, Программное создание нескольких Label, их удаление, есть еще симпатичные примеры. правда на чистом VB но их не трудно адаптировать
1
ironegg
1899 / 776 / 31
Регистрация: 11.02.2010
Сообщений: 1,567
10.04.2010, 03:02 8
а это - самый лучший вариант удаления
Visual Basic
1
2
3
4
5
6
Dim i As Control
For Each i In Me.Controls
    If TypeName(i) = "TextBox" Then
        Me.Controls.Remove (i.Name)
    End If
Next i
следует заметить: удалять таким образом можно лиш те элементы, которые были созданы программно
0
deafjam
2 / 2 / 1
Регистрация: 10.05.2010
Сообщений: 74
05.07.2010, 11:37 9
Тут обращения к свойствам, а как в DataGridView обратиться к Rows?
Нужно в цикле считать значения ячеек в Gridах, DataGridView.Rows.Item(i).Columns.Item(j).Text
0
05.07.2010, 11:37
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.07.2010, 11:37

Как правильно закрыть пользовательскую форму
В пользовательской форме не работает кнопка "выход", пишет ошибку ( выложил...

Создать пользовательскую форму для работы с матрицей
Здравствуйте! В университете дали лабораторную работу по созданию...

Создать пользовательскую форму, выводящую значения функции
Необходимо создать пользовательскую форму, выводящую значения функции. Добавить...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru