Paulo, para evitar de se criar macros repetidas, usamos a rotina para deletar antes e depois recria-la, quanto ao caminho da pasta é só alterar onde está indicado, então para a questão de Deletar a existente, criar a nova e alterar o caminho fiz o ajuste das instruções, como já temos os arquivos anexos vou postar somente as rotinas e você substitui :
Ressaltando, que dependendo da versão do excel o arquivo Personal tem extensão diferente, se estiver usando da v 2007 pra cima o arquivo é "PERSONAL.XLSB" se 2003 é "PERSONAL.XLS", na rotina está "XLSB".
Obviamente, após trocar as rotinas, você não conseguirá testar mais com o arquivo modelo que enviei, ou terá de coloca-lo na mesma pasta onde está indicado na rotina.
Faça BACKUP antes de seus arquivos para evitar problemas e poder restaura-laos
Não entendi quando diz "e os módulos dentro do servidor compartilhado ficam neste outro caminho "X:EstoqueESCOLAS", está se referindo a arquivos ?
Uma outra coisa, o caminho que passou se refere ao seu PC, e pelo que li, cada PC tem um arquivo PERSONAL ? ou todos acessam somente o PERSONAL no caminho que citou ? Se cada PC tiver um arquivo PERSONAL terá de alterar os caminhos, podendo te-los nas celulas do arquivo e fazer um LOOP.
Primeiro adicionamos a rotina que irá deletar a macro existente
Sub DeleteProcedureFromModule()
Dim VBProj As VBIDE.VBProject
Dim VBComp As VBIDE.VBComponent
Dim CodeMod As VBIDE.CodeModule
Dim StartLine As Long
Dim NumLines As Long
Dim ProcName As String
Set VBProj = wbCadastro.VBProject
Set VBComp = VBProj.VBComponents("Módulo1")
Set CodeMod = VBComp.CodeModule
ProcName = "HelloWorld"
With CodeMod
StartLine = .ProcStartLine(ProcName, vbext_pk_Proc)
NumLines = .ProcCountLines(ProcName, vbext_pk_Proc)
.DeleteLines StartLine:=StartLine, Count:=NumLines
End With
End Sub
Troque a Macro por esta :
Public Sub DefineCaminhoEArquivo()
Dim abrirArquivo As Boolean
Dim wb As Workbook
Dim caminhoCompleto As String
Dim ARQUIVO_DADOS As String
Dim PASTA_DADOS As String
abrirArquivo = True
'Nome do Arquivo
'Altere para o nome que está usando
'ARQUIVO_DADOS = "PERSONAL.XLS" ' - versão Excel 2003
ARQUIVO_DADOS = "PERSONAL.XLSB" ' - versão Excel 2007-2016
'Caminho da pasta onde está o arquivo
'Estamos indicando que os dois arquivos estão na mesma pasta
'Ajuste para onde estiver o seu arquivo
'PASTA_DADOS = ThisWorkbook.Path '- se os arquivos estivessem na mesma pasta
'Caminho da pasta PERSONAL
PASTA_DADOS = "C:UsersPauloAppDataRoamingMicrosoftExcelXLINÍCIO"
If ThisWorkbook.Name <> ARQUIVO_DADOS Then
'monta a string do caminho completo
If PASTA_DADOS = vbNullString Or PASTA_DADOS = "" Then
caminhoCompleto = Replace(ThisWorkbook.FullName, ThisWorkbook.Name, vbNullString) & ARQUIVO_DADOS
Else
If Right(PASTA_DADOS, 1) = "" Then
caminhoCompleto = PASTA_DADOS & ARQUIVO_DADOS
Else
caminhoCompleto = PASTA_DADOS & "" & ARQUIVO_DADOS
End If
End If
'verifica se o arquivo não está aberto
For Each wb In Application.Workbooks
If wb.Name = ARQUIVO_DADOS Then
abrirArquivo = False
Exit For
End If
Next
'atribui o arquivo e abrimos com a opção de somente leitura falso para poder salvar
If abrirArquivo Then
Set wbCadastro = Workbooks.Open(Filename:=caminhoCompleto, ReadOnly:=False)
Else
Set wbCadastro = Workbooks(ARQUIVO_DADOS)
End If
Else
Set wbCadastro = ThisWorkbook
End If
'Exibe o arquivo aberto
'se quiser oculto troque para "False"
wbCadastro.Windows(1).Visible = True
'Deletamos antes a Macro já existente
Call DeleteProcedureFromModule
'criamos o novo procedimento
'pode usar a rotina para deletar a macro existente e adicionar a nova
Call CreateProcedure
'Fechar o arquivo e salvar
'Call FechaArquivo
End Sub
[]s
Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel
Postado : 26/12/2017 11:11 am