Форум программистов, компьютерный форум, киберфорум
Наши страницы

VBA

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 45, средняя оценка - 4.62
kolhara
3 / 3 / 0
Регистрация: 28.12.2009
Сообщений: 41
#1

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

11.03.2010, 15:57. Просмотров 7509. Ответов 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
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Программное добавление элементов в пользовательскую форму (VBA):

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

Создайте пользовательскую форму - VBA
Создайте пользовательскую форму на которой расположите 2 элемента TextBox и 2 кнопки (добавить и очистить).Второй элемент TextBox должен...

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

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

Как правильно закрыть пользовательскую форму - VBA
В пользовательской форме не работает кнопка "выход", пишет ошибку ( выложил скрин ниже). Private Sub Кнопка_заполнить_Click() Dim...

Поиск по таблице через пользовательскую форму - VBA
Здравствуйте! Мне нужна Ваша помошь вот в каком вопросе. Sub СохранитьДанныеВ_БД() Dim ro As Range: Set ro = DB.Range("a" &...

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
1898 / 775 / 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
1898 / 775 / 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
1898 / 775 / 31
Регистрация: 11.02.2010
Сообщений: 1,567
29.03.2010, 23:03 #7
на всякий случай. в этой теме, Программное создание нескольких Label, их удаление, есть еще симпатичные примеры. правда на чистом VB но их не трудно адаптировать
1
ironegg
1898 / 775 / 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
Привет! Вот еще темы с ответами:

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

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

разработать пользовательскую форму и составить программу в редакторе VB MS Excel - VBA
Натуральное число называется совершенным, если оно равно сумме своих делителей, включая 1 и исключая само число (например, 6 = 1...

Создать пользовательскую форму для вычисления стоимости всех перевозок - VBA
Товарищи, нужна помощь: нужно создать пользовательскую форму для вычисления стоимости всех перевозок. 1.Создать ПФ для вычисления...


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

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

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