Código VBA para planilhas de cópia contendo intervalos nomeados da pasta de trabalho de origem à destino

StackOverflow https://stackoverflow.com/questions/8404713

Pergunta

Eu tenho 2 pastas de trabalho. Uma pasta de trabalho de origem e uma pasta de trabalho de destino. Eles são completamente iguais, exceto por 1 planilha que tem o mesmo nome em ambos, mas com dados diferentes (ambos contêm cerca de 30 planilhas). O que eu queria era copiar o resto das planilhas idênticas da pasta de trabalho de origem para a pasta de destino, deixando aquela planilha que adia os dados.

Basicamente, as planilhas idênticas presentes na pasta de trabalho de destino devem ser substituídas pelas da pasta de trabalho de origem. As planilhas contêm fórmulas e intervalos nomeados. Consegui escrever o código VBA para copiar as planilhas. Mas uma vez que os intervalos nomeados têm um escopo de pasta de trabalho. Os intervalos nomeados ainda se referem a locais nas pastas de trabalho de origem. Portanto, recebo 2 intervalos nomeados com o mesmo nome. Algo como:

'The one already present in the destination workbook (from the worksheet which was replaced)
Name=VaccStart , Refers To =Sheet2!$A$2 
'The one due to the copied worksheet.
Name=VaccStart , Refers To =[C:\Users\.....\Source.xls]Sheet2!$A$2 

Desejo que os intervalos nomeados se refiram à pasta de trabalho de destino e não à pasta de trabalho de origem ao copiá-los. Uma vez que todas as planilhas em ambas as pastas de trabalho são iguais e estou apenas substituindo-as.

Foi útil?

Solução

Uma maneira fácil de contornar a criação inadvertida de link ao mover de uma pasta de trabalho de origem para a de destino é vincular novamente a pasta de trabalho de destino da fonte para ela mesma

Captura de tela para xl2010

  • Editar .... Links
  • 'Alterar fonte "e escolha o arquivo atual como a nova fonte

insira a descrição da imagem aqui

Outras dicas

Isso modificará os intervalos nomeados para remover a referência do arquivo externo:

Sub ResetNamedRanges()
    Dim nm As Name
    Dim sRefersTo As String
    Dim iLeft As Integer
    Dim iRight As Integer

    For Each nm In ActiveWorkbook.Names
        sRefersTo = nm.RefersTo
        iLeft = InStr(sRefersTo, "[")
        iRight = InStr(sRefersTo, "]")
        If iLeft > 1 And iRight > 0 Then
            sRefersTo = Left$(sRefersTo, iLeft - 1) & Mid$(sRefersTo, iRight + 1)
            nm.RefersTo = sRefersTo
        End If
    Next nm
End Sub
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top