none
Origem dos vinculos Power Point Excel RRS feed

  • Pergunta

  • Necessito urgentemente de uma ajuda....

    Faço relatórios mensais onde existem vinculos do excel para o power point, só que não consigo mudar automaticamente a origem do vinculo para o proximo mês, fica sempre puxando as informações da primeira pasta.

    Cada mês contem varios excel onde estão vinculados ao power point.

    Ex: Planilha de Janeiro a proxima deve puxar a de Fevereiro e não a de Janeiro de novo.

    Poderia me ajudar, ficarei muito grata.
    quarta-feira, 25 de fevereiro de 2015 13:14

Respostas

  • Não sei como você organiza as pastas de trabalho. Suponha que seja:

    2015-01.xlsx

    2015-02.xlsx

    2015-03.xlsx

    2015-04.xlsx

    Se esse for o caso, sugiro que as pastas de trabalho possuam a mesma estrutura. Dessa forma, crie um arquivo chamado Atual.xlsx e faça todas as referências de PowerPoint a ele.

    Então, no mês de janeiro, você fecha o PowerPoint, crie uma cópia de 2015-01.xlsx, apague o Atual.xlsx e renomeie a cópia para Atual.xlsx. Faça o mesmo assim que os mês passarem, pois dessa forma, a sua Apresentação sempre irá se referir ao mês desejado.

    --

    Outra solução: experimente executar esse código no PowerPoint, com a apresentação desejada aberta:

    'http://www.ozgrid.com/forum/showthread.php?t=147605
    Sub M1()
        Dim sld As Slide
        Dim sh As Shape
        Dim ExcelFileNew
        Dim exl As Object
        Set exl = CreateObject("Excel.Application")
         
         'Open a dialog box to promt for the new source file.
        ExcelFileNew = exl.Application.GetOpenFilename(, , "Select Excel File")
        Call stripPath(ExcelFileNew, filenameNew)
         
        For Each sld In ActivePresentation.Slides
            For Each sh In sld.Shapes
                If sh.Type = msoLinkedOLEObject Then
                    With sh.LinkFormat
                        LinkOld = .SourceFullName
                        Call stripReference(LinkOld, fullpathOld)
                        Call stripPath(fullpathOld, filenameOld)
                        LinkNew = Replace(LinkOld, filenameOld, filenameNew)
                        .SourceFullName = LinkNew
                         'Call showStrings(ExcelFileNew, filenameNew, LinkOld, fullpathOld, filenameOld, LinkNew)
                    End With
                End If
            Next sh
        Next sld
    End Sub
     '
    Sub stripPath(fullPath, filename)
         
         'This will take c:\folder\workbook.xlsx* and provide workbook.xlsx*
        Dim filenamePosition As Long
         
        filenamePosition = InStrRev(fullPath, "\")
        filename = Mid(fullPath, filenamePosition + 1, Len(fullPath) - filenamePosition)
         
    End Sub
     '
    Sub stripReference(fullReference, filename)
         
         'This will take *workbook.xls!Graphs![workbook.xls]Graphs Chart 1 and provide *workbook.xls
        Dim referencePosition As Long
         
        referencePosition = InStr(1, fullReference, "!")
        filename = Left(fullReference, referencePosition - 1)
         
    End Sub
     '
    Sub showStrings(ExcelFileNew, filenameNew, LinkOld, fullpathOld, filenameOld, LinkNew)
         
         'This is just a debugging function to display the variables
        MsgBox ("ExcelFileNew: " & ExcelFileNew & vbNewLine _
        & "filenameNew: " & filenameNew & vbNewLine _
        & "LinkOld: " & LinkOld & vbNewLine _
        & "fullpathOld: " & fullpathOld & vbNewLine _
        & "filenameOld: " & filenameOld & vbNewLine _
        & "LinkNew: " & LinkNew)
         
    End Sub


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    quarta-feira, 25 de fevereiro de 2015 16:59
    Moderador

Todas as Respostas

  • Não sei como você organiza as pastas de trabalho. Suponha que seja:

    2015-01.xlsx

    2015-02.xlsx

    2015-03.xlsx

    2015-04.xlsx

    Se esse for o caso, sugiro que as pastas de trabalho possuam a mesma estrutura. Dessa forma, crie um arquivo chamado Atual.xlsx e faça todas as referências de PowerPoint a ele.

    Então, no mês de janeiro, você fecha o PowerPoint, crie uma cópia de 2015-01.xlsx, apague o Atual.xlsx e renomeie a cópia para Atual.xlsx. Faça o mesmo assim que os mês passarem, pois dessa forma, a sua Apresentação sempre irá se referir ao mês desejado.

    --

    Outra solução: experimente executar esse código no PowerPoint, com a apresentação desejada aberta:

    'http://www.ozgrid.com/forum/showthread.php?t=147605
    Sub M1()
        Dim sld As Slide
        Dim sh As Shape
        Dim ExcelFileNew
        Dim exl As Object
        Set exl = CreateObject("Excel.Application")
         
         'Open a dialog box to promt for the new source file.
        ExcelFileNew = exl.Application.GetOpenFilename(, , "Select Excel File")
        Call stripPath(ExcelFileNew, filenameNew)
         
        For Each sld In ActivePresentation.Slides
            For Each sh In sld.Shapes
                If sh.Type = msoLinkedOLEObject Then
                    With sh.LinkFormat
                        LinkOld = .SourceFullName
                        Call stripReference(LinkOld, fullpathOld)
                        Call stripPath(fullpathOld, filenameOld)
                        LinkNew = Replace(LinkOld, filenameOld, filenameNew)
                        .SourceFullName = LinkNew
                         'Call showStrings(ExcelFileNew, filenameNew, LinkOld, fullpathOld, filenameOld, LinkNew)
                    End With
                End If
            Next sh
        Next sld
    End Sub
     '
    Sub stripPath(fullPath, filename)
         
         'This will take c:\folder\workbook.xlsx* and provide workbook.xlsx*
        Dim filenamePosition As Long
         
        filenamePosition = InStrRev(fullPath, "\")
        filename = Mid(fullPath, filenamePosition + 1, Len(fullPath) - filenamePosition)
         
    End Sub
     '
    Sub stripReference(fullReference, filename)
         
         'This will take *workbook.xls!Graphs![workbook.xls]Graphs Chart 1 and provide *workbook.xls
        Dim referencePosition As Long
         
        referencePosition = InStr(1, fullReference, "!")
        filename = Left(fullReference, referencePosition - 1)
         
    End Sub
     '
    Sub showStrings(ExcelFileNew, filenameNew, LinkOld, fullpathOld, filenameOld, LinkNew)
         
         'This is just a debugging function to display the variables
        MsgBox ("ExcelFileNew: " & ExcelFileNew & vbNewLine _
        & "filenameNew: " & filenameNew & vbNewLine _
        & "LinkOld: " & LinkOld & vbNewLine _
        & "fullpathOld: " & fullpathOld & vbNewLine _
        & "filenameOld: " & filenameOld & vbNewLine _
        & "LinkNew: " & LinkNew)
         
    End Sub


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    quarta-feira, 25 de fevereiro de 2015 16:59
    Moderador
  • Muitissimo Obrigada.

    Deu tudo certo.

    Att,

    quarta-feira, 25 de fevereiro de 2015 19:43
  • Felipe,

    Estou tentando fazer este mesmo procedimento, mas devo estar errando em algum momento.

    Consigo executar a macro, e chego até o prompt para escolher o novo arquivo de fonte, mas isso não está alterando a origem dos links de vínculo conforme o esperado.

    É possível detalhar mais esta etapa de executar o código?

    Obrigado!

    terça-feira, 6 de setembro de 2016 15:29
  • Clique na linha onde tem o código abaixo e pressione F9:

    LinkOld = .SourceFullName

    Verifique se o código está parando nessa linha ao ser executado.

    Se não, utilize F8 para depurar seu programa passo a passo.


    http://www.ambienteoffice.com.br - http://www.clarian.com.br

    quarta-feira, 7 de setembro de 2016 10:30
    Moderador