Página 1 de 1
Adaptação de Macro Exclusão de Módulo
Enviado: 13 Set 2021 às 10:57
por Saulo
Bom Dia!
A macro abaixo exclui individualmente um determinado módulo, é possível fazer uma adaptação, de forma que a macro ao invés de excluir um por um, Ela possa excluir de uma só vez determinado range de módulos, por exemplo: ("Módulo127";"Módulo128";"Módulo140") e assim sucessivamente
Sub ExcluirModuloVBA()
Dim vbCom As Object
Dim NomeModulo As String
NomeModulo = "Módulo127"
Set vbCom = Application.VBE.ActiveVBProject.VBComponents
vbCom.Remove VBComponent:=vbCom.Item(NomeModulo)
'MsgBox NomeModulo & " excluído com sucesso"
End Sub
Re: Adaptação de Macro Exclusão de Módulo
Enviado: 13 Set 2021 às 17:08
por Basole
Experimente fazer um loop com o seu codigo
Código: Selecionar todosSub ExcluirModuloVBA()
Dim vbCom As Object
Dim NomeModulo As Variant
NomeModulo = Array("Módulo127", "Módulo128", "Módulo140")
For Each it In NomeModulo
Set vbCom = Application.ActiveWorkbook.VBProject.VBComponents
vbCom.Remove VBComponent:=vbCom.Item(it)
'MsgBox NomeModulo & " excluído com sucesso"
Next
End Sub
Re: Adaptação de Macro Exclusão de Módulo
Enviado: 14 Set 2021 às 09:33
por Saulo
Bom dia Basole - 13 Set 2021 às 18:08
Funcionou Perfeitamente, Muito Obrigado!
Re: Adaptação de Macro Exclusão de Módulo [RESOLVIDO]
Enviado: 21 Set 2021 às 14:55
por Saulo
Boa Tarde Basole - 13 Set 2021 às 18:08
Preciso se possível de uma adaptação em sua macro anterior, é o seguinte: Neste ponto aqui da sua macro "NomeModulo = Array("Módulo127", "Módulo128", "Módulo140")", Tem como criar uma opção para exclusão por range de módulo? por exemplo: NomeModulo = Array("Módulo100": "Módulo128") neste momento estaríamos excluindo de uma vez só os módulos 100 até o módulo 128.
Desde já Agradeço
Re: Adaptação de Macro Exclusão de Módulo
Enviado: 21 Set 2021 às 22:43
por Basole
Essa função faz uma varredura na lista de objetos da pasta de trabalho e remove os módulos que atendam os parametros, no caso os módulos de 100 ao 128.
Veja se desta forma lhe atende:
*** Marcar Ref. Microsoft Visual Basic for Applications Extensibility 5.3 ****
Código: Selecionar todosPublic Sub ListaeRemoveModulos(mModName As String, mInicial As String, mFinal As String)
' * Marcar Ref. Microsoft Visual Basic for Applications Extensibility 5.3
Dim vbc As VBIDE.VBComponent
Dim it As Integer
For Each vbc In Application.VBE.ActiveVBProject.VBComponents
If vbc.Name Like "*" & mModName & "*" Then
If VBA.Replace(vbc.Name, mModName, "") >= mInicial And _
VBA.Replace(vbc.Name, mModName, "") <= mFinal Then
Application.VBE.ActiveVBProject.VBComponents.Remove vbc
it = it + 1
End If
End If
Next
If it > 0 Then MsgBox "Removido(s) " & it & " módulo(s) ", 64, "Sucesso !"
End Sub
Abaixo exemplo de chamar a funcao, com os parametros inicial e final (100 : 128), e com o prefixo "Módulo" que voce nomeou
Código: Selecionar todosSub Sua_Macro()
' *** Verifica se o projeto VBA esta protegido:
If Not VBA.CBool(Application.VBE.ActiveVBProject.Protection) Then
Call ListaeRemoveModulos("Módulo", 100, 128)
Else
MsgBox "Projeto VBA esta protegido", vbCritical, "Atenção"
End If
End Sub
Re: Adaptação de Macro Exclusão de Módulo
Enviado: 22 Set 2021 às 14:57
por Saulo
Boa Tarde! Prezado Basole - 21 Set 2021 às 23:43
O código abaixo atende, porém do jeito que está , caso precisemos excluir por exemplo os módulos 100 ao 199, tenho que digitar um por um, o desejável é que fosse estabelecido um critério de exclusão por range, ou seja, mais ou menos assim: NomeModulo = Range("Módulo100" até "Módulo199") com isso seriam excluídos de uma só vez, desde o módulo 100 até o módulo 199 de uma única vez.
Desde já agradeço
Sub ExcluirModuloVBA()
Dim vbCom As Object
Dim NomeModulo As Variant
NomeModulo = Array("Módulo127", "Módulo128", "Módulo140")
For Each it In NomeModulo
Set vbCom = Application.ActiveWorkbook.VBProject.VBComponents
vbCom.Remove VBComponent:=vbCom.Item(it)
'MsgBox NomeModulo & " excluído com sucesso"
Next
End Sub
Re: Adaptação de Macro Exclusão de Módulo
Enviado: 23 Set 2021 às 09:16
por Basole
Basole escreveu: ↑21 Set 2021 às 22:43
Essa função faz uma varredura na lista de objetos da pasta de trabalho e remove os módulos que atendam os parametros, no caso os módulos de 100 ao 128.
@Saulo desculpe, mas voce leu o que eu escrevi na minha postagem anterior ?
Fui bem claro: "
remove os modulos de 100 ao 128 "
Voce testou o codigo ?
Pela sua resposta, acho que não né ?
Faça o teste e depois me diga se apresentou algum erro ou não. Nao precisa criar todos os modulos, apenas 3 ou 4, renomeando-os aleatoriamente entre 100 e 128.