2016-02-14 9 views
1

Мне нужно удалить элементы управления из 75 Excel пользовательских форм. Я получил VBA код зацикливания файлов и используя VBIDE, я получил код удален. Однако они не смогли получить контроль над элементами управления.Удалить элементы управления из Excel Userform с помощью VBIDE

Вместо того, чтобы тратить время с кодом, я попытался, вот объект я использую:

Dim VBProj As VBIDE.VBProject 
Dim VBComp As VBIDE.VBComponent 
Dim CodeMod As VBIDE.CodeModule 
Dim CompItem As Object 
Dim objVBFrm As UserForm 

Set VBProj = ActiveWorkbook.VBProject 
Set VBComp = VBProj.VBComponents("frmSend") 
Set CodeMod = VBComp.CodeModule 
Set objVBFrm = VBComp.Designer 

With objVBFrm 
    .Controls.Remove chkNewCNV 
End With 

благодарит всех

ответ

1

может быть, я не получить точную цель, но то, что следует следует помочь вам начать работу по крайней мере

Sub RemoveControlsFromUserForm() 
Dim VBP As VBIDE.VBProject 
Dim VBC As VBIDE.VBComponent 
Dim cntrls As Controls 
Dim cntrl As Control 

Set VBP = ActiveWorkbook.VBProject 
For Each VBC In VBP.VBComponents 
    With VBC 
     If .Type = vbext_ct_MSForm And .Name = "UserForm1" Then 
      Set cntrls = .Designer.Controls 
      For Each cntrl In cntrls 
       If TypeName(cntrl) = "CheckBox" Then 
        If cntrl.Name = "chkNewCNV" Then cntrls.Remove cntrl.Name 
       End If 
      Next cntrl 
     End If 
    End With 
Next VBC 

End Sub 

просто изменить тип компонента (vbext_ct_MSForm) и название («UserForm1»), а также контрольных («CheckBox», «chkNewCNV») в соответствии с вашим пе eds

как для ошибки «Недопустимая обратная ссылка», может быть, пользовательская форма «frmSend» загружается, когда вы пытаетесь изменить (удалить) свои элементы управления. Должно быть, это должно быть так, вы должны его выгружать (только скрывать это не сработает), тогда действуйте на нем и, наконец, загрузите его. , или может быть, что вы должны запустить логический диск удаления перед удалением элемента управления или сочетание двух ... , а затем все еще могут возникнуть некоторые проблемы из-за фактического времени всех этих операций (разгрузка формы, обрабатывать его и его элементы управления/логики), чтобы они неправомерно (хотя и непроизвольно) вмешивались.

Чтобы избавиться от возможных (и может быть других!) Возможных побочных эффектов, простым решением может быть просто скрытие нежелательных элементов пользовательской формы и что вы можете сделать это прямо в своем коде, который загружает пользовательскую форму перед ее показом. Или, если вы «должны» действовать программно, вы можете добавить эти «скрывающие» обработки строк кода (вместо удаления) логика

+0

Скопировал ваш код и изменил UserForm1 на мое имя пользовательской формы, frmSend. Мы подошли ближе, элементы управления были найдены. Получите эту ошибку на cntrls.Remove cntrl.Name «Не удалось удалить элементы управления. Неверная обратная ссылка или ссылка на несвязанный тип». – Willie

+0

Извините, я не объяснил цель. У меня есть файл Excel, который используется для внесения изменений в пакет файлов Excel. Он просматривает все файлы в папке, открывает, изменяет и закрывает. Что мне нужно сделать с этими 75 файлами, это удалить три элемента управления из пользовательской формы и логику для них. Я удалил логику, но не могу удалить элементы управления. – Willie

 Смежные вопросы

  • Нет связанных вопросов^_^