Страницы: 1
RSS
VBA удаление программно добавленных объектов UserForm
 
Привет.  Помогите, пжста. Видела уже что-то подобное, но под себя не смогла адаптировать.

В зависимости от значения textbox 2 на странице multipage во фрейме добавляются textbox и combox
Код такой:
Код
Private Sub TextBox2_Change()

Dim i As Byte
Dim МойЛБ As MSForms.ComboBox
Dim МойТБ As MSForms.TextBox

      If TextBox2.Value >= 3 And TextBox2.Value <> "" Then
       
        For i = 1 To TextBox2.Value - 2
 
        Set МойТБ = Для_Разбивки.MultiPage1.Pages(1).Controls("Frame1").Add("Forms.TextBox.1") 
        With МойТБ
         .Width = TextBox4.Width
         .Height = TextBox4.Height
         .Left = TextBox4.Left
         .Top = TextBox4.Top + i * (TextBox4.Top - TextBox3.Top)
         .Font.Name = Tahoma
         .Font.Size = 10
         .Name = "МойТБ" & i
        End With
        
        Set МойЛБ = Для_Разбивки.MultiPage1.Pages(1).Controls("Frame1").Add("Forms.ComboBox.1")
         With МойЛБ 
         .Width = ComboBox1.Width
         .Height = ComboBox1.Height
         .Left = ComboBox1.Left
         .Top = ComboBox1.Top + i * (ComboBox1.Top - DopBOX.Top)
         End With
           
            Dim j As Byte
             For j = 1 To 86
             МойЛБ .AddItem (Workbooks("имя").Worksheets("имя").Cells(j, 1).Value)
             Next j

    Next i
  
    ElseIf TextBox2.Value = "" Then
    Вот сюда код на удаление нужен всех программно добавленных боксов. Во фрейме еще 3 текстбокса и 1 комбо, они само собой остаться должны, хотя их программно все равно не удалить, т.к. они добавлены в ручную сразу на форму.
    Next
    
    ElseIf TextBox2.Value <= 2 Then
    Exit Sub
  End If
    
   
End Sub
Пример такой видела в теме:
Код
    Dim объект As Control
    For Each объект In Me.Controls
    If объект.Name <> "CommandButton1" Then Controls.Remove объект.Name
    Next
Там что-то на кнопке завязано.
Под мой код не получается, то пишет, что метод не поддерживается, то объект не определен. Я не спец,  просто пишу не правильно, по разному пыталась.
В общем, нужна помощь).Спасибо.
   
Изменено: Evilin - 29.06.2016 12:55:48
 
Evilin, код следует оформлять соответствующим тегом. Ищите такую кнопку и исправьте своё сообщение.
Спасибо!
 
при добавлении контролов заполняйте поле tag( чем угодно, но одинаково)

потом перебор всех контролов и проверка поля tag - если совпадает с вашим описанием, то удалить контрол
Живи и дай жить..
 
Я даже один конкретный объект удалить не могу.
Вот создался у меня текстбокс с именем "МойТБ1", как конкретно его удалить? Код какой?
Пишу так:
Код
 Для_Разбивки.MultiPage1.Pages(1).Controls("Frame1").Remove МойТБ1
ошибка " нельзя удалить контрол, метод нельзя использовать в данном контексте"
Изменено: Evilin - 29.06.2016 13:09:01
 
выкладывайте уже пример
Живи и дай жить..
 
Это черновик-версия.

Нужно именно удалить, вариант с hide не подойдет.

Сижу пробую разные варианты. Новая ошибка выползла - ошибка 429
Изменено: Evilin - 29.06.2016 14:10:20
 
вы запутались с квалификаторами пока больше не могу сказать убегаю
Живи и дай жить..
 
Цитата
Evilin написал:
Для_Разбивки.MultiPage1.Pages(1).Controls("Frame1").Remove МойТБ1
ошибка " нельзя удалить контрол, метод нельзя использовать в данном контексте"
Вы контейнер пытаетесь удалить, может с именами напутали?
Изменено: Udik - 29.06.2016 16:12:36
Арфы - нет, возьмите бубен.
 
Сочинила решение сама уже.
Все везде нормально было, просто почему-то нужно отдельный объект, наверное все-таки вводить.
Комбобоксы я переименовала для личного удобства с "МойЛБ" (листбоксы сначала были) на "МойКБ"

Спасибо кто пытался разобраться))
Заработал такой код:
Код
ElseIf TextBox2.Value = "" Then

    Dim объект As MSForms.Control
    For Each объект In Для_Разбивки.Controls
       If объекты.Name Like "МойТБ*" Then
       Для_Разбивки.Controls.Remove объект.Name
       ElseIf объект.Name Like "МойКБ*" Then
        Для_Разбивки.Controls.Remove объект.Name
       End If
    Next
Страницы: 1
Читают тему
Наверх