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 todos
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: 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 todos
Public 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 todos
Sub 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.